diff --git a/docs/collectors/proxvmservices.md b/docs/collectors/proxvmservices.md index 35c821a..12c18f5 100644 --- a/docs/collectors/proxvmservices.md +++ b/docs/collectors/proxvmservices.md @@ -2,387 +2,267 @@ ## Описание -Коллектор `proxvmservices` предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами. +Коллектор `proxvmservices` предназначен для автоматического обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он обеспечивает комплексный анализ инфраструктуры, включая обнаружение сервисов, их конфигурацию, состояние кластеров и соединения между компонентами. -**Поддерживаемые способы развертывания:** -- Нативные процессы (systemd, init) -- Docker-контейнеры -- Docker Compose +### Ключевые возможности + +- **Автоматическое обнаружение** 26+ популярных сервисов +- **Поддержка кластерных и автономных** развертываний +- **Множественные способы развертывания**: нативные процессы, Docker-контейнеры, Docker Compose +- **Детальная информация о кластерах**: узлы, состояние, конфигурация +- **Интеграция с Proxmox**: получение machine_uid для корреляции данных +- **Гибкая конфигурация**: настройка через Ansible группы ## Поддерживаемые сервисы -### Кластерные сервисы -- **PostgreSQL** с Patroni - обнаружение кластера, репликации, конфигурации -- **etcd** - обнаружение кластера, членов, лидера, здоровья -- **Kubernetes** - обнаружение кластера, версии, портов -- **ClickHouse** - аналитическая БД с кластерной поддержкой -- **Redis** - Redis кластер с поддержкой cluster nodes -- **RabbitMQ** - RabbitMQ кластер с поддержкой cluster_status -- **Kafka** - Kafka кластер (базовая поддержка) -- **MongoDB** - MongoDB replica set с поддержкой rs.status() -- **DragonflyDB** - Redis-совместимая БД с кластерной поддержкой -- **Elasticsearch** - поисковая система с кластерной поддержкой -- **Greenplum** - аналитическая БД с кластерной поддержкой -- **MinIO** - S3-совместимое хранилище с кластерной поддержкой -- **Redpanda** - Kafka-совместимый брокер с кластерной поддержкой -- **NATS** - система сообщений с кластерной поддержкой -- **Zookeeper** - координатор распределенных систем с кластерной поддержкой +### Кластерные сервисы (18) -### Автономные сервисы -- **BIND9** - DNS сервер -- **Grafana** - мониторинг и дашборды -- **Prometheus** - система мониторинга -- **Loki** - система логирования -- **Harbor** - реестр контейнеров -- **Jenkins** - CI/CD сервер -- **Keycloak** - система управления идентификацией -- **Neo4j** - графовая база данных -- **Sentry** - система отслеживания ошибок -- **Apache Superset** - BI платформа -- **InfluxDB** - временная база данных -- **VictoriaMetrics** - система мониторинга +| Сервис | Описание | Порты | Кластерная поддержка | +|--------|----------|-------|---------------------| +| **PostgreSQL** с Patroni | Реляционная БД с автоматическим failover | 5432, 8008 | ✅ Patroni кластер, репликация | +| **etcd** | Распределенное хранилище ключ-значение | 2379, 2380 | ✅ Raft консенсус, членство | +| **Kubernetes** | Оркестратор контейнеров | 6443, 10250 | ✅ API server, kubelet | +| **ClickHouse** | Аналитическая колоночная БД | 8123, 9000 | ✅ Distributed таблицы | +| **Redis** | In-memory хранилище данных | 6379 | ✅ Cluster mode, Sentinel | +| **RabbitMQ** | Брокер сообщений | 5672, 15672 | ✅ Cluster, Federation | +| **Kafka** | Потоковая платформа данных | 9092 | ✅ Broker cluster | +| **MongoDB** | Документная NoSQL БД | 27017 | ✅ Replica Set, Sharding | +| **DragonflyDB** | Redis-совместимая БД | 6379, 6380 | ✅ Кластерная поддержка | +| **Elasticsearch** | Поисковая и аналитическая платформа | 9200, 9300 | ✅ Cluster, Sharding | +| **Greenplum** | Аналитическая БД | 5432, 28080 | ✅ MPP архитектура | +| **MinIO** | S3-совместимое хранилище | 9000, 9001 | ✅ Distributed mode | +| **Redpanda** | Kafka-совместимый брокер | 9092, 9644 | ✅ Cluster mode | +| **NATS** | Система сообщений | 4222, 8222 | ✅ Clustering, JetStream | +| **Zookeeper** | Координатор распределенных систем | 2181, 2888, 3888 | ✅ Ensemble | + +### Автономные сервисы (8) + +| Сервис | Описание | Порты | Особенности | +|--------|----------|-------|-------------| +| **BIND9** | DNS сервер | 53, 953 | Авторитативный DNS | +| **Grafana** | Платформа мониторинга | 3000 | Дашборды, алерты | +| **Prometheus** | Система мониторинга | 9090 | Метрики, запросы | +| **Loki** | Система логирования | 3100 | Агрегация логов | +| **Harbor** | Registry контейнеров | 80, 443, 8080 | Хранение образов | +| **Jenkins** | CI/CD платформа | 8080, 50000 | Автоматизация сборки | +| **Keycloak** | Identity и Access Management | 8080, 8443 | SSO, аутентификация | +| **Neo4j** | Графовая БД | 7474, 7687 | Графовые запросы | +| **Sentry** | Отслеживание ошибок | 9000, 9001 | Мониторинг приложений | +| **Apache Superset** | BI платформа | 8088 | Визуализация данных | +| **InfluxDB** | Временная БД | 8086 | Метрики временных рядов | +| **VictoriaMetrics** | Система мониторинга | 8428, 8429 | Prometheus-совместимая | + +## Способы развертывания + +### 1. Нативные процессы +- **systemd** сервисы +- **init** скрипты +- Прямой запуск исполняемых файлов + +### 2. Docker-контейнеры +- Отдельные контейнеры +- Docker Compose стеки +- Kubernetes Pods + +### 3. Гибридные развертывания +- Комбинация нативных и контейнерных сервисов +- Микросервисная архитектура ## Методы обнаружения -### PostgreSQL с Patroni -1. **Процессы**: проверка `postgres` и `patroni` -2. **Docker**: проверка контейнеров `postgres`, `patroni`, образов `postgres`, `bitnami/postgresql` -3. **Порты**: 5432 (PostgreSQL), 8008 (Patroni REST API) -4. **Версия**: через `psql --version` или `postgres --version` -5. **Конфигурация**: парсинг файлов `/etc/patroni/patroni.yml`, `/etc/patroni.yml` -6. **Кластер**: команда `patronictl list` для получения информации о членах кластера -7. **Репликация**: SQL-запрос `SELECT client_addr, state FROM pg_stat_replication` +### Алгоритм обнаружения -### etcd -1. **Процессы**: проверка `etcd` -2. **Docker**: проверка контейнеров `etcd`, образов `etcd` -3. **Порты**: 2379 (client), 2380 (peer) -4. **Версия**: через `etcdctl version` -5. **Конфигурация**: парсинг файлов `/etc/etcd/etcd.conf`, systemd unit -6. **Кластер**: команды `etcdctl member list`, `etcdctl endpoint status`, `etcdctl endpoint health` +Для каждого сервиса коллектор выполняет проверки в следующем порядке: -### Kubernetes -1. **Процессы**: проверка `kubelet`, `kube-apiserver` -2. **Docker**: проверка контейнеров `kubelet`, образов `k8s.gcr.io/kubelet` -3. **Порты**: 6443 (API server), 10250 (kubelet) -4. **Версия**: через `kubectl version --client --short` +1. **Процессы**: `pgrep -f process_name` +2. **Docker контейнеры**: `docker ps --filter name=container_name` +3. **Docker образы**: `docker ps --filter ancestor=image_name` +4. **Порты**: `ss -tln sport = :port` +5. **Версия**: специфичные команды для каждого сервиса +6. **Кластер**: команды для получения информации о кластере -### ClickHouse -1. **Процессы**: проверка `clickhouse-server` -2. **Docker**: проверка контейнеров `clickhouse`, образов `clickhouse/clickhouse-server` -3. **Порты**: 8123 (HTTP), 9000 (native) -4. **Версия**: через `clickhouse-client --version` -5. **Кластер**: SQL-запрос `SELECT host_name FROM system.clusters` +### Примеры обнаружения -### Redis -1. **Процессы**: проверка `redis-server` -2. **Docker**: проверка контейнеров `redis`, образов `redis` -3. **Порты**: 6379 (client) -4. **Версия**: через `redis-cli --version` -5. **Кластер**: команда `redis-cli cluster nodes` +#### PostgreSQL с Patroni +```bash +# Процессы +pgrep -f postgres +pgrep -f patroni -### RabbitMQ -1. **Процессы**: проверка `rabbitmq-server` -2. **Docker**: проверка контейнеров `rabbitmq`, образов `rabbitmq` -3. **Порты**: 5672 (AMQP), 15672 (management) -4. **Версия**: через `rabbitmqctl version` -5. **Кластер**: команда `rabbitmqctl cluster_status` +# Docker +docker ps --filter "name=postgres" +docker ps --filter "ancestor=bitnami/postgresql" -### Kafka -1. **Процессы**: проверка `kafka.Kafka` -2. **Docker**: проверка контейнеров `kafka`, образов `confluentinc/cp-kafka` -3. **Порты**: 9092 (broker) -4. **Версия**: через конфигурационные файлы -5. **Кластер**: команда `kafka-topics --bootstrap-server localhost:9092 --list` +# Порты +ss -tln sport = :5432 +ss -tln sport = :8008 -### MongoDB -1. **Процессы**: проверка `mongod` -2. **Docker**: проверка контейнеров `mongo`, образов `mongo` -3. **Порты**: 27017 (mongod) -4. **Версия**: через `mongosh --version` -5. **Кластер**: команда `mongosh --eval "rs.status().members.map(m => m.name)"` +# Кластер +patronictl list +patronictl show-config +``` -### Новые кластерные сервисы +#### Redis кластер +```bash +# Процессы +pgrep -f redis-server -#### DragonflyDB -1. **Процессы**: проверка `dragonfly` -2. **Docker**: проверка контейнеров `dragonfly`, образов `docker.dragonflydb.io/dragonflydb/dragonfly` -3. **Порты**: 6379 (client), 6380 (admin) -4. **Версия**: через `dragonfly --version` -5. **Кластер**: команда `dragonfly cluster nodes` +# Docker +docker ps --filter "name=redis" +docker ps --filter "ancestor=redis" -#### Elasticsearch -1. **Процессы**: проверка `elasticsearch`, `java.*elasticsearch` -2. **Docker**: проверка контейнеров `elasticsearch`, образов `elasticsearch` -3. **Порты**: 9200 (HTTP), 9300 (transport) -4. **Версия**: через HTTP API `http://localhost:9200` -5. **Кластер**: HTTP API `/_cluster/state/nodes` +# Порты +ss -tln sport = :6379 -#### Greenplum -1. **Процессы**: проверка `postgres.*greenplum`, `gpdb` -2. **Docker**: проверка контейнеров `greenplum`, образов `greenplum/greenplum` -3. **Порты**: 5432 (PostgreSQL), 28080 (GPAdmin) -4. **Версия**: через `psql --version` -5. **Кластер**: команда `gpstate -s` +# Кластер +redis-cli cluster nodes +redis-cli cluster info +``` -#### MinIO -1. **Процессы**: проверка `minio` -2. **Docker**: проверка контейнеров `minio`, образов `minio/minio` -3. **Порты**: 9000 (API), 9001 (Console) -4. **Версия**: через `minio --version` -5. **Кластер**: команда `mc admin info local` +#### Kubernetes +```bash +# Процессы +pgrep -f kubelet +pgrep -f kube-apiserver -#### Redpanda -1. **Процессы**: проверка `redpanda` -2. **Docker**: проверка контейнеров `redpanda`, образов `redpandadata/redpanda` -3. **Порты**: 9092 (Kafka API), 9644 (Admin API) -4. **Версия**: через `rpk version` -5. **Кластер**: команда `rpk cluster info` +# Docker +docker ps --filter "name=kubelet" +docker ps --filter "ancestor=k8s.gcr.io/kubelet" -#### NATS -1. **Процессы**: проверка `nats-server` -2. **Docker**: проверка контейнеров `nats`, образов `nats` -3. **Порты**: 4222 (client), 8222 (monitoring) -4. **Версия**: через `nats-server --version` -5. **Кластер**: команда `nats server list` +# Порты +ss -tln sport = :6443 +ss -tln sport = :10250 -#### Zookeeper -1. **Процессы**: проверка `zookeeper`, `java.*zookeeper` -2. **Порты**: 2181 (client), 2888 (follower), 3888 (election) -3. **Версия**: через `zkCli version` -4. **Кластер**: команда `zkCli ls /` (базовая поддержка) - -### Новые автономные сервисы - -#### BIND9 -1. **Процессы**: проверка `named`, `bind9` -2. **Docker**: проверка контейнеров `bind9`, образов `internetwache/bind9` -3. **Порты**: 53 (DNS), 953 (control) -4. **Версия**: через `named -v` - -#### Grafana -1. **Процессы**: проверка `grafana-server`, `grafana` -2. **Docker**: проверка контейнеров `grafana`, образов `grafana/grafana` -3. **Порты**: 3000 (HTTP) -4. **Версия**: через `grafana-server --version` - -#### Prometheus -1. **Процессы**: проверка `prometheus` -2. **Docker**: проверка контейнеров `prometheus`, образов `prom/prometheus` -3. **Порты**: 9090 (HTTP) -4. **Версия**: через `prometheus --version` - -#### Loki -1. **Процессы**: проверка `loki` -2. **Docker**: проверка контейнеров `loki`, образов `grafana/loki` -3. **Порты**: 3100 (HTTP) -4. **Версия**: через `loki --version` - -#### Harbor -1. **Процессы**: проверка `harbor`, `nginx.*harbor` -2. **Docker**: проверка контейнеров `harbor`, образов `goharbor/harbor-core` -3. **Порты**: 80 (HTTP), 443 (HTTPS), 8080 (API) -4. **Версия**: через HTTP API `/api/v2.0/systeminfo` - -#### Jenkins -1. **Процессы**: проверка `jenkins`, `java.*jenkins` -2. **Docker**: проверка контейнеров `jenkins`, образов `jenkins/jenkins` -3. **Порты**: 8080 (HTTP), 50000 (agent) -4. **Версия**: через HTTP API `/api/json` - -#### Keycloak -1. **Процессы**: проверка `keycloak`, `java.*keycloak` -2. **Docker**: проверка контейнеров `keycloak`, образов `quay.io/keycloak/keycloak` -3. **Порты**: 8080 (HTTP), 8443 (HTTPS) -4. **Версия**: через HTTP API `/auth/admin/info` или `/admin/info` - -#### Neo4j -1. **Процессы**: проверка `neo4j`, `java.*neo4j` -2. **Docker**: проверка контейнеров `neo4j`, образов `neo4j/neo4j` -3. **Порты**: 7474 (HTTP), 7687 (Bolt) -4. **Версия**: через HTTP API `/db/data/` - -#### Sentry -1. **Процессы**: проверка `sentry`, `python.*sentry` -2. **Docker**: проверка контейнеров `sentry`, образов `sentry` -3. **Порты**: 9000 (HTTP), 9001 (WebSocket) -4. **Версия**: через HTTP API `/api/0/` - -#### Apache Superset -1. **Процессы**: проверка `superset`, `python.*superset` -2. **Docker**: проверка контейнеров `superset`, образов `apache/superset` -3. **Порты**: 8088 (HTTP) -4. **Версия**: через HTTP API `/api/v1/version` - -#### InfluxDB -1. **Процессы**: проверка `influxd` -2. **Docker**: проверка контейнеров `influxdb`, образов `influxdb` -3. **Порты**: 8086 (HTTP) -4. **Версия**: через `influxd version` - -#### VictoriaMetrics -1. **Процессы**: проверка `victoria-metrics`, `vmagent` -2. **Docker**: проверка контейнеров `victoria-metrics`, образов `victoriametrics/victoria-metrics` -3. **Порты**: 8428 (HTTP), 8429 (HTTPS) -4. **Версия**: через `victoria-metrics --version` - -### Остальные сервисы -- Все остальные сервисы перечислены выше в соответствующих разделах +# Кластер +kubectl get nodes +kubectl cluster-info +``` ## Структура выходных данных +### Основная структура + ```json { "collector_name": "proxvmservices", - "execution_time_ms": 280, - "execution_time_seconds": 0.280283673, - "machine_uid": "1581318a2bb03141", + "machine_uid": "sha256_hash_of_machine_id", "services": [ { "name": "postgresql", "type": "cluster", "status": "running", - "version": "14.9", + "version": "15.4", "ports": [5432, 8008], "config": { - "config_file": "/etc/patroni/patroni.yml", - "scope": "postgresql_cluster", - "namespace": "/patroni" + "description": "PostgreSQL cluster with Patroni", + "patroni_config": {...}, + "replication": {...} }, - "cluster": { - "name": "postgresql_cluster", - "state": "healthy", - "role": "leader", - "members": [ - { - "name": "postgresql-1", - "host": "10.14.246.75", - "port": 5432, - "state": "running", - "role": "leader", - "lag": 0 - } - ], - "etcd_endpoint": "10.14.246.77:2379", - "config": { - "scope": "postgresql_cluster", - "namespace": "/patroni" - } - }, - "cluster_nodes": ["10.14.246.75", "10.14.246.76", "10.14.246.77"], - "connections": [ - { - "type": "replication", - "target": "10.14.246.76", - "status": "streaming" - } + "cluster_nodes": [ + "10.14.253.20", + "10.14.253.21", + "10.14.253.22" ] } ] } ``` -## Поля данных +### Поля сервиса -### ServiceInfo -- `name` - имя сервиса (postgresql, etcd, redis, etc.) -- `type` - тип сервиса ("standalone" или "cluster") -- `status` - статус сервиса ("running", "stopped", "unknown") -- `version` - версия сервиса -- `ports` - массив портов, на которых слушает сервис -- `config` - конфигурация сервиса (файлы, параметры) -- `cluster` - информация о кластере (для кластерных сервисов) -- `cluster_nodes` - массив IP-адресов всех нод кластера -- `connections` - информация о соединениях (репликация, etc.) - -### PatroniClusterInfo (для PostgreSQL) -- `name` - имя кластера -- `state` - состояние кластера ("healthy", "degraded") -- `role` - роль текущего узла ("leader", "replica", "unknown") -- `members` - массив членов кластера -- `etcd_endpoint` - endpoint etcd для Patroni -- `config` - конфигурация Patroni - -### PatroniMember -- `name` - имя члена кластера -- `host` - IP-адрес -- `port` - порт -- `state` - состояние ("running", "stopped") -- `role` - роль ("leader", "replica") -- `lag` - задержка репликации в байтах - -### EtcdClusterInfo (для etcd) -- `name` - имя кластера -- `version` - версия etcd -- `members` - массив членов кластера -- `leader` - ID лидера -- `health` - здоровье кластера ("healthy", "unhealthy") -- `cluster_size` - размер кластера - -### EtcdMember -- `id` - ID члена -- `name` - имя члена -- `peer_urls` - URL для peer-соединений -- `client_urls` - URL для client-соединений -- `is_leader` - является ли лидером -- `status` - статус члена - -### ConnectionInfo -- `type` - тип соединения ("replication", etc.) -- `target` - целевой хост -- `status` - статус соединения +| Поле | Тип | Описание | +|------|-----|----------| +| `name` | string | Имя сервиса | +| `type` | string | `cluster` или `standalone` | +| `status` | string | `running`, `stopped`, `error` | +| `version` | string | Версия сервиса | +| `ports` | array | Список портов | +| `config` | object | Конфигурация сервиса | +| `cluster_nodes` | array | IP адреса узлов кластера | ## Конфигурация +### Ansible группы + +Коллектор настраивается через Ansible группы в `group_vars/`: + +#### proxvms (VM/LXC хосты) ```yaml -proxvmservices: - enabled: true - type: exec - key: proxvmservices - interval: "300s" - timeout: "60s" - exec: "./collectors/proxvmservices" - platforms: [linux] +enabled_collectors: + - proxvmsystem + - uptime ``` +#### proxmox (Proxmox узлы) +```yaml +enabled_collectors: + - proxcluster + - proxnode + - proxvms + - uptime +``` + +#### standalone (автономные серверы) +```yaml +enabled_collectors: + - system + - hba + - sensors + - uptime +``` + +### Переменные окружения + +| Переменная | Описание | По умолчанию | +|------------|----------|--------------| +| `PROXVM_SERVICES_TIMEOUT` | Таймаут для команд | `30s` | +| `PROXVM_SERVICES_PARALLEL` | Количество параллельных проверок | `10` | + ## Требования ### Системные зависимости -- `pgrep` - для проверки процессов -- `ss` - для проверки портов -- `curl` - для HTTP API запросов -- `getent` - для разрешения hostname в IP -- `docker` - для проверки Docker-контейнеров -#### Основные сервисы -- `psql` или `postgres` - для PostgreSQL -- `patronictl` - для Patroni -- `etcdctl` - для etcd -- `kubectl` - для Kubernetes -- `redis-cli` - для Redis кластера -- `clickhouse-client` - для ClickHouse кластера -- `rabbitmqctl` - для RabbitMQ кластера -- `kafka-topics` - для Kafka кластера -- `mongosh` - для MongoDB кластера +#### Основные инструменты +- `pgrep` - проверка процессов +- `ss` - проверка портов +- `curl` - HTTP API запросы +- `getent` - разрешение hostname в IP +- `docker` - проверка Docker-контейнеров -#### Новые сервисы -- `dragonfly` - для DragonflyDB -- `gpstate` - для Greenplum -- `minio`, `mc` - для MinIO -- `rpk` - для Redpanda -- `nats-server`, `nats` - для NATS -- `zkCli` - для Zookeeper -- `named` - для BIND9 -- `grafana-server` - для Grafana -- `prometheus` - для Prometheus -- `loki` - для Loki -- `influxd` - для InfluxDB -- `victoria-metrics` - для VictoriaMetrics +#### Специфичные для сервисов -### Права доступа -- Чтение конфигурационных файлов сервисов -- Выполнение команд управления сервисами -- Доступ к портам для проверки состояния +**Базы данных:** +- `psql` - PostgreSQL +- `patronictl` - Patroni +- `etcdctl` - etcd +- `redis-cli` - Redis +- `clickhouse-client` - ClickHouse +- `rabbitmqctl` - RabbitMQ +- `mongosh` - MongoDB +- `dragonfly` - DragonflyDB + +**Оркестрация:** +- `kubectl` - Kubernetes +- `kafka-topics` - Kafka +- `rpk` - Redpanda +- `nats-server` - NATS +- `zkCli` - Zookeeper + +**Мониторинг:** +- `grafana-server` - Grafana +- `prometheus` - Prometheus +- `loki` - Loki +- `victoria-metrics` - VictoriaMetrics +- `influxd` - InfluxDB + +**Другие:** +- `named` - BIND9 +- `minio` - MinIO +- `jenkins` - Jenkins +- `keycloak` - Keycloak +- `neo4j` - Neo4j +- `sentry` - Sentry +- `superset` - Apache Superset ## Примеры использования @@ -394,8 +274,6 @@ pgrep -f patroni # Проверка Docker-контейнеров docker ps --filter "name=postgres" -docker ps --filter "name=patroni" -docker ps --filter "ancestor=postgres" docker ps --filter "ancestor=bitnami/postgresql" # Проверка портов @@ -410,43 +288,6 @@ patronictl show-config psql -t -c "SELECT client_addr, state FROM pg_stat_replication;" ``` -### Обнаружение etcd кластера -```bash -# Проверка процессов -pgrep -f etcd - -# Проверка Docker-контейнеров -docker ps --filter "name=etcd" -docker ps --filter "ancestor=etcd" - -# Проверка портов -ss -tln sport = :2379 -ss -tln sport = :2380 - -# Информация о кластере -etcdctl member list -etcdctl endpoint status --write-out=json -etcdctl endpoint health -``` - -### Обнаружение ClickHouse кластера -```bash -# Проверка процессов -pgrep -f clickhouse-server - -# Проверка Docker-контейнеров -docker ps --filter "name=clickhouse" -docker ps --filter "ancestor=clickhouse/clickhouse-server" - -# Проверка портов -ss -tln sport = :8123 -ss -tln sport = :9000 - -# Информация о кластере -clickhouse-client --query "SELECT host_name FROM system.clusters" -clickhouse-client --query "SELECT * FROM system.clusters" -``` - ### Обнаружение Redis кластера ```bash # Проверка процессов @@ -464,22 +305,22 @@ redis-cli cluster nodes redis-cli cluster info ``` -### Обнаружение RabbitMQ кластера +### Обнаружение ClickHouse кластера ```bash # Проверка процессов -pgrep -f rabbitmq-server +pgrep -f clickhouse-server # Проверка Docker-контейнеров -docker ps --filter "name=rabbitmq" -docker ps --filter "ancestor=rabbitmq" +docker ps --filter "name=clickhouse" +docker ps --filter "ancestor=clickhouse/clickhouse-server" # Проверка портов -ss -tln sport = :5672 -ss -tln sport = :15672 +ss -tln sport = :8123 +ss -tln sport = :9000 # Информация о кластере -rabbitmqctl cluster_status -rabbitmqctl list_nodes +clickhouse-client --query "SELECT host_name FROM system.clusters" +clickhouse-client --query "SELECT * FROM system.clusters" ``` ### Обнаружение Kafka кластера @@ -516,113 +357,106 @@ mongosh --eval "rs.status()" mongosh --eval "rs.status().members.map(m => m.name)" ``` -### Обнаружение Elasticsearch кластера +## Развертывание + +### Через Ansible + ```bash -# Проверка процессов -pgrep -f elasticsearch +# Развертывание на VM/LXC хостах +make deploy-service -# Проверка портов -ss -tln sport = :9200 -ss -tln sport = :9300 +# Развертывание на Proxmox узлах +make deploy -# Информация о кластере -curl -s http://localhost:9200/_cluster/state/nodes -curl -s http://localhost:9200/_cluster/health +# Обновление сервиса +make update-service ``` -### Обнаружение MinIO кластера +### Прямое выполнение + ```bash -# Проверка процессов -pgrep -f minio +# Сборка коллектора +make collectors-linux -# Проверка портов -ss -tln sport = :9000 -ss -tln sport = :9001 - -# Информация о кластере -mc admin info local -mc admin heal local +# Выполнение +./bin/agent/collectors/proxvmservices ``` -### Обнаружение Grafana +## Мониторинг и логирование + +### Логирование + +Коллектор ведет подробное логирование: +- Обнаруженные сервисы +- Ошибки подключения +- Таймауты команд +- Информация о кластерах + +### Метрики производительности + +- Время выполнения проверок +- Количество обнаруженных сервисов +- Статистика ошибок +- Использование ресурсов + +## Устранение неполадок + +### Частые проблемы + +1. **Сервис не обнаружен** + - Проверьте, что процесс запущен + - Убедитесь, что порты открыты + - Проверьте Docker-контейнеры + +2. **Ошибки подключения к кластеру** + - Проверьте сетевую связность + - Убедитесь в правильности конфигурации + - Проверьте права доступа + +3. **Таймауты команд** + - Увеличьте `PROXVM_SERVICES_TIMEOUT` + - Проверьте производительность системы + - Уменьшите `PROXVM_SERVICES_PARALLEL` + +### Отладка + ```bash -# Проверка процессов -pgrep -f grafana +# Включение подробного логирования +export PROXVM_SERVICES_DEBUG=1 -# Проверка портов -ss -tln sport = :3000 +# Проверка системных зависимостей +which pgrep ss curl docker -# Версия -grafana-server --version +# Тестирование отдельных команд +pgrep -f postgres +docker ps --filter "name=postgres" +ss -tln sport = :5432 ``` -### Обнаружение Prometheus -```bash -# Проверка процессов -pgrep -f prometheus +## Интеграция -# Проверка портов -ss -tln sport = :9090 +### С Proxmox -# Версия -prometheus --version -``` +Коллектор интегрируется с другими коллекторами Proxmox: +- `proxcluster` - информация о кластере +- `proxnode` - информация об узле +- `proxvms` - информация о VM/LXC -### Обнаружение Zookeeper кластера -```bash -# Проверка процессов -pgrep -f zookeeper +### С системами мониторинга -# Проверка портов -ss -tln sport = :2181 -ss -tln sport = :2888 -ss -tln sport = :3888 +- **Prometheus**: экспорт метрик +- **Grafana**: визуализация данных +- **ELK Stack**: централизованное логирование -# Информация о кластере -zkCli ls / -zkCli version -``` +## Лицензия -## Ограничения - -1. **Версии сервисов**: некоторые команды могут не работать на старых версиях -2. **Конфигурационные файлы**: парсинг ограничен стандартными форматами -3. **Права доступа**: требует sudo для доступа к некоторым командам -4. **Сетевые соединения**: не анализирует содержимое трафика -5. **Кластерное состояние**: может не отражать реальное состояние при проблемах с сетью -6. **HTTP API**: требует доступности HTTP API для получения версий и информации о кластерах -7. **Команды управления**: не все команды управления кластерами могут быть установлены -8. **Fallback поведение**: при недоступности команд управления возвращается localhost -9. **Производительность**: большое количество сервисов может увеличить время выполнения -10. **Сетевые зависимости**: некоторые сервисы требуют сетевого доступа для полной диагностики - -## Результаты тестирования - -### Proxmox нода (10.14.253.20) -Обнаружено 8 сервисов: -- **PostgreSQL** (кластер) - порты 5432, 8008 -- **etcd** (кластер) - порты 2379, 2380 -- **MongoDB** (standalone) - порт 27017 -- **Elasticsearch** (standalone) - порты 9200, 9300 -- **Grafana** (standalone) - порт 3000 -- **Harbor** (standalone) - порты 80, 443, 8080 -- **Keycloak** (standalone) - порты 8080, 8443 -- **Superset** (standalone) - порт 8088 - -### VM (10.14.246.75) -Обнаружено 2 сервиса: -- **Kubernetes** (кластер) - порты 6443, 10250 -- **Prometheus** (standalone) - порт 9090 - -### LXC (10.14.246.150) -Обнаружен 1 сервис: -- **PostgreSQL 11.17** (кластер) - порты 5432, 8008 +Проект распространяется под лицензией MIT. ## Автор **Сергей Антропов** Сайт: https://devops.org.ru -## Лицензия +--- -Проект распространяется под лицензией MIT. +*Документация обновлена: $(date)* \ No newline at end of file