SensusAgent/docs/collectors/proxvmservices.md
Sergey Antropoff 67db7765c5 feat: добавлена полная поддержка Docker для всех сервисов в коллекторе proxvmservices
**Обновленные сервисы с Docker поддержкой:**

**Кластерные сервисы:**
- etcd: etcd, etcd
- Kubernetes: kubelet, k8s.gcr.io/kubelet
- Kafka: kafka, confluentinc/cp-kafka
- DragonflyDB: dragonfly, docker.dragonflydb.io/dragonflydb/dragonfly
- Greenplum: greenplum, greenplum/greenplum
- MinIO: minio, minio/minio
- Redpanda: redpanda, redpandadata/redpanda
- NATS: nats, nats

**Автономные сервисы:**
- BIND9: bind9, internetwache/bind9
- Loki: loki, grafana/loki
- Harbor: harbor, goharbor/harbor-core
- Jenkins: jenkins, jenkins/jenkins
- Keycloak: keycloak, quay.io/keycloak/keycloak
- Neo4j: neo4j, neo4j/neo4j
- Sentry: sentry, sentry
- Apache Superset: superset, apache/superset
- InfluxDB: influxdb, influxdb
- VictoriaMetrics: victoria-metrics, victoriametrics/victoria-metrics

**Обновленная документация:**
- Добавлены Docker проверки для всех 26 сервисов
- Обновлены методы обнаружения с Docker командами
- Добавлены примеры использования Docker команд для всех сервисов
- Обновлены примеры обнаружения кластеров с Docker поддержкой

**Полная поддержка способов развертывания:**
-  Нативные процессы (systemd, init)
-  Docker-контейнеры
-  Docker Compose

Теперь коллектор может обнаруживать все 26 сервисов независимо от способа их развертывания!

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

24 KiB
Raw Blame History

Коллектор proxvmservices

Описание

Коллектор proxvmservices предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами.

Поддерживаемые способы развертывания:

  • Нативные процессы (systemd, init)
  • Docker-контейнеры
  • Docker Compose

Поддерживаемые сервисы

Кластерные сервисы

  • 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 - координатор распределенных систем с кластерной поддержкой

Автономные сервисы

  • BIND9 - DNS сервер
  • Grafana - мониторинг и дашборды
  • Prometheus - система мониторинга
  • Loki - система логирования
  • Harbor - реестр контейнеров
  • Jenkins - CI/CD сервер
  • Keycloak - система управления идентификацией
  • Neo4j - графовая база данных
  • Sentry - система отслеживания ошибок
  • Apache Superset - BI платформа
  • InfluxDB - временная база данных
  • VictoriaMetrics - система мониторинга

Методы обнаружения

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

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

RabbitMQ

  1. Процессы: проверка rabbitmq-server
  2. Docker: проверка контейнеров rabbitmq, образов rabbitmq
  3. Порты: 5672 (AMQP), 15672 (management)
  4. Версия: через rabbitmqctl version
  5. Кластер: команда rabbitmqctl cluster_status

Kafka

  1. Процессы: проверка kafka.Kafka
  2. Docker: проверка контейнеров kafka, образов confluentinc/cp-kafka
  3. Порты: 9092 (broker)
  4. Версия: через конфигурационные файлы
  5. Кластер: команда kafka-topics --bootstrap-server localhost:9092 --list

MongoDB

  1. Процессы: проверка mongod
  2. Docker: проверка контейнеров mongo, образов mongo
  3. Порты: 27017 (mongod)
  4. Версия: через mongosh --version
  5. Кластер: команда mongosh --eval "rs.status().members.map(m => m.name)"

Новые кластерные сервисы

DragonflyDB

  1. Процессы: проверка dragonfly
  2. Docker: проверка контейнеров dragonfly, образов docker.dragonflydb.io/dragonflydb/dragonfly
  3. Порты: 6379 (client), 6380 (admin)
  4. Версия: через dragonfly --version
  5. Кластер: команда dragonfly cluster nodes

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

Greenplum

  1. Процессы: проверка postgres.*greenplum, gpdb
  2. Docker: проверка контейнеров greenplum, образов greenplum/greenplum
  3. Порты: 5432 (PostgreSQL), 28080 (GPAdmin)
  4. Версия: через psql --version
  5. Кластер: команда gpstate -s

