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

470 lines
20 KiB
Markdown
Raw 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.

# 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. Подготовка окружения
```bash
# Клонируйте репозиторий и перейдите в директорию
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. Запуск инфраструктуры
```bash
# Первоначальная настройка (создание .env, генерация SSL, запуск сервисов)
make setup
# Или пошагово:
make ssl-generate # Генерация SSL сертификатов
make up # Запуск инфраструктуры
make health-check # Проверка здоровья сервисов
```
### 3. Управление инфраструктурой
```bash
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:
```bash
# Проверить текущие версии
make docker-check
# Установить Docker (если не установлен)
make docker-install
# Установить Docker Compose (если не установлен)
make docker-compose-install
# Обновить Docker до последней версии
make docker-update
# Обновить Docker Compose до последней версии
make docker-compose-update
```
### Ручная установка
Если автоматическая установка не работает, используйте официальные инструкции:
#### Docker
```bash
# 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
```bash
# Скачать последнюю версию
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
```
### Проверка установки
```bash
# Проверить версии
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
- **HTTP:** http://localhost:8125
- **TCP:** localhost:9002
- Балансировка нагрузки между репликами ClickHouse
- Health check endpoint: http://localhost:8125/health
- Статус endpoint: http://localhost:8125/status
### Health Check
```bash
make health-check
```
Проверяет доступность всех сервисов:
- ZooKeeper
- Kafka
- PostgreSQL
- ClickHouse (обе реплики) - с паузой 30 секунд для полной инициализации
- ClickHouse Load Balancer - с паузой 10 секунд
**Примечание:** Команда включает паузы для ClickHouse сервисов, так как они требуют времени для полной инициализации после запуска.
### Логи
```bash
# Все сервисы
make logs
# Конкретный сервис
make infra-logs
make agent-logs
make worker-logs
```
## Резервное копирование
### Создание резервной копии
```bash
make backup
```
Создает резервные копии:
- PostgreSQL: `./backups/postgres_YYYYMMDD_HHMMSS.sql`
- ClickHouse: `backup_YYYYMMDD_HHMMSS`
### Восстановление
```bash
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)
## Устранение неполадок
### Проблемы с запуском
```bash
# Проверить статус сервисов
make status
# Проверить логи
make logs
# Проверить здоровье
make health-check
# Перезапустить инфраструктуру
make restart
```
### Проблемы с сетью
```bash
# Проверить Docker сеть
docker network ls
docker network inspect sensus-network
```
### Проблемы с данными
```bash
# Очистить volumes
make clean-volumes
# Пересоздать инфраструктуру
make clean
make setup
```
### Проблемы с производительностью
1. Увеличьте лимиты памяти в `.env`
2. Настройте партиционирование в ClickHouse
3. Оптимизируйте индексы в PostgreSQL
## Разработка
### Добавление новых сервисов
1. Добавьте сервис в `docker-compose.yml`
2. Добавьте переменные в `env.example`
3. Добавьте команды в `Makefile`
4. Обновите документацию
### Тестирование
```bash
# Запуск тестовой среды
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 в репозитории