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

14 KiB
Raw Permalink Blame History

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

# Процессы
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 в 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 кластера

# Проверка процессов
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

Мониторинг и логирование

Логирование

Коллектор ведет подробное логирование:

  • Обнаруженные сервисы
  • Ошибки подключения
  • Таймауты команд
  • Информация о кластерах

Метрики производительности

  • Время выполнения проверок
  • Количество обнаруженных сервисов
  • Статистика ошибок
  • Использование ресурсов

Устранение неполадок

Частые проблемы

  1. Сервис не обнаружен

    • Проверьте, что процесс запущен
    • Убедитесь, что порты открыты
    • Проверьте Docker-контейнеры
  2. Ошибки подключения к кластеру

    • Проверьте сетевую связность
    • Убедитесь в правильности конфигурации
    • Проверьте права доступа
  3. Таймауты команд

    • Увеличьте 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)