**Обновленные сервисы с 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
24 KiB
24 KiB
Коллектор 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
- Процессы: проверка
postgres
иpatroni
- Docker: проверка контейнеров
postgres
,patroni
, образовpostgres
,bitnami/postgresql
- Порты: 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
- Docker: проверка контейнеров
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
- Docker: проверка контейнеров
kubelet
, образовk8s.gcr.io/kubelet
- Порты: 6443 (API server), 10250 (kubelet)
- Версия: через
kubectl version --client --short
ClickHouse
- Процессы: проверка
clickhouse-server
- Docker: проверка контейнеров
clickhouse
, образовclickhouse/clickhouse-server
- Порты: 8123 (HTTP), 9000 (native)
- Версия: через
clickhouse-client --version
- Кластер: SQL-запрос
SELECT host_name FROM system.clusters
Redis
- Процессы: проверка
redis-server
- Docker: проверка контейнеров
redis
, образовredis
- Порты: 6379 (client)
- Версия: через
redis-cli --version
- Кластер: команда
redis-cli cluster nodes
RabbitMQ
- Процессы: проверка
rabbitmq-server
- Docker: проверка контейнеров
rabbitmq
, образовrabbitmq
- Порты: 5672 (AMQP), 15672 (management)
- Версия: через
rabbitmqctl version
- Кластер: команда
rabbitmqctl cluster_status
Kafka
- Процессы: проверка
kafka.Kafka
- Docker: проверка контейнеров
kafka
, образовconfluentinc/cp-kafka
- Порты: 9092 (broker)
- Версия: через конфигурационные файлы
- Кластер: команда
kafka-topics --bootstrap-server localhost:9092 --list
MongoDB
- Процессы: проверка
mongod
- Docker: проверка контейнеров
mongo
, образовmongo
- Порты: 27017 (mongod)
- Версия: через
mongosh --version
- Кластер: команда
mongosh --eval "rs.status().members.map(m => m.name)"
Новые кластерные сервисы
DragonflyDB
- Процессы: проверка
dragonfly
- Docker: проверка контейнеров
dragonfly
, образовdocker.dragonflydb.io/dragonflydb/dragonfly
- Порты: 6379 (client), 6380 (admin)
- Версия: через
dragonfly --version
- Кластер: команда
dragonfly cluster nodes
Elasticsearch
- Процессы: проверка
elasticsearch
,java.*elasticsearch
- Docker: проверка контейнеров
elasticsearch
, образовelasticsearch
- Порты: 9200 (HTTP), 9300 (transport)
- Версия: через HTTP API
http://localhost:9200
- Кластер: HTTP API
/_cluster/state/nodes
Greenplum
- Процессы: проверка
postgres.*greenplum
,gpdb
- Docker: проверка контейнеров
greenplum
, образовgreenplum/greenplum
- Порты: 5432 (PostgreSQL), 28080 (GPAdmin)
- Версия: через
psql --version
- Кластер: команда
gpstate -s
MinIO
- Процессы: проверка
minio
- Docker: проверка контейнеров
minio
, образовminio/minio
- Порты: 9000 (API), 9001 (Console)
- Версия: через
minio --version
- Кластер: команда
mc admin info local
Redpanda
- Процессы: проверка
redpanda
- Docker: проверка контейнеров
redpanda
, образовredpandadata/redpanda
- Порты: 9092 (Kafka API), 9644 (Admin API)
- Версия: через
rpk version
- Кластер: команда
rpk cluster info
NATS
- Процессы: проверка
nats-server
- Docker: проверка контейнеров
nats
, образовnats
- Порты: 4222 (client), 8222 (monitoring)
- Версия: через
nats-server --version
- Кластер: команда
nats server list
Zookeeper
- Процессы: проверка
zookeeper
,java.*zookeeper
- Порты: 2181 (client), 2888 (follower), 3888 (election)
- Версия: через
zkCli version
- Кластер: команда
zkCli ls /
(базовая поддержка)
Новые автономные сервисы
BIND9
- Процессы: проверка
named
,bind9
- Docker: проверка контейнеров
bind9
, образовinternetwache/bind9
- Порты: 53 (DNS), 953 (control)
- Версия: через
named -v
Grafana
- Процессы: проверка
grafana-server
,grafana
- Docker: проверка контейнеров
grafana
, образовgrafana/grafana
- Порты: 3000 (HTTP)
- Версия: через
grafana-server --version
Prometheus
- Процессы: проверка
prometheus
- Docker: проверка контейнеров
prometheus
, образовprom/prometheus
- Порты: 9090 (HTTP)
- Версия: через
prometheus --version
Loki
- Процессы: проверка
loki
- Docker: проверка контейнеров
loki
, образовgrafana/loki
- Порты: 3100 (HTTP)
- Версия: через
loki --version
Harbor
- Процессы: проверка
harbor
,nginx.*harbor
- Docker: проверка контейнеров
harbor
, образовgoharbor/harbor-core
- Порты: 80 (HTTP), 443 (HTTPS), 8080 (API)
- Версия: через HTTP API
/api/v2.0/systeminfo
Jenkins
- Процессы: проверка
jenkins
,java.*jenkins
- Docker: проверка контейнеров
jenkins
, образовjenkins/jenkins
- Порты: 8080 (HTTP), 50000 (agent)
- Версия: через HTTP API
/api/json
Keycloak
- Процессы: проверка
keycloak
,java.*keycloak
- Docker: проверка контейнеров
keycloak
, образовquay.io/keycloak/keycloak
- Порты: 8080 (HTTP), 8443 (HTTPS)
- Версия: через HTTP API
/auth/admin/info
или/admin/info
Neo4j
- Процессы: проверка
neo4j
,java.*neo4j
- Docker: проверка контейнеров
neo4j
, образовneo4j/neo4j
- Порты: 7474 (HTTP), 7687 (Bolt)
- Версия: через HTTP API
/db/data/
Sentry
- Процессы: проверка
sentry
,python.*sentry
- Docker: проверка контейнеров
sentry
, образовsentry
- Порты: 9000 (HTTP), 9001 (WebSocket)
- Версия: через HTTP API
/api/0/
Apache Superset
- Процессы: проверка
superset
,python.*superset
- Docker: проверка контейнеров
superset
, образовapache/superset
- Порты: 8088 (HTTP)
- Версия: через HTTP API
/api/v1/version
InfluxDB
- Процессы: проверка
influxd
- Docker: проверка контейнеров
influxdb
, образовinfluxdb
- Порты: 8086 (HTTP)
- Версия: через
influxd version
VictoriaMetrics
- Процессы: проверка
victoria-metrics
,vmagent
- Docker: проверка контейнеров
victoria-metrics
, образовvictoriametrics/victoria-metrics
- Порты: 8428 (HTTP), 8429 (HTTPS)
- Версия: через
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 для 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
- для проверки портовcurl
- для HTTP API запросовgetent
- для разрешения hostname в IPdocker
- для проверки Docker-контейнеров
Основные сервисы
psql
илиpostgres
- для PostgreSQLpatronictl
- для Patronietcdctl
- для etcdkubectl
- для Kubernetesredis-cli
- для Redis кластераclickhouse-client
- для ClickHouse кластераrabbitmqctl
- для RabbitMQ кластераkafka-topics
- для Kafka кластераmongosh
- для MongoDB кластера
Новые сервисы
dragonfly
- для DragonflyDBgpstate
- для Greenplumminio
,mc
- для MinIOrpk
- для Redpandanats-server
,nats
- для NATSzkCli
- для Zookeepernamed
- для BIND9grafana-server
- для Grafanaprometheus
- для Prometheusloki
- для Lokiinfluxd
- для InfluxDBvictoria-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
Ограничения
- Версии сервисов: некоторые команды могут не работать на старых версиях
- Конфигурационные файлы: парсинг ограничен стандартными форматами
- Права доступа: требует sudo для доступа к некоторым командам
- Сетевые соединения: не анализирует содержимое трафика
- Кластерное состояние: может не отражать реальное состояние при проблемах с сетью
- HTTP API: требует доступности HTTP API для получения версий и информации о кластерах
- Команды управления: не все команды управления кластерами могут быть установлены
- Fallback поведение: при недоступности команд управления возвращается localhost
- Производительность: большое количество сервисов может увеличить время выполнения
- Сетевые зависимости: некоторые сервисы требуют сетевого доступа для полной диагностики
Результаты тестирования
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.