- Добавлена команда 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
470 lines
20 KiB
Markdown
470 lines
20 KiB
Markdown
# 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 в репозитории
|