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
This commit is contained in:
Sergey Antropoff 2025-09-15 18:07:09 +03:00
parent 4a36a04d82
commit 67db7765c5
2 changed files with 136 additions and 63 deletions

View File

@ -55,15 +55,17 @@
### 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`
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. **Порты**: 6443 (API server), 10250 (kubelet)
3. **Версия**: через `kubectl version --client --short`
2. **Docker**: проверка контейнеров `kubelet`, образов `k8s.gcr.io/kubelet`
3. **Порты**: 6443 (API server), 10250 (kubelet)
4. **Версия**: через `kubectl version --client --short`
### ClickHouse
1. **Процессы**: проверка `clickhouse-server`
@ -88,9 +90,10 @@
### Kafka
1. **Процессы**: проверка `kafka.Kafka`
2. **Порты**: 9092 (broker)
3. **Версия**: через конфигурационные файлы
4. **Кластер**: команда `kafka-topics --bootstrap-server localhost:9092 --list`
2. **Docker**: проверка контейнеров `kafka`, образов `confluentinc/cp-kafka`
3. **Порты**: 9092 (broker)
4. **Версия**: через конфигурационные файлы
5. **Кластер**: команда `kafka-topics --bootstrap-server localhost:9092 --list`
### MongoDB
1. **Процессы**: проверка `mongod`
@ -103,9 +106,10 @@
#### DragonflyDB
1. **Процессы**: проверка `dragonfly`
2. **Порты**: 6379 (client), 6380 (admin)
3. **Версия**: через `dragonfly --version`
4. **Кластер**: команда `dragonfly cluster nodes`
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`
@ -116,27 +120,31 @@
#### Greenplum
1. **Процессы**: проверка `postgres.*greenplum`, `gpdb`
2. **Порты**: 5432 (PostgreSQL), 28080 (GPAdmin)
3. **Версия**: через `psql --version`
4. **Кластер**: команда `gpstate -s`
2. **Docker**: проверка контейнеров `greenplum`, образов `greenplum/greenplum`
3. **Порты**: 5432 (PostgreSQL), 28080 (GPAdmin)
4. **Версия**: через `psql --version`
5. **Кластер**: команда `gpstate -s`
#### MinIO
1. **Процессы**: проверка `minio`
2. **Порты**: 9000 (API), 9001 (Console)
3. **Версия**: через `minio --version`
4. **Кластер**: команда `mc admin info local`
2. **Docker**: проверка контейнеров `minio`, образов `minio/minio`
3. **Порты**: 9000 (API), 9001 (Console)
4. **Версия**: через `minio --version`
5. **Кластер**: команда `mc admin info local`
#### Redpanda
1. **Процессы**: проверка `redpanda`
2. **Порты**: 9092 (Kafka API), 9644 (Admin API)
3. **Версия**: через `rpk version`
4. **Кластер**: команда `rpk cluster info`
2. **Docker**: проверка контейнеров `redpanda`, образов `redpandadata/redpanda`
3. **Порты**: 9092 (Kafka API), 9644 (Admin API)
4. **Версия**: через `rpk version`
5. **Кластер**: команда `rpk cluster info`
#### NATS
1. **Процессы**: проверка `nats-server`
2. **Порты**: 4222 (client), 8222 (monitoring)
3. **Версия**: через `nats-server --version`
4. **Кластер**: команда `nats server list`
2. **Docker**: проверка контейнеров `nats`, образов `nats`
3. **Порты**: 4222 (client), 8222 (monitoring)
4. **Версия**: через `nats-server --version`
5. **Кластер**: команда `nats server list`
#### Zookeeper
1. **Процессы**: проверка `zookeeper`, `java.*zookeeper`
@ -148,8 +156,9 @@
#### BIND9
1. **Процессы**: проверка `named`, `bind9`
2. **Порты**: 53 (DNS), 953 (control)
3. **Версия**: через `named -v`
2. **Docker**: проверка контейнеров `bind9`, образов `internetwache/bind9`
3. **Порты**: 53 (DNS), 953 (control)
4. **Версия**: через `named -v`
#### Grafana
1. **Процессы**: проверка `grafana-server`, `grafana`
@ -165,48 +174,57 @@
#### Loki
1. **Процессы**: проверка `loki`
2. **Порты**: 3100 (HTTP)
3. **Версия**: через `loki --version`
2. **Docker**: проверка контейнеров `loki`, образов `grafana/loki`
3. **Порты**: 3100 (HTTP)
4. **Версия**: через `loki --version`
#### Harbor
1. **Процессы**: проверка `harbor`, `nginx.*harbor`
2. **Порты**: 80 (HTTP), 443 (HTTPS), 8080 (API)
3. **Версия**: через HTTP API `/api/v2.0/systeminfo`
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. **Порты**: 8080 (HTTP), 50000 (agent)
3. **Версия**: через HTTP API `/api/json`
2. **Docker**: проверка контейнеров `jenkins`, образов `jenkins/jenkins`
3. **Порты**: 8080 (HTTP), 50000 (agent)
4. **Версия**: через HTTP API `/api/json`
#### Keycloak
1. **Процессы**: проверка `keycloak`, `java.*keycloak`
2. **Порты**: 8080 (HTTP), 8443 (HTTPS)
3. **Версия**: через HTTP API `/auth/admin/info` или `/admin/info`
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. **Порты**: 7474 (HTTP), 7687 (Bolt)
3. **Версия**: через HTTP API `/db/data/`
2. **Docker**: проверка контейнеров `neo4j`, образов `neo4j/neo4j`
3. **Порты**: 7474 (HTTP), 7687 (Bolt)
4. **Версия**: через HTTP API `/db/data/`
#### Sentry
1. **Процессы**: проверка `sentry`, `python.*sentry`
2. **Порты**: 9000 (HTTP), 9001 (WebSocket)
3. **Версия**: через HTTP API `/api/0/`
2. **Docker**: проверка контейнеров `sentry`, образов `sentry`
3. **Порты**: 9000 (HTTP), 9001 (WebSocket)
4. **Версия**: через HTTP API `/api/0/`
#### Apache Superset
1. **Процессы**: проверка `superset`, `python.*superset`
2. **Порты**: 8088 (HTTP)
3. **Версия**: через HTTP API `/api/v1/version`
2. **Docker**: проверка контейнеров `superset`, образов `apache/superset`
3. **Порты**: 8088 (HTTP)
4. **Версия**: через HTTP API `/api/v1/version`
#### InfluxDB
1. **Процессы**: проверка `influxd`
2. **Порты**: 8086 (HTTP)
3. **Версия**: через `influxd version`
2. **Docker**: проверка контейнеров `influxdb`, образов `influxdb`
3. **Порты**: 8086 (HTTP)
4. **Версия**: через `influxd version`
#### VictoriaMetrics
1. **Процессы**: проверка `victoria-metrics`, `vmagent`
2. **Порты**: 8428 (HTTP), 8429 (HTTPS)
3. **Версия**: через `victoria-metrics --version`
2. **Docker**: проверка контейнеров `victoria-metrics`, образов `victoriametrics/victoria-metrics`
3. **Порты**: 8428 (HTTP), 8429 (HTTPS)
4. **Версия**: через `victoria-metrics --version`
### Остальные сервисы
- Все остальные сервисы перечислены выше в соответствующих разделах
@ -397,6 +415,10 @@ psql -t -c "SELECT client_addr, state FROM pg_stat_replication;"
# Проверка процессов
pgrep -f etcd
# Проверка Docker-контейнеров
docker ps --filter "name=etcd"
docker ps --filter "ancestor=etcd"
# Проверка портов
ss -tln sport = :2379
ss -tln sport = :2380
@ -412,6 +434,10 @@ etcdctl endpoint health
# Проверка процессов
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
@ -443,6 +469,10 @@ redis-cli cluster info
# Проверка процессов
pgrep -f rabbitmq-server
# Проверка Docker-контейнеров
docker ps --filter "name=rabbitmq"
docker ps --filter "ancestor=rabbitmq"
# Проверка портов
ss -tln sport = :5672
ss -tln sport = :15672
@ -457,6 +487,10 @@ rabbitmqctl list_nodes
# Проверка процессов
pgrep -f kafka.Kafka
# Проверка Docker-контейнеров
docker ps --filter "name=kafka"
docker ps --filter "ancestor=confluentinc/cp-kafka"
# Проверка портов
ss -tln sport = :9092
@ -470,6 +504,10 @@ kafka-broker-api-versions --bootstrap-server localhost:9092
# Проверка процессов
pgrep -f mongod
# Проверка Docker-контейнеров
docker ps --filter "name=mongo"
docker ps --filter "ancestor=mongo"
# Проверка портов
ss -tln sport = :27017

View File

@ -934,8 +934,9 @@ func getMongoDBClusterNodes() []string {
// detectEtcd обнаруживает etcd
func detectEtcd() *ServiceInfo {
// Проверяем процессы
if !isProcessRunning("etcd") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("etcd") &&
!isDockerContainerRunning("etcd") && !isDockerImageRunning("etcd") {
return nil
}
@ -1220,7 +1221,9 @@ func detectRabbitMQ() *ServiceInfo {
}
func detectKafka() *ServiceInfo {
if !isProcessRunning("kafka.Kafka") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("kafka.Kafka") &&
!isDockerContainerRunning("kafka") && !isDockerImageRunning("confluentinc/cp-kafka") {
return nil
}
@ -1283,7 +1286,9 @@ func detectMongoDB() *ServiceInfo {
}
func detectKubernetes() *ServiceInfo {
if !isProcessRunning("kubelet") && !isProcessRunning("kube-apiserver") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("kubelet") && !isProcessRunning("kube-apiserver") &&
!isDockerContainerRunning("kubelet") && !isDockerImageRunning("k8s.gcr.io/kubelet") {
return nil
}
@ -1315,7 +1320,9 @@ func detectKubernetes() *ServiceInfo {
// detectBind9 обнаруживает BIND9 DNS сервер
func detectBind9() *ServiceInfo {
if !isProcessRunning("named") && !isProcessRunning("bind9") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("named") && !isProcessRunning("bind9") &&
!isDockerContainerRunning("bind9") && !isDockerImageRunning("internetwache/bind9") {
return nil
}
@ -1344,7 +1351,9 @@ func detectBind9() *ServiceInfo {
// detectDragonflyDB обнаруживает DragonflyDB
func detectDragonflyDB() *ServiceInfo {
if !isProcessRunning("dragonfly") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("dragonfly") &&
!isDockerContainerRunning("dragonfly") && !isDockerImageRunning("docker.dragonflydb.io/dragonflydb/dragonfly") {
return nil
}
@ -1481,7 +1490,9 @@ func detectPrometheus() *ServiceInfo {
// detectLoki обнаруживает Loki
func detectLoki() *ServiceInfo {
if !isProcessRunning("loki") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("loki") &&
!isDockerContainerRunning("loki") && !isDockerImageRunning("grafana/loki") {
return nil
}
@ -1510,7 +1521,9 @@ func detectLoki() *ServiceInfo {
// detectGreenplum обнаруживает Greenplum
func detectGreenplum() *ServiceInfo {
if !isProcessRunning("postgres.*greenplum") && !isProcessRunning("gpdb") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("postgres.*greenplum") && !isProcessRunning("gpdb") &&
!isDockerContainerRunning("greenplum") && !isDockerImageRunning("greenplum/greenplum") {
return nil
}
@ -1546,7 +1559,9 @@ func detectGreenplum() *ServiceInfo {
// detectHarbor обнаруживает Harbor
func detectHarbor() *ServiceInfo {
if !isProcessRunning("harbor") && !isProcessRunning("nginx.*harbor") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("harbor") && !isProcessRunning("nginx.*harbor") &&
!isDockerContainerRunning("harbor") && !isDockerImageRunning("goharbor/harbor-core") {
return nil
}
@ -1576,7 +1591,9 @@ func detectHarbor() *ServiceInfo {
// detectJenkins обнаруживает Jenkins
func detectJenkins() *ServiceInfo {
if !isProcessRunning("jenkins") && !isProcessRunning("java.*jenkins") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("jenkins") && !isProcessRunning("java.*jenkins") &&
!isDockerContainerRunning("jenkins") && !isDockerImageRunning("jenkins/jenkins") {
return nil
}
@ -1606,7 +1623,9 @@ func detectJenkins() *ServiceInfo {
// detectKeycloak обнаруживает Keycloak
func detectKeycloak() *ServiceInfo {
if !isProcessRunning("keycloak") && !isProcessRunning("java.*keycloak") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("keycloak") && !isProcessRunning("java.*keycloak") &&
!isDockerContainerRunning("keycloak") && !isDockerImageRunning("quay.io/keycloak/keycloak") {
return nil
}
@ -1640,7 +1659,9 @@ func detectKeycloak() *ServiceInfo {
// detectMinio обнаруживает MinIO
func detectMinio() *ServiceInfo {
if !isProcessRunning("minio") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("minio") &&
!isDockerContainerRunning("minio") && !isDockerImageRunning("minio/minio") {
return nil
}
@ -1676,7 +1697,9 @@ func detectMinio() *ServiceInfo {
// detectNeo4j обнаруживает Neo4j
func detectNeo4j() *ServiceInfo {
if !isProcessRunning("neo4j") && !isProcessRunning("java.*neo4j") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("neo4j") && !isProcessRunning("java.*neo4j") &&
!isDockerContainerRunning("neo4j") && !isDockerImageRunning("neo4j/neo4j") {
return nil
}
@ -1706,7 +1729,9 @@ func detectNeo4j() *ServiceInfo {
// detectRedpanda обнаруживает Redpanda
func detectRedpanda() *ServiceInfo {
if !isProcessRunning("redpanda") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("redpanda") &&
!isDockerContainerRunning("redpanda") && !isDockerImageRunning("redpandadata/redpanda") {
return nil
}
@ -1742,7 +1767,9 @@ func detectRedpanda() *ServiceInfo {
// detectSentry обнаруживает Sentry
func detectSentry() *ServiceInfo {
if !isProcessRunning("sentry") && !isProcessRunning("python.*sentry") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("sentry") && !isProcessRunning("python.*sentry") &&
!isDockerContainerRunning("sentry") && !isDockerImageRunning("sentry") {
return nil
}
@ -1772,7 +1799,9 @@ func detectSentry() *ServiceInfo {
// detectSuperset обнаруживает Apache Superset
func detectSuperset() *ServiceInfo {
if !isProcessRunning("superset") && !isProcessRunning("python.*superset") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("superset") && !isProcessRunning("python.*superset") &&
!isDockerContainerRunning("superset") && !isDockerImageRunning("apache/superset") {
return nil
}
@ -1802,7 +1831,9 @@ func detectSuperset() *ServiceInfo {
// detectNats обнаруживает NATS
func detectNats() *ServiceInfo {
if !isProcessRunning("nats-server") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("nats-server") &&
!isDockerContainerRunning("nats") && !isDockerImageRunning("nats") {
return nil
}
@ -1838,7 +1869,9 @@ func detectNats() *ServiceInfo {
// detectInfluxDB обнаруживает InfluxDB
func detectInfluxDB() *ServiceInfo {
if !isProcessRunning("influxd") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("influxd") &&
!isDockerContainerRunning("influxdb") && !isDockerImageRunning("influxdb") {
return nil
}
@ -1867,7 +1900,9 @@ func detectInfluxDB() *ServiceInfo {
// detectVictoriaMetrics обнаруживает VictoriaMetrics
func detectVictoriaMetrics() *ServiceInfo {
if !isProcessRunning("victoria-metrics") && !isProcessRunning("vmagent") {
// Проверяем процессы и Docker-контейнеры
if !isProcessRunning("victoria-metrics") && !isProcessRunning("vmagent") &&
!isDockerContainerRunning("victoria-metrics") && !isDockerImageRunning("victoriametrics/victoria-metrics") {
return nil
}