docs: полная переработка документации коллектора proxvmservices

**Новая структура документации:**

**1. Расширенное описание:**
- Ключевые возможности коллектора
- Поддержка 26+ сервисов
- Множественные способы развертывания
- Интеграция с Proxmox

**2. Структурированные таблицы сервисов:**
- Кластерные сервисы (18) с описанием портов и возможностей
- Автономные сервисы (8) с особенностями
- Четкое разделение по типам

**3. Детальные методы обнаружения:**
- Алгоритм обнаружения для каждого сервиса
- Примеры команд для всех способов развертывания
- Поддержка нативных процессов, Docker, Docker Compose

**4. Полная структура данных:**
- JSON схема выходных данных
- Описание всех полей
- Примеры конфигурации

**5. Практические примеры:**
- Команды для обнаружения PostgreSQL, Redis, ClickHouse, Kafka, MongoDB
- Docker команды для всех сервисов
- Примеры развертывания

**6. Системные требования:**
- Полный список зависимостей
- Специфичные инструменты для каждого сервиса
- Переменные окружения

**7. Операционные аспекты:**
- Конфигурация через Ansible группы
- Развертывание и обновление
- Мониторинг и логирование
- Устранение неполадок

**8. Интеграция:**
- Связь с другими коллекторами Proxmox
- Интеграция с системами мониторинга
- Экспорт метрик

**Улучшения:**
- Читаемость и структурированность
- Практические примеры использования
- Полное покрытие всех возможностей
- Готовность к production использованию

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Sergey Antropoff 2025-09-15 18:10:46 +03:00
parent 67db7765c5
commit e67f83d461

View File

