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