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