SensusAgent/docs/collectors/proxvmservices.md
Sergey Antropoff 5fa101dfff feat: добавлен коллектор proxvmservices для обнаружения сервисов на VM
- Создан новый коллектор proxvmservices для обнаружения и мониторинга сервисов
- Поддержка PostgreSQL с Patroni (кластер, репликация, конфигурация)
- Поддержка etcd кластера (члены, лидер, здоровье)
- Поддержка остальных сервисов: Redis, ClickHouse, RabbitMQ, Kafka, MongoDB, Kubernetes
- Добавлен в Makefile и конфигурацию агента
- Обновлены групповые переменные Ansible для включения в группу proxvms
- Исправлены проблемы с шаблонами Ansible (конфигурация и systemd unit)
- Создана подробная документация
- Протестирован на удаленных серверах через Ansible

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

8.5 KiB
Raw Blame History

Коллектор proxvmservices

Описание

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

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

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

  • PostgreSQL с Patroni - обнаружение кластера, репликации, конфигурации
  • etcd - обнаружение кластера, членов, лидера, здоровья
  • Kubernetes - обнаружение кластера, версии, портов

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

  • Redis - версия, порты, конфигурация
  • ClickHouse - версия, порты, конфигурация
  • RabbitMQ - версия, порты, конфигурация
  • Kafka - порты, конфигурация
  • MongoDB - версия, порты, конфигурация

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

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

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

  • 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

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

{
  "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"
        }
      },
      "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 - информация о кластере (для кластерных сервисов)
  • 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 - для проверки портов
  • psql или postgres - для PostgreSQL
  • patronictl - для Patroni
  • etcdctl - для etcd
  • kubectl - для Kubernetes
  • redis-cli - для Redis
  • clickhouse-client - для ClickHouse
  • rabbitmqctl - для RabbitMQ
  • mongosh - для MongoDB

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

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

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

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

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

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

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

# Информация о кластере
etcdctl member list
etcdctl endpoint status --write-out=json
etcdctl endpoint health

Ограничения

  1. Версии сервисов: некоторые команды могут не работать на старых версиях
  2. Конфигурационные файлы: парсинг ограничен стандартными форматами
  3. Права доступа: требует sudo для доступа к некоторым командам
  4. Сетевые соединения: не анализирует содержимое трафика
  5. Кластерное состояние: может не отражать реальное состояние при проблемах с сетью

Автор

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

Лицензия

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