SensusInfra/README.md
Sergey Antropoff 800fcde880 feat: Добавлена команда make ps и улучшен health-check
- Добавлена команда make ps для просмотра статуса контейнеров Docker
- Улучшен health-check с паузами для ClickHouse сервисов:
  - 30 секунд ожидания перед проверкой ClickHouse реплик
  - 10 секунд ожидания перед проверкой Load Balancer
- Исправлен health-check: заменен localhost на 127.0.0.1 для корректной работы внутри контейнеров
- Обновлена документация с информацией о новой команде ps
- Добавлены примечания о паузах в health-check

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-10 20:00:22 +03:00

20 KiB
Raw Blame History

SensusInfra — Инфраструктура для проекта Sensus

Автор: Сергей Антропов
Сайт: https://devops.org.ru

Описание

SensusInfra — это полная инфраструктура для работы с системой мониторинга Sensus, включающая:

  • Kafka — брокер сообщений для передачи метрик от агентов к воркерам
  • KafkaUI — веб-интерфейс для мониторинга Kafka
  • PostgreSQL — база данных для хранения метаданных агентов и конфигураций
  • ClickHouse — аналитическая база данных для хранения и анализа метрик (кластер с 2 репликами)
  • Nginx Load Balancer — балансировщик нагрузки для ClickHouse (HTTP и TCP)
  • ZooKeeper — координатор для ClickHouse репликации

Архитектура

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   SensusAgent   │───▶│      Kafka      │───▶│  SensusWorker   │
│   (сбор метрик) │    │     (брокер)    │    │  (обработка)    │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                                │                        │
                                ▼                        ▼
                       ┌─────────────────┐    ┌─────────────────┐
                       │    KafkaUI      │    │   PostgreSQL    │
                       │    (web ui)     │    │  (метаданные)   │
                       └─────────────────┘    └─────────────────┘
                                                        │
                                                        ▼
                                               ┌─────────────────┐
                                               │   ClickHouse    │
                                               │ Load Balancer   │
                                               │    (Nginx)      │
                                               │  HTTP: 8125     │
                                               │  TCP: 9002      │
                                               └─────────────────┘
                                                        │
                                                        ▼
                                               ┌─────────────────┐
                                               │   ClickHouse    │
                                               │   (аналитика)   │
                                               │   (2 реплики)   │
                                               │  Реплика 1: 8123│
                                               │  Реплика 2: 8124│
                                               └─────────────────┘
                                                        │
                                                        ▼
                                               ┌─────────────────┐
                                               │   ZooKeeper     │
                                               │ (координатор)   │
                                               │    Port: 2181   │
                                               └─────────────────┘

Быстрый старт

1. Подготовка окружения

# Клонируйте репозиторий и перейдите в директорию
cd SensusInfra

# Установите Docker и Docker Compose (если не установлены)
make docker-check                    # Проверить текущие версии
make docker-install                  # Установить Docker
make docker-compose-install          # Установить Docker Compose

# Файл .env будет создан автоматически при выполнении make setup
# Или создайте вручную:
cp env.example .env

# Отредактируйте .env с вашими значениями (опционально)
nano .env

2. Запуск инфраструктуры

# Первоначальная настройка (создание .env, генерация SSL, запуск сервисов)
make setup

# Или пошагово:
make ssl-generate      # Генерация SSL сертификатов
make up                # Запуск инфраструктуры
make health-check      # Проверка здоровья сервисов

3. Управление инфраструктурой

make up                # Запуск инфраструктуры
make down              # Остановка инфраструктуры
make restart           # Перезапуск инфраструктуры
make ps                # Статус контейнеров Docker
make status            # Статус сервисов
make logs              # Логи всех сервисов

Управление через Makefile

Основные команды

Команда Описание
make setup Первоначальная настройка инфраструктуры
make up Запустить инфраструктуру
make down Остановить инфраструктуру
make restart Перезапустить инфраструктуру
make ps Показать статус контейнеров Docker
make status Показать статус всех сервисов
make logs Показать логи всех сервисов
make health-check Проверить здоровье сервисов

Установка и обновление Docker

Команда Описание
make docker-install Установить Docker через get.docker.com
make docker-update Обновить Docker до последней версии
make docker-compose-install Установить Docker Compose
make docker-compose-update Обновить Docker Compose до последней версии
make docker-check Проверить версии Docker и Docker Compose

Работа с базами данных

Команда Описание
make postgres-cli Подключиться к PostgreSQL
make clickhouse-cli Подключиться к ClickHouse (реплика 1)
make clickhouse-cli-2 Подключиться к ClickHouse (реплика 2)
make clickhouse-cli-lb Подключиться к ClickHouse через балансировщик
make kafka-topics Показать список топиков Kafka
make kafka-ui Открыть Kafka UI в браузере

