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:
parent
67db7765c5
commit
e67f83d461
@ -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)*
|
Loading…
x
Reference in New Issue
Block a user