SensusAgent/docs/collectors/proxvmservices.md
Sergey Antropoff 31f923af8b docs: обновлена документация коллектора proxvmservices
Добавлено подробное описание всех 26 поддерживаемых сервисов:

**Кластерные сервисы (9):**
- PostgreSQL с Patroni
- etcd
- Kubernetes
- DragonflyDB
- Elasticsearch
- Greenplum
- MinIO
- Redpanda
- NATS

**Автономные сервисы (17):**
- Redis, ClickHouse, RabbitMQ, Kafka, MongoDB
- BIND9, Grafana, Prometheus, Loki
- Harbor, Jenkins, Keycloak, Neo4j
- Sentry, Apache Superset, InfluxDB, VictoriaMetrics

**Обновления документации:**
- Подробные методы обнаружения для каждого сервиса
- Описание портов и команд для получения версий
- Информация о кластерных командах
- Обновленная структура выходных данных с полем cluster_nodes
- Расширенный список системных зависимостей
- Примеры использования для новых сервисов
- Результаты тестирования на реальных серверах
- Обновленные ограничения и требования

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-09-15 17:43:41 +03:00

450 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Коллектор proxvmservices
## Описание
Коллектор `proxvmservices` предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами.
## Поддерживаемые сервисы
### Кластерные сервисы
- **PostgreSQL** с Patroni - обнаружение кластера, репликации, конфигурации
- **etcd** - обнаружение кластера, членов, лидера, здоровья
- **Kubernetes** - обнаружение кластера, версии, портов
- **DragonflyDB** - Redis-совместимая БД с кластерной поддержкой
- **Elasticsearch** - поисковая система с кластерной поддержкой
- **Greenplum** - аналитическая БД с кластерной поддержкой
- **MinIO** - S3-совместимое хранилище с кластерной поддержкой
- **Redpanda** - Kafka-совместимый брокер с кластерной поддержкой
- **NATS** - система сообщений с кластерной поддержкой
### Автономные сервисы
- **Redis** - версия, порты, конфигурация
- **ClickHouse** - версия, порты, конфигурация
- **RabbitMQ** - версия, порты, конфигурация
- **Kafka** - порты, конфигурация
- **MongoDB** - версия, порты, конфигурация
- **BIND9** - DNS сервер
- **Grafana** - мониторинг и дашборды
- **Prometheus** - система мониторинга
- **Loki** - система логирования
- **Harbor** - реестр контейнеров
- **Jenkins** - CI/CD сервер
- **Keycloak** - система управления идентификацией
- **Neo4j** - графовая база данных
- **Sentry** - система отслеживания ошибок
- **Apache Superset** - BI платформа
- **InfluxDB** - временная база данных
- **VictoriaMetrics** - система мониторинга
## Методы обнаружения
### PostgreSQL с Patroni
1. **Процессы**: проверка `postgres` и `patroni`
2. **Порты**: 5432 (PostgreSQL), 8008 (Patroni REST API)
3. **Версия**: через `psql --version` или `postgres --version`
4. **Конфигурация**: парсинг файлов `/etc/patroni/patroni.yml`, `/etc/patroni.yml`
5. **Кластер**: команда `patronictl list` для получения информации о членах кластера
6. **Репликация**: SQL-запрос `SELECT client_addr, state FROM pg_stat_replication`
### etcd
1. **Процессы**: проверка `etcd`
2. **Порты**: 2379 (client), 2380 (peer)
3. **Версия**: через `etcdctl version`
4. **Конфигурация**: парсинг файлов `/etc/etcd/etcd.conf`, systemd unit
5. **Кластер**: команды `etcdctl member list`, `etcdctl endpoint status`, `etcdctl endpoint health`
### Kubernetes
1. **Процессы**: проверка `kubelet`, `kube-apiserver`
2. **Порты**: 6443 (API server), 10250 (kubelet)
3. **Версия**: через `kubectl version --client --short`
### Новые кластерные сервисы
#### DragonflyDB
1. **Процессы**: проверка `dragonfly`
2. **Порты**: 6379 (client), 6380 (admin)
3. **Версия**: через `dragonfly --version`
4. **Кластер**: команда `dragonfly cluster nodes`
#### Elasticsearch
1. **Процессы**: проверка `elasticsearch`, `java.*elasticsearch`
2. **Порты**: 9200 (HTTP), 9300 (transport)
3. **Версия**: через HTTP API `http://localhost:9200`
4. **Кластер**: HTTP API `/_cluster/state/nodes`
#### Greenplum
1. **Процессы**: проверка `postgres.*greenplum`, `gpdb`
2. **Порты**: 5432 (PostgreSQL), 28080 (GPAdmin)
3. **Версия**: через `psql --version`
4. **Кластер**: команда `gpstate -s`
#### MinIO
1. **Процессы**: проверка `minio`
2. **Порты**: 9000 (API), 9001 (Console)
3. **Версия**: через `minio --version`
4. **Кластер**: команда `mc admin info local`
#### Redpanda
1. **Процессы**: проверка `redpanda`
2. **Порты**: 9092 (Kafka API), 9644 (Admin API)
3. **Версия**: через `rpk version`
4. **Кластер**: команда `rpk cluster info`
#### NATS
1. **Процессы**: проверка `nats-server`
2. **Порты**: 4222 (client), 8222 (monitoring)
3. **Версия**: через `nats-server --version`
4. **Кластер**: команда `nats server list`
### Новые автономные сервисы
#### BIND9
1. **Процессы**: проверка `named`, `bind9`
2. **Порты**: 53 (DNS), 953 (control)
3. **Версия**: через `named -v`
#### Grafana
1. **Процессы**: проверка `grafana-server`, `grafana`
2. **Порты**: 3000 (HTTP)
3. **Версия**: через `grafana-server --version`
#### Prometheus
1. **Процессы**: проверка `prometheus`
2. **Порты**: 9090 (HTTP)
3. **Версия**: через `prometheus --version`
#### Loki
1. **Процессы**: проверка `loki`
2. **Порты**: 3100 (HTTP)
3. **Версия**: через `loki --version`
#### Harbor
1. **Процессы**: проверка `harbor`, `nginx.*harbor`
2. **Порты**: 80 (HTTP), 443 (HTTPS), 8080 (API)
3. **Версия**: через HTTP API `/api/v2.0/systeminfo`
#### Jenkins
1. **Процессы**: проверка `jenkins`, `java.*jenkins`
2. **Порты**: 8080 (HTTP), 50000 (agent)
3. **Версия**: через HTTP API `/api/json`
#### Keycloak
1. **Процессы**: проверка `keycloak`, `java.*keycloak`
2. **Порты**: 8080 (HTTP), 8443 (HTTPS)
3. **Версия**: через HTTP API `/auth/admin/info` или `/admin/info`
#### Neo4j
1. **Процессы**: проверка `neo4j`, `java.*neo4j`
2. **Порты**: 7474 (HTTP), 7687 (Bolt)
3. **Версия**: через HTTP API `/db/data/`
#### Sentry
1. **Процессы**: проверка `sentry`, `python.*sentry`
2. **Порты**: 9000 (HTTP), 9001 (WebSocket)
3. **Версия**: через HTTP API `/api/0/`
#### Apache Superset
1. **Процессы**: проверка `superset`, `python.*superset`
2. **Порты**: 8088 (HTTP)
3. **Версия**: через HTTP API `/api/v1/version`
#### InfluxDB
1. **Процессы**: проверка `influxd`
2. **Порты**: 8086 (HTTP)
3. **Версия**: через `influxd version`
#### VictoriaMetrics
1. **Процессы**: проверка `victoria-metrics`, `vmagent`
2. **Порты**: 8428 (HTTP), 8429 (HTTPS)
3. **Версия**: через `victoria-metrics --version`
### Остальные сервисы
- **Redis**: процесс `redis-server`, порт 6379, версия через `redis-cli --version`
- **ClickHouse**: процесс `clickhouse-server`, порты 8123, 9000, версия через `clickhouse-client --version`
- **RabbitMQ**: процесс `rabbitmq-server`, порты 5672, 15672, версия через `rabbitmqctl version`
- **Kafka**: процесс `kafka.Kafka`, порт 9092
- **MongoDB**: процесс `mongod`, порт 27017, версия через `mongosh --version`
## Структура выходных данных
```json
{
"collector_name": "proxvmservices",
"execution_time_ms": 280,
"execution_time_seconds": 0.280283673,
"machine_uid": "1581318a2bb03141",
"services": [
{
"name": "postgresql",
"type": "cluster",
"status": "running",
"version": "14.9",
"ports": [5432, 8008],
"config": {
"config_file": "/etc/patroni/patroni.yml",
"scope": "postgresql_cluster",
"namespace": "/patroni"
},
"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"
}
]
}
]
}
```
## Поля данных
### 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` - статус соединения
## Конфигурация
```yaml
proxvmservices:
enabled: true
type: exec
key: proxvmservices
interval: "300s"
timeout: "60s"
exec: "./collectors/proxvmservices"
platforms: [linux]
```
## Требования
### Системные зависимости
- `pgrep` - для проверки процессов
- `ss` - для проверки портов
- `curl` - для HTTP API запросов
- `getent` - для разрешения hostname в IP
#### Основные сервисы
- `psql` или `postgres` - для PostgreSQL
- `patronictl` - для Patroni
- `etcdctl` - для etcd
- `kubectl` - для Kubernetes
- `redis-cli` - для Redis
- `clickhouse-client` - для ClickHouse
- `rabbitmqctl` - для RabbitMQ
- `mongosh` - для MongoDB
#### Новые сервисы
- `dragonfly` - для DragonflyDB
- `gpstate` - для Greenplum
- `minio`, `mc` - для MinIO
- `rpk` - для Redpanda
- `nats-server`, `nats` - для NATS
- `named` - для BIND9
- `grafana-server` - для Grafana
- `prometheus` - для Prometheus
- `loki` - для Loki
- `influxd` - для InfluxDB
- `victoria-metrics` - для VictoriaMetrics
### Права доступа
- Чтение конфигурационных файлов сервисов
- Выполнение команд управления сервисами
- Доступ к портам для проверки состояния
## Примеры использования
### Обнаружение PostgreSQL кластера
```bash
# Проверка процессов
pgrep -f postgres
pgrep -f patroni
# Проверка портов
ss -tln sport = :5432
ss -tln sport = :8008
# Информация о кластере
patronictl list
patronictl show-config
# Репликация
psql -t -c "SELECT client_addr, state FROM pg_stat_replication;"
```
### Обнаружение etcd кластера
```bash
# Проверка процессов
pgrep -f etcd
# Проверка портов
ss -tln sport = :2379
ss -tln sport = :2380
# Информация о кластере
etcdctl member list
etcdctl endpoint status --write-out=json
etcdctl endpoint health
```
### Обнаружение Elasticsearch кластера
```bash
# Проверка процессов
pgrep -f elasticsearch
# Проверка портов
ss -tln sport = :9200
ss -tln sport = :9300
# Информация о кластере
curl -s http://localhost:9200/_cluster/state/nodes
curl -s http://localhost:9200/_cluster/health
```
### Обнаружение MinIO кластера
```bash
# Проверка процессов
pgrep -f minio
# Проверка портов
ss -tln sport = :9000
ss -tln sport = :9001
# Информация о кластере
mc admin info local
mc admin heal local
```
### Обнаружение Grafana
```bash
# Проверка процессов
pgrep -f grafana
# Проверка портов
ss -tln sport = :3000
# Версия
grafana-server --version
```
### Обнаружение Prometheus
```bash
# Проверка процессов
pgrep -f prometheus
# Проверка портов
ss -tln sport = :9090
# Версия
prometheus --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
## Автор
**Сергей Антропов**
Сайт: https://devops.org.ru
## Лицензия
Проект распространяется под лицензией MIT.