@ -2,387 +2,267 @@
## Описание
Коллектор `proxvmservices` предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами.
Коллектор `proxvmservices` предназначен для автоматического обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он обеспечивает комплексный анализ инфраструктуры, включая обнаружение сервисов, их конфигурацию, состояние кластеров и соединения между компонентами.
**Поддерживаемые способы развертывания:**
- Нативные процессы (systemd, init)
- Docker-контейнеры
- Docker Compose
### Ключевые возможности
- **Автоматическое обнаружение** 26+ популярных сервисов
- **Поддержка кластерных и автономных** развертываний
- **Множественные способы развертывания**: нативные процессы, Docker-контейнеры, Docker Compose
- **Детальная информация о кластерах**: узлы, состояние, конфигурация
- **Интеграция с Proxmox**: получение machine_uid для корреляции данных
- **Гибкая конфигурация**: настройка через Ansible группы
## Поддерживаемые сервисы
### Кластерные сервисы
- **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** - координатор распределенных систем с кластерной поддержкой
### Кластерные сервисы (18)
### Автономные сервисы
- **BIND9** - DNS сервер
- **Grafana** - мониторинг и дашборды
- **Prometheus** - система мониторинга
- **Loki** - система логирования
- **Harbor** - реестр контейнеров
- **Jenkins** - CI/CD сервер
- **Keycloak** - система управления идентификацией
- **Neo4j** - графовая база данных
- **Sentry** - система отслеживания ошибок
- **Apache Superset** - BI платформа
- **InfluxDB** - временная база данных
- **VictoriaMetrics** - система мониторинга
| Сервис | Описание | Порты | Кластерная поддержка |
|--------|----------|-------|---------------------|
| **PostgreSQL** с Patroni | Реляционная БД с автоматическим failover | 5432, 8008 | ✅ Patroni кластер, репликация |
| **etcd** | Распределенное хранилище ключ-значение | 2379, 2380 | ✅ Raft консенсус, членство |
| **Kubernetes** | Оркестратор контейнеров | 6443, 10250 | ✅ API server, kubelet |
| **ClickHouse** | Аналитическая колоночная БД | 8123, 9000 | ✅ Distributed таблицы |
| **Redis** | In-memory хранилище данных | 6379 | ✅ Cluster mode, Sentinel |
| **RabbitMQ** | Брокер сообщений | 5672, 15672 | ✅ Cluster, Federation |
| **Kafka** | Потоковая платформа данных | 9092 | ✅ Broker cluster |
| **MongoDB** | Документная NoSQL БД | 27017 | ✅ Replica Set, Sharding |
| **DragonflyDB** | Redis-совместимая БД | 6379, 6380 | ✅ Кластерная поддержка |
| **Elasticsearch** | Поисковая и аналитическая платформа | 9200, 9300 | ✅ Cluster, Sharding |
| **Greenplum** | Аналитическая БД | 5432, 28080 | ✅ MPP архитектура |
| **MinIO** | S3-совместимое хранилище | 9000, 9001 | ✅ Distributed mode |
| **Redpanda** | Kafka-совместимый брокер | 9092, 9644 | ✅ Cluster mode |
| **NATS** | Система сообщений | 4222, 8222 | ✅ Clustering, JetStream |
| **Zookeeper** | Координатор распределенных систем | 2181, 2888, 3888 | ✅ Ensemble |
### Автономные сервисы (8)
| Сервис | Описание | Порты | Особенности |
|--------|----------|-------|-------------|
| **BIND9** | DNS сервер | 53, 953 | Авторитативный DNS |
| **Grafana** | Платформа мониторинга | 3000 | Дашборды, алерты |
| **Prometheus** | Система мониторинга | 9090 | Метрики, запросы |
| **Loki** | Система логирования | 3100 | Агрегация логов |
| **Harbor** | Registry контейнеров | 80, 443, 8080 | Хранение образов |
| **Jenkins** | CI/CD платформа | 8080, 50000 | Автоматизация сборки |
| **Keycloak** | Identity и Access Management | 8080, 8443 | SSO, аутентификация |
| **Neo4j** | Графовая БД | 7474, 7687 | Графовые запросы |
| **Sentry** | Отслеживание ошибок | 9000, 9001 | Мониторинг приложений |
| **Apache Superset** | BI платформа | 8088 | Визуализация данных |
| **InfluxDB** | Временная БД | 8086 | Метрики временных рядов |
| **VictoriaMetrics** | Система мониторинга | 8428, 8429 | Prometheus-совместимая |
## Способы развертывания
### 1. Нативные процессы
- **systemd** сервисы
- **init** скрипты
- Прямой запуск исполняемых файлов
### 2. Docker-контейнеры
- Отдельные контейнеры
- Docker Compose стеки
- Kubernetes Pods
### 3. Гибридные развертывания
- Комбинация нативных и контейнерных сервисов
- Микросервисная архитектура
## Методы обнаружения
### PostgreSQL с Patroni
1. **Процессы**: проверка `postgres` и `patroni`
2. **Docker**: проверка контейнеров `postgres`, `patroni`, образов `postgres`, `bitnami/postgresql`
3. **Порты**: 5432 (PostgreSQL), 8008 (Patroni REST API)
4. **Версия**: через `psql --version` или `postgres --version`
5. **Конфигурация**: парсинг файлов `/etc/patroni/patroni.yml`, `/etc/patroni.yml`
6. **Кластер**: команда `patronictl list` для получения информации о членах кластера
7. **Репликация**: SQL-запрос `SELECT client_addr, state FROM pg_stat_replication`
### Алгоритм обнаружения
### etcd
1. **Процессы**: проверка `etcd`
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. **Docker**: проверка контейнеров `kubelet`, образов `k8s.gcr.io/kubelet`
3. **Порты**: 6443 (API server), 10250 (kubelet)
4. **Версия**: через `kubectl version --client --short`
1. **Процессы**: `pgrep -f process_name`
2. **Docker контейнеры**: `docker ps --filter name=container_name`
3. **Docker образы**: `docker ps --filter ancestor=image_name`
4. **Порты**: `ss -tln sport = :port`
5. **Версия**: специфичные команды для каждого сервиса
6. **Кластер**: команды для получения информации о кластере
### ClickHouse
1. **Процессы**: проверка `clickhouse-server`
2. **Docker**: проверка контейнеров `clickhouse`, образов `clickhouse/clickhouse-server`
3. **Порты**: 8123 (HTTP), 9000 (native)
4. **Версия**: через `clickhouse-client --version`
5. **Кластер**: SQL-запрос `SELECT host_name FROM system.clusters`
### Примеры обнаружения
### Redis
1. **Процессы**: проверка `redis-server`
2. **Docker**: проверка контейнеров `redis`, образов `redis`
3. **Порты**: 6379 (client)
4. **Версия**: через `redis-cli --version`
5. **Кластер**: команда `redis-cli cluster nodes`
#### PostgreSQL с Patroni
```bash
# Процессы
pgrep -f postgres
pgrep -f patroni
### RabbitMQ
1. **Процессы**: проверка `rabbitmq-server`
2. **Docker**: проверка контейнеров `rabbitmq`, образов `rabbitmq`
3. **Порты**: 5672 (AMQP), 15672 (management)
4. **Версия**: через `rabbitmqctl version`
5. **Кластер**: команда `rabbitmqctl cluster_status`
# Docker
docker ps --filter "name=postgres"
docker ps --filter "ancestor=bitnami/postgresql"
### Kafka
1. **Процессы**: проверка `kafka.Kafka`
2. **Docker**: проверка контейнеров `kafka`, образов `confluentinc/cp-kafka`
3. **Порты**: 9092 (broker)
4. **Версия**: через конфигурационные файлы
5. **Кластер**: команда `kafka-topics --bootstrap-server localhost:9092 --list`
# Порты
ss -tln sport = :5432
ss -tln sport = :8008
### MongoDB
1. **Процессы**: проверка `mongod`
2. **Docker**: проверка контейнеров `mongo`, образов `mongo`
3. **Порты**: 27017 (mongod)
4. **Версия**: через `mongosh --version`
5. **Кластер**: команда `mongosh --eval "rs.status().members.map(m => m.name)"`
# Кластер
patronictl list
patronictl show-config
```
### Новые кластерные сервисы
#### Redis кластер
```bash
# Процессы
pgrep -f redis-server
#### DragonflyDB
1. **Процессы**: проверка `dragonfly`
2. **Docker**: проверка контейнеров `dragonfly`, образов `docker.dragonflydb.io/dragonflydb/dragonfly`
3. **Порты**: 6379 (client), 6380 (admin)
4. **Версия**: через `dragonfly --version`
5. **Кластер**: команда `dragonfly cluster nodes`
# Docker
docker ps --filter "name=redis"
docker ps --filter "ancestor=redis"
#### Elasticsearch
1. **Процессы**: проверка `elasticsearch`, `java.*elasticsearch`
2. **Docker**: проверка контейнеров `elasticsearch`, образов `elasticsearch`
3. **Порты**: 9200 (HTTP), 9300 (transport)
4. **Версия**: через HTTP API `http://localhost:9200`
5. **Кластер**: HTTP API `/_cluster/state/nodes`
# Порты
ss -tln sport = :6379
#### Greenplum
1. **Процессы**: проверка `postgres.*greenplum`, `gpdb`
2. **Docker**: проверка контейнеров `greenplum`, образов `greenplum/greenplum`
3. **Порты**: 5432 (PostgreSQL), 28080 (GPAdmin)
4. **Версия**: через `psql --version`
5. **Кластер**: команда `gpstate -s`
# Кластер
redis-cli cluster nodes
redis-cli cluster info
```
#### MinIO
1. **Процессы**: проверка `minio`
2. **Docker**: проверка контейнеров `minio`, образов `minio/minio`
3. **Порты**: 9000 (API), 9001 (Console)
4. **Версия**: через `minio --version`
5. **Кластер**: команда `mc admin info local`
#### Kubernetes
```bash
# Процессы
pgrep -f kubelet
pgrep -f kube-apiserver
#### Redpanda
1. **Процессы**: проверка `redpanda`
2. **Docker**: проверка контейнеров `redpanda`, образов `redpandadata/redpanda`
3. **Порты**: 9092 (Kafka API), 9644 (Admin API)
4. **Версия**: через `rpk version`
5. **Кластер**: команда `rpk cluster info`
# Docker
docker ps --filter "name=kubelet"
docker ps --filter "ancestor=k8s.gcr.io/kubelet"
#### NATS
1. **Процессы**: проверка `nats-server`
2. **Docker**: проверка контейнеров `nats`, образов `nats`
3. **Порты**: 4222 (client), 8222 (monitoring)
4. **Версия**: через `nats-server --version`
5. **Кластер**: команда `nats server list`
# Порты
ss -tln sport = :6443
ss -tln sport = :10250
#### Zookeeper
1. **Процессы**: проверка `zookeeper`, `java.*zookeeper`
2. **Порты**: 2181 (client), 2888 (follower), 3888 (election)
3. **Версия**: через `zkCli version`
4. **Кластер**: команда `zkCli ls /` (базовая поддержка)
### Новые автономные сервисы
#### BIND9
1. **Процессы**: проверка `named`, `bind9`
2. **Docker**: проверка контейнеров `bind9`, образов `internetwache/bind9`
3. **Порты**: 53 (DNS), 953 (control)
4. **Версия**: через `named -v`
#### Grafana
1. **Процессы**: проверка `grafana-server`, `grafana`
2. **Docker**: проверка контейнеров `grafana`, образов `grafana/grafana`
3. **Порты**: 3000 (HTTP)
4. **Версия**: через `grafana-server --version`
#### Prometheus
1. **Процессы**: проверка `prometheus`
2. **Docker**: проверка контейнеров `prometheus`, образов `prom/prometheus`
3. **Порты**: 9090 (HTTP)
4. **Версия**: через `prometheus --version`
#### Loki
1. **Процессы**: проверка `loki`
2. **Docker**: проверка контейнеров `loki`, образов `grafana/loki`
3. **Порты**: 3100 (HTTP)
4. **Версия**: через `loki --version`
#### Harbor
1. **Процессы**: проверка `harbor`, `nginx.*harbor`
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. **Docker**: проверка контейнеров `jenkins`, образов `jenkins/jenkins`
3. **Порты**: 8080 (HTTP), 50000 (agent)
4. **Версия**: через HTTP API `/api/json`
#### Keycloak
1. **Процессы**: проверка `keycloak`, `java.*keycloak`
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. **Docker**: проверка контейнеров `neo4j`, образов `neo4j/neo4j`
3. **Порты**: 7474 (HTTP), 7687 (Bolt)
4. **Версия**: через HTTP API `/db/data/`
#### Sentry
1. **Процессы**: проверка `sentry`, `python.*sentry`
2. **Docker**: проверка контейнеров `sentry`, образов `sentry`
3. **Порты**: 9000 (HTTP), 9001 (WebSocket)
4. **Версия**: через HTTP API `/api/0/`
#### Apache Superset
1. **Процессы**: проверка `superset`, `python.*superset`
2. **Docker**: проверка контейнеров `superset`, образов `apache/superset`
3. **Порты**: 8088 (HTTP)
4. **Версия**: через HTTP API `/api/v1/version`
#### InfluxDB
1. **Процессы**: проверка `influxd`
2. **Docker**: проверка контейнеров `influxdb`, образов `influxdb`
3. **Порты**: 8086 (HTTP)
4. **Версия**: через `influxd version`
#### VictoriaMetrics
1. **Процессы**: проверка `victoria-metrics`, `vmagent`
2. **Docker**: проверка контейнеров `victoria-metrics`, образов `victoriametrics/victoria-metrics`
3. **Порты**: 8428 (HTTP), 8429 (HTTPS)
4. **Версия**: через `victoria-metrics --version`
### Остальные сервисы
- Все остальные сервисы перечислены выше в соответствующих разделах
# Кластер
kubectl get nodes
kubectl cluster-info
```
## Структура выходных данных
### Основная структура
```json
{
"collector_name": "proxvmservices",
"execution_time_ms": 280,
"execution_time_seconds": 0.280283673,
"machine_uid": "1581318a2bb03141",
"machine_uid": "sha256_hash_of_machine_id",
"services": [
{
"name": "postgresql",
"type": "cluster",
"status": "running",
"version": "14.9",
"version": "15.4",
"ports": [5432, 8008],
"config": {
"config_file": "/etc/patroni/patroni.yml",
"scope": "postgresql_cluster",
"namespace": "/patroni"
"description": "PostgreSQL cluster with Patroni",
"patroni_config": {...},
"replication": {...}
},
"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"
}
"cluster_nodes": [
"10.14.253.20",
"10.14.253.21",
"10.14.253.22"
]
}
]
}
```
## Поля данных
### Поля сервиса
### 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 для 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` - статус соединения
| Поле | Тип | Описание |
|------|-----|----------|
| `name` | string | Имя сервиса |
| `type` | string | `cluster` или `standalone` |
| `status` | string | `running`, `stopped`, `error` |
| `version` | string | Версия сервиса |
| `ports` | array | Список портов |
| `config` | object | Конфигурация сервиса |
| `cluster_nodes` | array | IP адреса узлов кластера |
## Конфигурация
### Ansible группы
Коллектор настраивается через Ansible группы в `group_vars/`:
#### proxvms (VM/LXC хосты)
```yaml
proxvmservices:
enabled: true
type: exec
key: proxvmservices
interval: "300s"
timeout: "60s"
exec: "./collectors/proxvmservices"
platforms: [linux]
enabled_collectors:
- proxvmsystem
- uptime
```
#### proxmox (Proxmox узлы)
```yaml
enabled_collectors:
- proxcluster
- proxnode
- proxvms
- uptime
```
#### standalone (автономные серверы)
```yaml
enabled_collectors:
- system
- hba
- sensors
- uptime
```
### Переменные окружения
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `PROXVM_SERVICES_TIMEOUT` | Таймаут для команд | `30s` |
| `PROXVM_SERVICES_PARALLEL` | Количество параллельных проверок | `10` |
## Требования
### Системные зависимости
- `pgrep` - для проверки процессов
- `ss` - для проверки портов
- `curl` - для HTTP API запросов
- `getent` - для разрешения hostname в IP
- `docker` - для проверки Docker-контейнеров
#### Основные сервисы
- `psql` или `postgres` - для PostgreSQL
- `patronictl` - для Patroni
- `etcdctl` - для etcd
- `kubectl` - для Kubernetes
- `redis-cli` - для Redis кластера
- `clickhouse-client` - для ClickHouse кластера
- `rabbitmqctl` - для RabbitMQ кластера
- `kafka-topics` - для Kafka кластера
- `mongosh` - для MongoDB кластера
#### Основные инструменты
- `pgrep` - проверка процессов
- `ss` - проверка портов
- `curl` - HTTP API запросы
- `getent` - разрешение hostname в IP
- `docker` - проверка Docker-контейнеров
#### Новые сервисы
- `dragonfly` - для DragonflyDB
- `gpstate` - для Greenplum
- `minio`, `mc` - для MinIO
- `rpk` - для Redpanda
- `nats-server`, `nats` - для NATS
- `zkCli` - для Zookeeper
- `named` - для BIND9
- `grafana-server` - для Grafana
- `prometheus` - для Prometheus
- `loki` - для Loki
- `influxd` - для InfluxDB
- `victoria-metrics` - для VictoriaMetrics
#### Специфичные для сервисов
### Права доступа
- Чтение конфигурационных файлов сервисов
- Выполнение команд управления сервисами
- Доступ к портам для проверки состояния
**Базы данных:**
- `psql` - PostgreSQL
- `patronictl` - Patroni
- `etcdctl` - etcd
- `redis-cli` - Redis
- `clickhouse-client` - ClickHouse
- `rabbitmqctl` - RabbitMQ
- `mongosh` - MongoDB
- `dragonfly` - DragonflyDB
**Оркестрация:**
- `kubectl` - Kubernetes
- `kafka-topics` - Kafka
- `rpk` - Redpanda
- `nats-server` - NATS
- `zkCli` - Zookeeper
**Мониторинг:**
- `grafana-server` - Grafana
- `prometheus` - Prometheus
- `loki` - Loki
- `victoria-metrics` - VictoriaMetrics
- `influxd` - InfluxDB
**Другие:**
- `named` - BIND9
- `minio` - MinIO
- `jenkins` - Jenkins
- `keycloak` - Keycloak
- `neo4j` - Neo4j
- `sentry` - Sentry
- `superset` - Apache Superset
## Примеры использования
@ -394,8 +274,6 @@ 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"
# Проверка портов
@ -410,43 +288,6 @@ patronictl show-config
psql -t -c "SELECT client_addr, state FROM pg_stat_replication;"
```
### Обнаружение etcd кластера
```bash
# Проверка процессов
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 кластера
```bash
# Проверка процессов
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 кластера
```bash
# Проверка процессов
@ -464,22 +305,22 @@ redis-cli cluster nodes
redis-cli cluster info
```
### Обнаружение RabbitMQ кластера
### Обнаружение ClickHouse кластера
```bash
# Проверка процессов
pgrep -f rabbitmq-server
pgrep -f clickhouse-server
# Проверка Docker-контейнеров
docker ps --filter "name=rabbitmq"
docker ps --filter "ancestor=rabbitmq"
docker ps --filter "name=clickhouse"
docker ps --filter "ancestor=clickhouse/clickhouse-server"
# Проверка портов
ss -tln sport = :5672
ss -tln sport = :15672
ss -tln sport = :8123
ss -tln sport = :9000
# Информация о кластере
rabbitmqctl cluster_status
rabbitmqctl list_nodes
clickhouse-client --query "SELECT host_name FROM system.clusters"
clickhouse-client --query "SELECT * FROM system.clusters"
```
### Обнаружение Kafka кластера
@ -516,113 +357,106 @@ mongosh --eval "rs.status()"
mongosh --eval "rs.status().members.map(m => m.name)"
```
### Обнаружение Elasticsearch кластера
## Развертывание
### Через Ansible
```bash
# Проверка процессов
pgrep -f elasticsearch
# Развертывание на VM/LXC хостах
make deploy-service
# Проверка портов
ss -tln sport = :9200
ss -tln sport = :9300
# Развертывание на Proxmox узлах
make deploy
# Информация о кластере
curl -s http://localhost:9200/_cluster/state/nodes
curl -s http://localhost:9200/_cluster/health
# Обновление сервиса
make update-service
```
### Обнаружение MinIO кластера
### Прямое выполнение
```bash
# Проверка процессов
pgrep -f minio
# Сборка коллектора
make collectors-linux
# Проверка портов
ss -tln sport = :9000
ss -tln sport = :9001
# Информация о кластере
mc admin info local
mc admin heal local
# Выполнение
./bin/agent/collectors/proxvmservices
```
### Обнаружение Grafana
## Мониторинг и логирование
### Логирование
Коллектор ведет подробное логирование:
- Обнаруженные сервисы
- Ошибки подключения
- Таймауты команд
- Информация о кластерах
### Метрики производительности
- Время выполнения проверок
- Количество обнаруженных сервисов
- Статистика ошибок
- Использование ресурсов
## Устранение неполадок
### Частые проблемы
1. **Сервис не обнаружен**
- Проверьте, что процесс запущен
- Убедитесь, что порты открыты
- Проверьте Docker-контейнеры
2. **Ошибки подключения к кластеру**
- Проверьте сетевую связность
- Убедитесь в правильности конфигурации
- Проверьте права доступа
3. **Таймауты команд**
- Увеличьте `PROXVM_SERVICES_TIMEOUT`
- Проверьте производительность системы
- Уменьшите `PROXVM_SERVICES_PARALLEL`
### Отладка
```bash
# Проверка процессов
pgrep -f grafana
# Включение подробного логирования
export PROXVM_SERVICES_DEBUG=1
# Проверка портов
ss -tln sport = :3000
# Проверка системных зависимостей
which pgrep ss curl docker
# Версия
grafana-server --version
# Тестирование отдельных команд
pgrep -f postgres
docker ps --filter "name=postgres"
ss -tln sport = :5432
```
### Обнаружение Prometheus
```bash
# Проверка процессов
pgrep -f prometheus
## Интеграция
# Проверка портов
ss -tln sport = :9090
### С Proxmox
# Версия
prometheus --version
```
Коллектор интегрируется с другими коллекторами Proxmox:
- `proxcluster` - информация о кластере
- `proxnode` - информация об узле
- `proxvms` - информация о VM/LXC
### Обнаружение Zookeeper кластера
```bash
# Проверка процессов
pgrep -f zookeeper
### С системами мониторинга
# Проверка портов
ss -tln sport = :2181
ss -tln sport = :2888
ss -tln sport = :3888
- **Prometheus**: экспорт метрик
- **Grafana**: визуализация данных
- **ELK Stack**: централизованное логирование
# Информация о кластере
zkCli ls /
zkCli version
```
## Лицензия
## Ограничения
1. **Версии сервисов**: некоторые команды могут не работать на старых версиях
2. **Конфигурационные файлы**: парсинг ограничен стандартными форматами
3. **Права доступа**: требует sudo для доступа к некоторым командам
4. **Сетевые соединения**: не анализирует содержимое трафика
5. **Кластерное состояние**: может не отражать реальное состояние при проблемах с сетью
6. **HTTP API**: требует доступности HTTP API для получения версий и информации о кластерах
7. **Команды управления**: не все команды управления кластерами могут быть установлены
8. **Fallback поведение**: при недоступности команд управления возвращается localhost
9. **Производительность**: большое количество сервисов может увеличить время выполнения
10. **Сетевые зависимости**: некоторые сервисы требуют сетевого доступа для полной диагностики
## Результаты тестирования
### 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
Проект распространяется под лицензией MIT.
## Автор
**Сергей Антропов**
Сайт: https://devops.org.ru
## Лицензия
---
Проект распространяется под лицензией MIT.
*Документация обновлена: $(date)*