- Создан новый коллектор proxvmservices для обнаружения и мониторинга сервисов - Поддержка PostgreSQL с Patroni (кластер, репликация, конфигурация) - Поддержка etcd кластера (члены, лидер, здоровье) - Поддержка остальных сервисов: Redis, ClickHouse, RabbitMQ, Kafka, MongoDB, Kubernetes - Добавлен в Makefile и конфигурацию агента - Обновлены групповые переменные Ansible для включения в группу proxvms - Исправлены проблемы с шаблонами Ansible (конфигурация и systemd unit) - Создана подробная документация - Протестирован на удаленных серверах через Ansible Автор: Сергей Антропов Сайт: https://devops.org.ru
234 lines
8.5 KiB
Markdown
234 lines
8.5 KiB
Markdown
# Коллектор proxvmservices
|
||
|
||
## Описание
|
||
|
||
Коллектор `proxvmservices` предназначен для обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он автоматически определяет запущенные сервисы, их конфигурацию, состояние кластеров и соединения между сервисами.
|
||
|
||
## Поддерживаемые сервисы
|
||
|
||
### Кластерные сервисы
|
||
- **PostgreSQL** с Patroni - обнаружение кластера, репликации, конфигурации
|
||
- **etcd** - обнаружение кластера, членов, лидера, здоровья
|
||
- **Kubernetes** - обнаружение кластера, версии, портов
|
||
|
||
### Автономные сервисы
|
||
- **Redis** - версия, порты, конфигурация
|
||
- **ClickHouse** - версия, порты, конфигурация
|
||
- **RabbitMQ** - версия, порты, конфигурация
|
||
- **Kafka** - порты, конфигурация
|
||
- **MongoDB** - версия, порты, конфигурация
|
||
|
||
## Методы обнаружения
|
||
|
||
### PostgreSQL с Patroni
|
||
1. **Процессы**: проверка `postgres` и `patroni`
|
||
2. **Порты**: 5432 (PostgreSQL), 8008 (Patroni REST API)
|
||
3. **Версия**: через `psql --version` или `postgres --version`
|
||
4. **Конфигурация**: парсинг файлов `/etc/patroni/patroni.yml`, `/etc/patroni.yml`
|
||
5. **Кластер**: команда `patronictl list` для получения информации о членах кластера
|
||
6. **Репликация**: SQL-запрос `SELECT client_addr, state FROM pg_stat_replication`
|
||
|
||
### etcd
|
||
1. **Процессы**: проверка `etcd`
|
||
2. **Порты**: 2379 (client), 2380 (peer)
|
||
3. **Версия**: через `etcdctl version`
|
||
4. **Конфигурация**: парсинг файлов `/etc/etcd/etcd.conf`, systemd unit
|
||
5. **Кластер**: команды `etcdctl member list`, `etcdctl endpoint status`, `etcdctl endpoint health`
|
||
|
||
### Kubernetes
|
||
1. **Процессы**: проверка `kubelet`, `kube-apiserver`
|
||
2. **Порты**: 6443 (API server), 10250 (kubelet)
|
||
3. **Версия**: через `kubectl version --client --short`
|
||
|
||
### Остальные сервисы
|
||
- **Redis**: процесс `redis-server`, порт 6379, версия через `redis-cli --version`
|
||
- **ClickHouse**: процесс `clickhouse-server`, порты 8123, 9000, версия через `clickhouse-client --version`
|
||
- **RabbitMQ**: процесс `rabbitmq-server`, порты 5672, 15672, версия через `rabbitmqctl version`
|
||
- **Kafka**: процесс `kafka.Kafka`, порт 9092
|
||
- **MongoDB**: процесс `mongod`, порт 27017, версия через `mongosh --version`
|
||
|
||
## Структура выходных данных
|
||
|
||
```json
|
||
{
|
||
"collector_name": "proxvmservices",
|
||
"execution_time_ms": 280,
|
||
"execution_time_seconds": 0.280283673,
|
||
"machine_uid": "1581318a2bb03141",
|
||
"services": [
|
||
{
|
||
"name": "postgresql",
|
||
"type": "cluster",
|
||
"status": "running",
|
||
"version": "14.9",
|
||
"ports": [5432, 8008],
|
||
"config": {
|
||
"config_file": "/etc/patroni/patroni.yml",
|
||
"scope": "postgresql_cluster",
|
||
"namespace": "/patroni"
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"connections": [
|
||
{
|
||
"type": "replication",
|
||
"target": "10.14.246.76",
|
||
"status": "streaming"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## Поля данных
|
||
|
||
### ServiceInfo
|
||
- `name` - имя сервиса (postgresql, etcd, redis, etc.)
|
||
- `type` - тип сервиса ("standalone" или "cluster")
|
||
- `status` - статус сервиса ("running", "stopped", "unknown")
|
||
- `version` - версия сервиса
|
||
- `ports` - массив портов, на которых слушает сервис
|
||
- `config` - конфигурация сервиса (файлы, параметры)
|
||
- `cluster` - информация о кластере (для кластерных сервисов)
|
||
- `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` - статус соединения
|
||
|
||
## Конфигурация
|
||
|
||
```yaml
|
||
proxvmservices:
|
||
enabled: true
|
||
type: exec
|
||
key: proxvmservices
|
||
interval: "300s"
|
||
timeout: "60s"
|
||
exec: "./collectors/proxvmservices"
|
||
platforms: [linux]
|
||
```
|
||
|
||
## Требования
|
||
|
||
### Системные зависимости
|
||
- `pgrep` - для проверки процессов
|
||
- `ss` - для проверки портов
|
||
- `psql` или `postgres` - для PostgreSQL
|
||
- `patronictl` - для Patroni
|
||
- `etcdctl` - для etcd
|
||
- `kubectl` - для Kubernetes
|
||
- `redis-cli` - для Redis
|
||
- `clickhouse-client` - для ClickHouse
|
||
- `rabbitmqctl` - для RabbitMQ
|
||
- `mongosh` - для MongoDB
|
||
|
||
### Права доступа
|
||
- Чтение конфигурационных файлов сервисов
|
||
- Выполнение команд управления сервисами
|
||
- Доступ к портам для проверки состояния
|
||
|
||
## Примеры использования
|
||
|
||
### Обнаружение PostgreSQL кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f postgres
|
||
pgrep -f patroni
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :5432
|
||
ss -tln sport = :8008
|
||
|
||
# Информация о кластере
|
||
patronictl list
|
||
patronictl show-config
|
||
|
||
# Репликация
|
||
psql -t -c "SELECT client_addr, state FROM pg_stat_replication;"
|
||
```
|
||
|
||
### Обнаружение etcd кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f etcd
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :2379
|
||
ss -tln sport = :2380
|
||
|
||
# Информация о кластере
|
||
etcdctl member list
|
||
etcdctl endpoint status --write-out=json
|
||
etcdctl endpoint health
|
||
```
|
||
|
||
## Ограничения
|
||
|
||
1. **Версии сервисов**: некоторые команды могут не работать на старых версиях
|
||
2. **Конфигурационные файлы**: парсинг ограничен стандартными форматами
|
||
3. **Права доступа**: требует sudo для доступа к некоторым командам
|
||
4. **Сетевые соединения**: не анализирует содержимое трафика
|
||
5. **Кластерное состояние**: может не отражать реальное состояние при проблемах с сетью
|
||
|
||
## Автор
|
||
|
||
**Сергей Антропов**
|
||
Сайт: https://devops.org.ru
|
||
|
||
## Лицензия
|
||
|
||
Проект распространяется под лицензией MIT.
|