SSL сертификаты

Команда Описание
make ssl-generate Генерация SSL сертификатов для Kafka
make ssl-clean Очистка SSL сертификатов
make ssl-info Информация о SSL сертификатах

Установка Docker

Автоматическая установка

Проект включает команды для автоматической установки и обновления Docker:

# Проверить текущие версии
make docker-check

# Установить Docker (если не установлен)
make docker-install

# Установить Docker Compose (если не установлен)
make docker-compose-install

# Обновить Docker до последней версии
make docker-update

# Обновить Docker Compose до последней версии
make docker-compose-update

Ручная установка

Если автоматическая установка не работает, используйте официальные инструкции:

Docker

# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# CentOS/RHEL
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker

Docker Compose

# Скачать последнюю версию
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Проверка установки

# Проверить версии
make docker-check

# Или вручную
docker --version
docker compose version

Обслуживание

Команда Описание
make clean Очистить все контейнеры и volumes
make clean-volumes Очистить только volumes (данные)
make backup Создать резервную копию данных
make restore BACKUP_FILE=имя_файла Восстановить данные из резервной копии

Конфигурация

Переменные окружения

Все настройки хранятся в файле .env. Основные переменные:

Kafka

  • KAFKA_BROKER_ID — ID брокера Kafka (по умолчанию 1)
  • KAFKA_EXTERNAL_PORT — внешний порт Kafka (по умолчанию 9092)
  • KAFKA_SSL_PORT — SSL порт Kafka (по умолчанию 9093)
  • KAFKA_TOPIC — топик для метрик (по умолчанию sensus.metrics)
  • KAFKA_UI_PORT — порт Kafka UI (по умолчанию 8080)
  • KAFKA_SSL_KEYSTORE_PASSWORD — пароль keystore (по умолчанию kafka123)
  • KAFKA_SSL_KEY_PASSWORD — пароль ключа (по умолчанию kafka123)
  • KAFKA_SSL_TRUSTSTORE_PASSWORD — пароль truststore (по умолчанию kafka123)

Kafka UI авторизация

  • KAFKA_UI_AUTH_TYPE — тип авторизации (по умолчанию LOGIN_FORM)
  • KAFKA_UI_USERNAME — логин для входа (по умолчанию admin)
  • KAFKA_UI_PASSWORD — пароль для входа (по умолчанию admin)
  • KAFKA_UI_USER_ROLES — роли пользователя (по умолчанию ADMIN)

PostgreSQL

  • POSTGRES_DB — имя базы данных (по умолчанию sensus)
  • POSTGRES_USER — пользователь (по умолчанию sensus)
  • POSTGRES_PASSWORD — пароль (обязательно изменить!)
  • POSTGRES_PORT — порт (по умолчанию 5432)
  • POSTGRES_SSL_MODE — режим SSL (по умолчанию require)
  • POSTGRES_SSL_CERT_FILE — путь к сертификату сервера
  • POSTGRES_SSL_KEY_FILE — путь к приватному ключу сервера
  • POSTGRES_SSL_CA_FILE — путь к сертификату CA

ClickHouse

  • CLICKHOUSE_DB — имя базы данных (по умолчанию sensus_metrics)
  • CLICKHOUSE_USER — пользователь (по умолчанию sensus)
  • CLICKHOUSE_PASSWORD — пароль (обязательно изменить!)
  • CLICKHOUSE_SECURE — безопасный режим (по умолчанию true)
  • CLICKHOUSE_1_PORT — порт первой реплики (по умолчанию 8123)
  • CLICKHOUSE_1_HTTP_PORT — HTTP порт первой реплики (по умолчанию 9000)
  • CLICKHOUSE_2_PORT — порт второй реплики (по умолчанию 8124)
  • CLICKHOUSE_2_HTTP_PORT — HTTP порт второй реплики (по умолчанию 9001)

ClickHouse Load Balancer

  • CLICKHOUSE_LB_HTTP_PORT — HTTP порт балансировщика (по умолчанию 8125)
  • CLICKHOUSE_LB_TCP_PORT — TCP порт балансировщика (по умолчанию 9002)

Структура базы данных

PostgreSQL

Схема agents — метаданные агентов:

  • agents — зарегистрированные агенты
  • collectors — коллекторы агентов

Схема configs — конфигурации:

  • agent_configs — конфигурации агентов
  • config_history — история изменений

Схема metrics — метрики:

  • raw_metrics — сырые метрики
  • processed_metrics — обработанные метрики

Схема system — системные таблицы:

  • system_state — состояние системы
  • system_logs — логи системы

ClickHouse

