**Новая структура документации:** **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
14 KiB
14 KiB
Коллектор 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. Гибридные развертывания
- Комбинация нативных и контейнерных сервисов
- Микросервисная архитектура
Методы обнаружения
Алгоритм обнаружения
Для каждого сервиса коллектор выполняет проверки в следующем порядке:
- Процессы:
pgrep -f process_name
- Docker контейнеры:
docker ps --filter name=container_name
- Docker образы:
docker ps --filter ancestor=image_name
- Порты:
ss -tln sport = :port
- Версия: специфичные команды для каждого сервиса
- Кластер: команды для получения информации о кластере
Примеры обнаружения
PostgreSQL с Patroni
# Процессы
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 кластер
# Процессы
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
# Процессы
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
Структура выходных данных
Основная структура
{
"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 хосты)
enabled_collectors:
- proxvmsystem
- uptime
proxmox (Proxmox узлы)
enabled_collectors:
- proxcluster
- proxnode
- proxvms
- uptime
standalone (автономные серверы)
enabled_collectors:
- system
- hba
- sensors
- uptime
Переменные окружения
Переменная | Описание | По умолчанию |
---|---|---|
PROXVM_SERVICES_TIMEOUT |
Таймаут для команд | 30s |
PROXVM_SERVICES_PARALLEL |
Количество параллельных проверок | 10 |
Требования
Системные зависимости
Основные инструменты
pgrep
- проверка процессовss
- проверка портовcurl
- HTTP API запросыgetent
- разрешение hostname в IPdocker
- проверка Docker-контейнеров
Специфичные для сервисов
Базы данных:
psql
- PostgreSQLpatronictl
- Patronietcdctl
- etcdredis-cli
- Redisclickhouse-client
- ClickHouserabbitmqctl
- RabbitMQmongosh
- MongoDBdragonfly
- DragonflyDB
Оркестрация:
kubectl
- Kuberneteskafka-topics
- Kafkarpk
- Redpandanats-server
- NATSzkCli
- Zookeeper
Мониторинг:
grafana-server
- Grafanaprometheus
- Prometheusloki
- Lokivictoria-metrics
- VictoriaMetricsinfluxd
- InfluxDB
Другие:
named
- BIND9minio
- MinIOjenkins
- Jenkinskeycloak
- Keycloakneo4j
- Neo4jsentry
- Sentrysuperset
- Apache Superset
Примеры использования
Обнаружение PostgreSQL кластера
# Проверка процессов
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 кластера
# Проверка процессов
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 кластера
# Проверка процессов
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 кластера
# Проверка процессов
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 кластера
# Проверка процессов
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
# Развертывание на VM/LXC хостах
make deploy-service
# Развертывание на Proxmox узлах
make deploy
# Обновление сервиса
make update-service
Прямое выполнение
# Сборка коллектора
make collectors-linux
# Выполнение
./bin/agent/collectors/proxvmservices
Мониторинг и логирование
Логирование
Коллектор ведет подробное логирование:
- Обнаруженные сервисы
- Ошибки подключения
- Таймауты команд
- Информация о кластерах
Метрики производительности
- Время выполнения проверок
- Количество обнаруженных сервисов
- Статистика ошибок
- Использование ресурсов
Устранение неполадок
Частые проблемы
-
Сервис не обнаружен
- Проверьте, что процесс запущен
- Убедитесь, что порты открыты
- Проверьте Docker-контейнеры
-
Ошибки подключения к кластеру
- Проверьте сетевую связность
- Убедитесь в правильности конфигурации
- Проверьте права доступа
-
Таймауты команд
- Увеличьте
PROXVM_SERVICES_TIMEOUT
- Проверьте производительность системы
- Уменьшите
PROXVM_SERVICES_PARALLEL
- Увеличьте
Отладка
# Включение подробного логирования
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)