**Новая структура документации:** **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
462 lines
14 KiB
Markdown
462 lines
14 KiB
Markdown
# Коллектор proxvmservices
|
||
|
||
## Описание
|
||
|
||
Коллектор `proxvmservices` предназначен для автоматического обнаружения и мониторинга сервисов на виртуальных машинах и контейнерах Proxmox. Он обеспечивает комплексный анализ инфраструктуры, включая обнаружение сервисов, их конфигурацию, состояние кластеров и соединения между компонентами.
|
||
|
||
### Ключевые возможности
|
||
|
||
- **Автоматическое обнаружение** 26+ популярных сервисов
|
||
- **Поддержка кластерных и автономных** развертываний
|
||
- **Множественные способы развертывания**: нативные процессы, Docker-контейнеры, Docker Compose
|
||
- **Детальная информация о кластерах**: узлы, состояние, конфигурация
|
||
- **Интеграция с Proxmox**: получение machine_uid для корреляции данных
|
||
- **Гибкая конфигурация**: настройка через Ansible группы
|
||
|
||
## Поддерживаемые сервисы
|
||
|
||
### Кластерные сервисы (18)
|
||
|
||
| Сервис | Описание | Порты | Кластерная поддержка |
|
||
|--------|----------|-------|---------------------|
|
||
| **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. Гибридные развертывания
|
||
- Комбинация нативных и контейнерных сервисов
|
||
- Микросервисная архитектура
|
||
|
||
## Методы обнаружения
|
||
|
||
### Алгоритм обнаружения
|
||
|
||
Для каждого сервиса коллектор выполняет проверки в следующем порядке:
|
||
|
||
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. **Кластер**: команды для получения информации о кластере
|
||
|
||
### Примеры обнаружения
|
||
|
||
#### PostgreSQL с Patroni
|
||
```bash
|
||
# Процессы
|
||
pgrep -f postgres
|
||
pgrep -f patroni
|
||
|
||
# Docker
|
||
docker ps --filter "name=postgres"
|
||
docker ps --filter "ancestor=bitnami/postgresql"
|
||
|
||
# Порты
|
||
ss -tln sport = :5432
|
||
ss -tln sport = :8008
|
||
|
||
# Кластер
|
||
patronictl list
|
||
patronictl show-config
|
||
```
|
||
|
||
#### Redis кластер
|
||
```bash
|
||
# Процессы
|
||
pgrep -f redis-server
|
||
|
||
# Docker
|
||
docker ps --filter "name=redis"
|
||
docker ps --filter "ancestor=redis"
|
||
|
||
# Порты
|
||
ss -tln sport = :6379
|
||
|
||
# Кластер
|
||
redis-cli cluster nodes
|
||
redis-cli cluster info
|
||
```
|
||
|
||
#### Kubernetes
|
||
```bash
|
||
# Процессы
|
||
pgrep -f kubelet
|
||
pgrep -f kube-apiserver
|
||
|
||
# Docker
|
||
docker ps --filter "name=kubelet"
|
||
docker ps --filter "ancestor=k8s.gcr.io/kubelet"
|
||
|
||
# Порты
|
||
ss -tln sport = :6443
|
||
ss -tln sport = :10250
|
||
|
||
# Кластер
|
||
kubectl get nodes
|
||
kubectl cluster-info
|
||
```
|
||
|
||
## Структура выходных данных
|
||
|
||
### Основная структура
|
||
|
||
```json
|
||
{
|
||
"collector_name": "proxvmservices",
|
||
"machine_uid": "sha256_hash_of_machine_id",
|
||
"services": [
|
||
{
|
||
"name": "postgresql",
|
||
"type": "cluster",
|
||
"status": "running",
|
||
"version": "15.4",
|
||
"ports": [5432, 8008],
|
||
"config": {
|
||
"description": "PostgreSQL cluster with Patroni",
|
||
"patroni_config": {...},
|
||
"replication": {...}
|
||
},
|
||
"cluster_nodes": [
|
||
"10.14.253.20",
|
||
"10.14.253.21",
|
||
"10.14.253.22"
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### Поля сервиса
|
||
|
||
| Поле | Тип | Описание |
|
||
|------|-----|----------|
|
||
| `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
|
||
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` - 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
|
||
|
||
## Примеры использования
|
||
|
||
### Обнаружение PostgreSQL кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f postgres
|
||
pgrep -f patroni
|
||
|
||
# Проверка Docker-контейнеров
|
||
docker ps --filter "name=postgres"
|
||
docker ps --filter "ancestor=bitnami/postgresql"
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :5432
|
||
ss -tln sport = :8008
|
||
|
||
# Информация о кластере
|
||
patronictl list
|
||
patronictl show-config
|
||
|
||
# Репликация
|
||
psql -t -c "SELECT client_addr, state FROM pg_stat_replication;"
|
||
```
|
||
|
||
### Обнаружение Redis кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f redis-server
|
||
|
||
# Проверка Docker-контейнеров
|
||
docker ps --filter "name=redis"
|
||
docker ps --filter "ancestor=redis"
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :6379
|
||
|
||
# Информация о кластере
|
||
redis-cli cluster nodes
|
||
redis-cli cluster info
|
||
```
|
||
|
||
### Обнаружение 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"
|
||
```
|
||
|
||
### Обнаружение Kafka кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f kafka.Kafka
|
||
|
||
# Проверка Docker-контейнеров
|
||
docker ps --filter "name=kafka"
|
||
docker ps --filter "ancestor=confluentinc/cp-kafka"
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :9092
|
||
|
||
# Информация о кластере
|
||
kafka-topics --bootstrap-server localhost:9092 --list
|
||
kafka-broker-api-versions --bootstrap-server localhost:9092
|
||
```
|
||
|
||
### Обнаружение MongoDB кластера
|
||
```bash
|
||
# Проверка процессов
|
||
pgrep -f mongod
|
||
|
||
# Проверка Docker-контейнеров
|
||
docker ps --filter "name=mongo"
|
||
docker ps --filter "ancestor=mongo"
|
||
|
||
# Проверка портов
|
||
ss -tln sport = :27017
|
||
|
||
# Информация о кластере
|
||
mongosh --eval "rs.status()"
|
||
mongosh --eval "rs.status().members.map(m => m.name)"
|
||
```
|
||
|
||
## Развертывание
|
||
|
||
### Через Ansible
|
||
|
||
```bash
|
||
# Развертывание на VM/LXC хостах
|
||
make deploy-service
|
||
|
||
# Развертывание на Proxmox узлах
|
||
make deploy
|
||
|
||
# Обновление сервиса
|
||
make update-service
|
||
```
|
||
|
||
### Прямое выполнение
|
||
|
||
```bash
|
||
# Сборка коллектора
|
||
make collectors-linux
|
||
|
||
# Выполнение
|
||
./bin/agent/collectors/proxvmservices
|
||
```
|
||
|
||
## Мониторинг и логирование
|
||
|
||
### Логирование
|
||
|
||
Коллектор ведет подробное логирование:
|
||
- Обнаруженные сервисы
|
||
- Ошибки подключения
|
||
- Таймауты команд
|
||
- Информация о кластерах
|
||
|
||
### Метрики производительности
|
||
|
||
- Время выполнения проверок
|
||
- Количество обнаруженных сервисов
|
||
- Статистика ошибок
|
||
- Использование ресурсов
|
||
|
||
## Устранение неполадок
|
||
|
||
### Частые проблемы
|
||
|
||
1. **Сервис не обнаружен**
|
||
- Проверьте, что процесс запущен
|
||
- Убедитесь, что порты открыты
|
||
- Проверьте Docker-контейнеры
|
||
|
||
2. **Ошибки подключения к кластеру**
|
||
- Проверьте сетевую связность
|
||
- Убедитесь в правильности конфигурации
|
||
- Проверьте права доступа
|
||
|
||
3. **Таймауты команд**
|
||
- Увеличьте `PROXVM_SERVICES_TIMEOUT`
|
||
- Проверьте производительность системы
|
||
- Уменьшите `PROXVM_SERVICES_PARALLEL`
|
||
|
||
### Отладка
|
||
|
||
```bash
|
||
# Включение подробного логирования
|
||
export PROXVM_SERVICES_DEBUG=1
|
||
|
||
# Проверка системных зависимостей
|
||
which pgrep ss curl docker
|
||
|
||
# Тестирование отдельных команд
|
||
pgrep -f postgres
|
||
docker ps --filter "name=postgres"
|
||
ss -tln sport = :5432
|
||
```
|
||
|
||
## Интеграция
|
||
|
||
### С Proxmox
|
||
|
||
Коллектор интегрируется с другими коллекторами Proxmox:
|
||
- `proxcluster` - информация о кластере
|
||
- `proxnode` - информация об узле
|
||
- `proxvms` - информация о VM/LXC
|
||
|
||
### С системами мониторинга
|
||
|
||
- **Prometheus**: экспорт метрик
|
||
- **Grafana**: визуализация данных
|
||
- **ELK Stack**: централизованное логирование
|
||
|
||
## Лицензия
|
||
|
||
Проект распространяется под лицензией MIT.
|
||
|
||
## Автор
|
||
|
||
**Сергей Антропов**
|
||
Сайт: https://devops.org.ru
|
||
|
||
---
|
||
|
||
*Документация обновлена: $(date)* |