База sensus_metrics (реплицируется между узлами):

  • metrics_raw — сырые метрики (ReplicatedMergeTree)
  • metrics_processed — обработанные метрики (ReplicatedMergeTree)
  • agents_info — информация об агентах (ReplicatedReplacingMergeTree)

Кластер sensus_cluster:

  • Шард 1 с двумя репликами:
    • clickhouse-1 (порт 8123/9000)
    • clickhouse-2 (порт 8124/9001)
  • ZooKeeper для координации репликации
  • Автоматическая репликация данных между узлами
  • Балансировщик нагрузки для распределения запросов

База system:

  • system_logs — логи системы
  • system_state — состояние системы

Мониторинг

Kafka UI

  • URL: http://localhost:8080
  • Логин: admin
  • Пароль: admin
  • Мониторинг топиков, консьюмеров, партиций
  • Просмотр сообщений в реальном времени
  • Авторизация через форму входа

ClickHouse Load Balancer

Health Check

make health-check

Проверяет доступность всех сервисов:

  • ZooKeeper
  • Kafka
  • PostgreSQL
  • ClickHouse (обе реплики) - с паузой 30 секунд для полной инициализации
  • ClickHouse Load Balancer - с паузой 10 секунд

Примечание: Команда включает паузы для ClickHouse сервисов, так как они требуют времени для полной инициализации после запуска.

Логи

# Все сервисы
make logs

# Конкретный сервис
make infra-logs
make agent-logs
make worker-logs

Резервное копирование

Создание резервной копии

make backup

Создает резервные копии:

  • PostgreSQL: ./backups/postgres_YYYYMMDD_HHMMSS.sql
  • ClickHouse: backup_YYYYMMDD_HHMMSS

Восстановление

make restore BACKUP_FILE=postgres_20241201_120000.sql

Безопасность

SSL/TLS

Инфраструктура поддерживает SSL/TLS для Kafka и PostgreSQL:

Kafka SSL

  • Автоматическая генерация SSL сертификатов при make setup
  • Поддержка SSL на порту 9093
  • Клиентские сертификаты для аутентификации
  • Truststore для проверки сертификатов

PostgreSQL SSL

  • Автоматическая генерация SSL сертификатов при make setup
  • Режим SSL — require (обязательное шифрование)
  • Самоподписанные сертификаты для разработки
  • Поддержка SSL на стандартном порту 5432

Рекомендации

  1. Обязательно измените пароли в файле .env
  2. Не коммитьте файл .env в git
  3. Используйте сильные пароли для production
  4. Настройте firewall для ограничения доступа к портам
  5. Регулярно обновляйте образы Docker
  6. Используйте SSL для production окружения
  7. Регулярно обновляйте SSL сертификаты
  8. Измените пароль Kafka UI для production (по умолчанию admin/admin)

Порты

  • 9092 — Kafka (внешний, PLAINTEXT)
  • 9093 — Kafka (SSL)
  • 8080 — Kafka UI
  • 5432 — PostgreSQL
  • 2181 — ZooKeeper
  • 8123 — ClickHouse (реплика 1, HTTP)
  • 9000 — ClickHouse (реплика 1, TCP)
  • 8124 — ClickHouse (реплика 2, HTTP)
  • 9001 — ClickHouse (реплика 2, TCP)
  • 8125 — ClickHouse Load Balancer (HTTP)
  • 9002 — ClickHouse Load Balancer (TCP)

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

Проблемы с запуском

# Проверить статус сервисов
make status

# Проверить логи
make logs

# Проверить здоровье
make health-check

# Перезапустить инфраструктуру
make restart

Проблемы с сетью

# Проверить Docker сеть
docker network ls
docker network inspect sensus-network

Проблемы с данными

# Очистить volumes
make clean-volumes

# Пересоздать инфраструктуру
make clean
make setup

Проблемы с производительностью

  1. Увеличьте лимиты памяти в .env
  2. Настройте партиционирование в ClickHouse
  3. Оптимизируйте индексы в PostgreSQL

Разработка

Добавление новых сервисов

  1. Добавьте сервис в docker-compose.yml
  2. Добавьте переменные в env.example
  3. Добавьте команды в Makefile
  4. Обновите документацию

Тестирование

# Запуск тестовой среды
make setup

# Проверка работы инфраструктуры
make status
make health-check
make logs

# Проверка SSL сертификатов
make ssl-info

# Проверка баз данных
make postgres-cli
make clickhouse-cli

Лицензия

Код сопровождается подробными комментариями на русском языке. Автор — Сергей Антропов (сайт: https://devops.org.ru).

Поддержка

При возникновении проблем:

  1. Проверьте логи: make logs
  2. Проверьте здоровье: make health-check
  3. Обратитесь к документации проектов SensusAgent и SensusWorker
  4. Создайте issue в репозитории