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

View File

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