MinIO

  1. Процессы: проверка minio
  2. Docker: проверка контейнеров minio, образов minio/minio
  3. Порты: 9000 (API), 9001 (Console)
  4. Версия: через minio --version
  5. Кластер: команда mc admin info local

Redpanda

  1. Процессы: проверка redpanda
  2. Docker: проверка контейнеров redpanda, образов redpandadata/redpanda
  3. Порты: 9092 (Kafka API), 9644 (Admin API)
  4. Версия: через rpk version
  5. Кластер: команда rpk cluster info

NATS

  1. Процессы: проверка nats-server
  2. Docker: проверка контейнеров nats, образов nats
  3. Порты: 4222 (client), 8222 (monitoring)
  4. Версия: через nats-server --version
  5. Кластер: команда nats server list

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

Остальные сервисы

  • Все остальные сервисы перечислены выше в соответствующих разделах

Структура выходных данных

{
  "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 - статус соединения

Конфигурация

proxvmservices:
  enabled: true
  type: exec
  key: proxvmservices
  interval: "300s"
  timeout: "60s"
  exec: "./collectors/proxvmservices"
  platforms: [linux]

Требования

Системные зависимости

  • 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 кластера

Новые сервисы

  • 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

Права доступа

  • Чтение конфигурационных файлов сервисов
  • Выполнение команд управления сервисами
  • Доступ к портам для проверки состояния

Примеры использования

Обнаружение PostgreSQL кластера

# Проверка процессов
pgrep -f postgres
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"

# Проверка портов
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 кластера

# Проверка процессов
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 кластера

# Проверка процессов
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 кластера

# Проверка процессов
pgrep -f redis-server

# Проверка Docker-контейнеров
docker ps --filter "name=redis"
docker ps --filter "ancestor=redis"

# Проверка портов
ss -tln sport = :6379

# Информация о кластере
redis-cli cluster nodes
redis-cli cluster info

Обнаружение RabbitMQ кластера

# Проверка процессов
pgrep -f rabbitmq-server

# Проверка Docker-контейнеров
docker ps --filter "name=rabbitmq"
docker ps --filter "ancestor=rabbitmq"

# Проверка портов
ss -tln sport = :5672
ss -tln sport = :15672

# Информация о кластере
rabbitmqctl cluster_status
rabbitmqctl list_nodes

Обнаружение Kafka кластера

# Проверка процессов
pgrep -f kafka.Kafka

# Проверка Docker-контейнеров
docker ps --filter "name=kafka"
docker ps --filter "ancestor=confluentinc/cp-kafka"

# Проверка портов
ss -tln sport = :9092

# Информация о кластере
kafka-topics --bootstrap-server localhost:9092 --list
kafka-broker-api-versions --bootstrap-server localhost:9092

Обнаружение MongoDB кластера

# Проверка процессов
pgrep -f mongod

# Проверка Docker-контейнеров
docker ps --filter "name=mongo"
docker ps --filter "ancestor=mongo"

# Проверка портов
ss -tln sport = :27017

# Информация о кластере
mongosh --eval "rs.status()"
mongosh --eval "rs.status().members.map(m => m.name)"

Обнаружение Elasticsearch кластера

# Проверка процессов
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 кластера

# Проверка процессов
pgrep -f minio

# Проверка портов
ss -tln sport = :9000
ss -tln sport = :9001

# Информация о кластере
mc admin info local
mc admin heal local

Обнаружение Grafana

# Проверка процессов
pgrep -f grafana

# Проверка портов
ss -tln sport = :3000

# Версия
grafana-server --version

Обнаружение Prometheus

# Проверка процессов
pgrep -f prometheus

# Проверка портов
ss -tln sport = :9090

# Версия
prometheus --version

Обнаружение Zookeeper кластера

# Проверка процессов
pgrep -f zookeeper

# Проверка портов
ss -tln sport = :2181
ss -tln sport = :2888
ss -tln sport = :3888

# Информация о кластере
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

Автор

Сергей Антропов
Сайт: https://devops.org.ru

Лицензия

Проект распространяется под лицензией MIT.