- Создан новый коллектор proxvmservices для обнаружения и мониторинга сервисов - Поддержка PostgreSQL с Patroni (кластер, репликация, конфигурация) - Поддержка etcd кластера (члены, лидер, здоровье) - Поддержка остальных сервисов: Redis, ClickHouse, RabbitMQ, Kafka, MongoDB, Kubernetes - Добавлен в Makefile и конфигурацию агента - Обновлены групповые переменные Ansible для включения в группу proxvms - Исправлены проблемы с шаблонами Ansible (конфигурация и systemd unit) - Создана подробная документация - Протестирован на удаленных серверах через Ansible Автор: Сергей Антропов Сайт: https://devops.org.ru
8.5 KiB
8.5 KiB
Коллектор proxvmservices
Описание
Коллектор proxvmservices
предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами.
Поддерживаемые сервисы
Кластерные сервисы
- PostgreSQL с Patroni - обнаружение кластера, репликации, конфигурации
- etcd - обнаружение кластера, членов, лидера, здоровья
- Kubernetes - обнаружение кластера, версии, портов
Автономные сервисы
- Redis - версия, порты, конфигурация
- ClickHouse - версия, порты, конфигурация
- RabbitMQ - версия, порты, конфигурация
- Kafka - порты, конфигурация
- MongoDB - версия, порты, конфигурация
Методы обнаружения
PostgreSQL с Patroni
- Процессы: проверка
postgres
иpatroni
- Порты: 5432 (PostgreSQL), 8008 (Patroni REST API)
- Версия: через
psql --version
илиpostgres --version
- Конфигурация: парсинг файлов
/etc/patroni/patroni.yml
,/etc/patroni.yml
- Кластер: команда
patronictl list
для получения информации о членах кластера - Репликация: SQL-запрос
SELECT client_addr, state FROM pg_stat_replication
etcd
- Процессы: проверка
etcd
- Порты: 2379 (client), 2380 (peer)
- Версия: через
etcdctl version
- Конфигурация: парсинг файлов
/etc/etcd/etcd.conf
, systemd unit - Кластер: команды
etcdctl member list
,etcdctl endpoint status
,etcdctl endpoint health
Kubernetes
- Процессы: проверка
kubelet
,kube-apiserver
- Порты: 6443 (API server), 10250 (kubelet)
- Версия: через
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 для Patroniconfig
- конфигурация Patroni
PatroniMember
name
- имя члена кластераhost
- IP-адресport
- портstate
- состояние ("running", "stopped")role
- роль ("leader", "replica")lag
- задержка репликации в байтах
EtcdClusterInfo (для etcd)
name
- имя кластераversion
- версия etcdmembers
- массив членов кластера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
- для PostgreSQLpatronictl
- для Patronietcdctl
- для etcdkubectl
- для Kubernetesredis-cli
- для Redisclickhouse-client
- для ClickHouserabbitmqctl
- для RabbitMQmongosh
- для 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
Ограничения
- Версии сервисов: некоторые команды могут не работать на старых версиях
- Конфигурационные файлы: парсинг ограничен стандартными форматами
- Права доступа: требует sudo для доступа к некоторым командам
- Сетевые соединения: не анализирует содержимое трафика
- Кластерное состояние: может не отражать реальное состояние при проблемах с сетью
Автор
Сергей Антропов
Сайт: https://devops.org.ru
Лицензия
Проект распространяется под лицензией MIT.