SensusAgent/docs/collectors/proxvmservices.md
Sergey Antropoff e67f83d461 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
2025-09-15 18:10:46 +03:00

462 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Коллектор 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)*