307 lines
13 KiB
Markdown
307 lines
13 KiB
Markdown
# Production Environment
|
||
|
||
Проект для управления ботами и мониторинга инфраструктуры.
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
prod/
|
||
├── bots/ # Боты и их конфигурации
|
||
├── infra/ # Инфраструктура
|
||
│ ├── grafana/ # Дашборды Grafana
|
||
│ ├── monitoring/ # Модуль мониторинга сервера
|
||
│ └── prometheus/ # Конфигурация Prometheus
|
||
├── scripts/ # Скрипты развертывания
|
||
├── docker-compose.yml # Docker Compose конфигурация
|
||
├── env.template # Шаблон переменных окружения
|
||
└── README.md # Этот файл
|
||
```
|
||
|
||
## 🚀 Быстрый запуск
|
||
|
||
### ⚠️ Важное замечание
|
||
**Убедитесь, что вы удалили файл `docker-compose.yml` из папки `bots/telegram-helper-bot/`**
|
||
для избежания конфликтов портов. Используйте только корневой `docker-compose.yml`.
|
||
|
||
### 1. Настройка переменных окружения
|
||
|
||
Скопируйте шаблон и настройте переменные:
|
||
|
||
```bash
|
||
cp env.template .env
|
||
```
|
||
|
||
Отредактируйте `.env` файл, добавив реальные значения:
|
||
|
||
```env
|
||
# Telegram Bot Configuration
|
||
TELEGRAM_MONITORING_BOT_TOKEN=your_bot_token_here
|
||
GROUP_MONITORING_FOR_LOGS=your_telegram_group_id_here
|
||
IMPORTANT_MONITORING_LOGS=your_important_logs_channel_id_here
|
||
|
||
# Monitoring Configuration
|
||
THRESHOLD=80.0
|
||
RECOVERY_THRESHOLD=75.0
|
||
|
||
# Prometheus Configuration
|
||
PROMETHEUS_RETENTION_DAYS=30
|
||
|
||
# Grafana Configuration
|
||
GRAFANA_ADMIN_USER=admin
|
||
GRAFANA_ADMIN_PASSWORD=admin
|
||
```
|
||
|
||
### 2. Запуск всех сервисов
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 3. Проверка статуса
|
||
|
||
```bash
|
||
docker-compose ps
|
||
```
|
||
|
||
## 📊 Сервисы
|
||
|
||
- **Prometheus** (порт 9090) - сбор метрик
|
||
- **Grafana** (порт 3000) - дашборды
|
||
- **Server Monitor** - мониторинг системы + Telegram уведомления
|
||
|
||
## 🌐 Доступные адреса и порты
|
||
|
||
### 📊 Основные сервисы мониторинга
|
||
|
||
| Сервис | Порт | Адрес | Описание |
|
||
|--------|------|-------|----------|
|
||
| **Grafana** | 3000 | http://localhost:3000 | Дашборды мониторинга (admin/admin) |
|
||
| **Prometheus** | 9090 | http://localhost:9090 | API метрик и веб-интерфейс |
|
||
| **Server Monitor** | 9091 | http://localhost:9091/health | Проверка состояния мониторинга |
|
||
| **Server Monitor Metrics** | 9091 | http://localhost:9091/metrics | Endpoint для Prometheus |
|
||
|
||
### 🤖 Telegram Bot сервисы
|
||
|
||
| Сервис | Порт | Адрес | Описание |
|
||
|--------|------|-------|----------|
|
||
| **Telegram Bot Health** | 8080 | http://localhost:8080/health | Health check бота |
|
||
| **Telegram Bot Metrics** | 8080 | http://localhost:8080/metrics | Метрики бота (если включены) |
|
||
|
||
### 🔍 Детальная информация о портах
|
||
|
||
#### **Порт 3000 - Grafana**
|
||
- **Контейнер**: `bots_grafana`
|
||
- **Назначение**: Веб-интерфейс для просмотра дашбордов мониторинга
|
||
- **Доступ**: Публичный (проброс из контейнера)
|
||
- **Аутентификация**: admin/admin (по умолчанию)
|
||
|
||
#### **Порт 9090 - Prometheus**
|
||
- **Контейнер**: `bots_prometheus`
|
||
- **Назначение**: Сбор и хранение метрик, API для запросов
|
||
- **Доступ**: Публичный (проброс из контейнера)
|
||
- **Функции**:
|
||
- Сбор метрик с server_monitor (порт 9091)
|
||
- Сбор метрик с telegram-bot (порт 8080)
|
||
- Хранение исторических данных
|
||
|
||
#### **Порт 9091 - Server Monitor**
|
||
- **Контейнер**: `bots_server_monitor`
|
||
- **Назначение**: Мониторинг системных ресурсов сервера
|
||
- **Доступ**: Внутренний (только внутри Docker сети)
|
||
- **Функции**:
|
||
- Сбор CPU, RAM, Disk метрик
|
||
- Отправка алертов в Telegram
|
||
- Предоставление метрик для Prometheus
|
||
|
||
#### **Порт 8080 - Telegram Bot**
|
||
- **Контейнер**: `bots_telegram_bot`
|
||
- **Назначение**: Основной функционал Telegram бота
|
||
- **Доступ**: Публичный (проброс из контейнера)
|
||
- **Функции**:
|
||
- Health check endpoint
|
||
- Метрики производительности (если включены)
|
||
- API для управления ботом
|
||
|
||
### 🌐 Сетевые настройки
|
||
|
||
- **Основная сеть**: `bots_network` (192.168.100.0/24)
|
||
- **Все сервисы**: Работают в одной Docker сети для взаимодействия
|
||
- **Внешний доступ**: Только порты 3000, 8080, 9090
|
||
- **Внутренние порты**: 9091 доступен только внутри Docker сети
|
||
|
||
## 🔧 Модуль мониторинга
|
||
|
||
Модуль автоматически:
|
||
- Собирает метрики CPU, RAM, диска каждые 30 секунд
|
||
- Отправляет статусы каждые 30 минут в Telegram
|
||
- Отправляет алерты при превышении пороговых значений
|
||
- Интегрирован с Prometheus/Grafana
|
||
|
||
### 📈 Собираемые метрики
|
||
|
||
- **CPU**: использование, load average (1m, 5m, 15m)
|
||
- **RAM**: использование оперативной памяти
|
||
- **Disk**: использование диска, I/O активность
|
||
- **Swap**: использование swap
|
||
- **System**: uptime системы и мониторинга
|
||
|
||
## 📝 Логи
|
||
|
||
```bash
|
||
# Все сервисы
|
||
docker-compose logs
|
||
|
||
# Только мониторинг
|
||
docker-compose logs -f server_monitor
|
||
|
||
# Prometheus
|
||
docker logs bots_prometheus
|
||
|
||
# Grafana
|
||
docker logs bots_grafana
|
||
```
|
||
|
||
## 🔍 Проверка статуса
|
||
|
||
### Автоматическая проверка
|
||
```bash
|
||
cd infra/monitoring
|
||
python3 check_grafana.py
|
||
```
|
||
|
||
### Ручная проверка
|
||
```bash
|
||
# Проверка метрик
|
||
curl http://localhost:9091/metrics
|
||
|
||
# Проверка Prometheus targets
|
||
curl http://localhost:9090/api/v1/targets
|
||
|
||
# Проверка Grafana
|
||
curl http://localhost:3000/api/health
|
||
```
|
||
|
||
## 🛑 Остановка
|
||
|
||
```bash
|
||
docker-compose down
|
||
```
|
||
|
||
## 🛠️ Управление через Makefile
|
||
|
||
В корневой директории доступен Makefile с удобными командами для управления инфраструктурой:
|
||
|
||
### 🚀 Основные команды
|
||
```bash
|
||
make help # Показать справку по всем командам
|
||
make start # Собрать и запустить все сервисы
|
||
make stop # Остановить все сервисы
|
||
make restart # Перезапустить все сервисы
|
||
make status # Показать статус контейнеров
|
||
make health # Проверить здоровье всех сервисов
|
||
```
|
||
|
||
### 📊 Мониторинг и логи
|
||
```bash
|
||
make logs # Логи всех сервисов
|
||
make logs-monitor # Логи только мониторинга
|
||
make logs-bot # Логи Telegram бота
|
||
make logs-errors # Только ошибки из логов
|
||
make monitoring # Открыть Grafana в браузере
|
||
make prometheus # Открыть Prometheus в браузере
|
||
```
|
||
|
||
### 🔧 Управление отдельными сервисами
|
||
```bash
|
||
make restart-monitor # Перезапустить только мониторинг
|
||
make restart-grafana # Перезапустить только Grafana
|
||
make restart-prometheus # Перезапустить только Prometheus
|
||
make restart-bot # Перезапустить только Telegram бота
|
||
```
|
||
|
||
### 🧹 Обслуживание
|
||
```bash
|
||
make backup # Создать backup конфигурации
|
||
make restore FILE=... # Восстановить из backup
|
||
make clean # Очистить все контейнеры и образы
|
||
make clean-monitoring # Очистить только данные мониторинга
|
||
make check-ports # Проверить занятые порты
|
||
```
|
||
|
||
### 🔍 Диагностика
|
||
```bash
|
||
make metrics # Показать текущие метрики
|
||
make check-grafana # Проверить состояние Grafana
|
||
make test # Запустить все тесты в проекте (инфраструктура + бот)
|
||
make test-infra # Запустить тесты инфраструктуры (мониторинг)
|
||
make test-bot # Запустить тесты Telegram бота (201 тест)
|
||
make test-coverage # Запустить все тесты с отчетом о покрытии
|
||
make test-clean # Очистить все файлы тестирования и отчеты
|
||
make reload-prometheus # Перезагрузить конфигурацию Prometheus
|
||
make reload-grafana # Перезагрузить конфигурацию Grafana
|
||
|
||
## 🧪 Тестирование
|
||
|
||
Проект включает в себя комплексную систему тестирования для всех компонентов:
|
||
|
||
### 📁 Структура тестов
|
||
|
||
``` text
|
||
tests/
|
||
├── __init__.py # Инициализация корневой директории тестов
|
||
├── pytest.ini # Конфигурация pytest для всего проекта
|
||
├── test_pytest_config.py # Тест конфигурации pytest
|
||
└── infra/ # Тесты инфраструктуры
|
||
├── __init__.py
|
||
└── test_infra.py # Тесты модулей мониторинга
|
||
```
|
||
|
||
### 📊 Тесты инфраструктуры (`make test-infra`)
|
||
- **Расположение**: `tests/infra/test_infra.py`
|
||
- **Количество тестов**: 7 тестов
|
||
- **Покрытие**: Основные модули мониторинга
|
||
- **Проверяет**:
|
||
- Импорт всех модулей
|
||
- Создание экземпляров классов
|
||
- Структуру системной информации
|
||
- Структуру метрик
|
||
|
||
### 🤖 Тесты Telegram бота (`make test-bot`)
|
||
- **Расположение**: `bots/telegram-helper-bot/tests/` (отдельная директория)
|
||
- **Количество тестов**: 201 тест
|
||
- **Покрытие**: Все основные компоненты бота
|
||
- **Проверяет**:
|
||
- База данных и операции с ней
|
||
- Обработчики сообщений (admin, group, private)
|
||
- Клавиатуры и фильтры
|
||
- Утилиты и вспомогательные функции
|
||
- Автоматическое разбанивание пользователей
|
||
- Интеграционные тесты
|
||
|
||
### 🚀 Запуск всех тестов (`make test`)
|
||
Команда `make test` последовательно запускает:
|
||
1. Тесты инфраструктуры
|
||
2. Тесты Telegram бота
|
||
3. Выводит общую статистику
|
||
|
||
### 📊 Анализ покрытия тестами (`make test-coverage`)
|
||
Команда `make test-coverage` запускает все тесты с детальным анализом покрытия:
|
||
1. **Тесты инфраструктуры** с покрытием модулей мониторинга
|
||
2. **Тесты Telegram бота** с покрытием всех компонентов
|
||
3. **HTML отчеты** сохраняются в `htmlcov/` для детального анализа
|
||
|
||
### 🧹 Очистка тестовых файлов (`make test-clean`)
|
||
Команда `make test-clean` удаляет все файлы, созданные в процессе тестирования:
|
||
- Кэш pytest (`.pytest_cache/`)
|
||
- Отчеты о покрытии (`htmlcov/`, `.coverage`)
|
||
- Скомпилированные Python файлы (`*.pyc`, `__pycache__`)
|
||
- Временные файлы тестирования
|
||
|
||
### ⚙️ Конфигурация pytest
|
||
|
||
Проект использует централизованную конфигурацию pytest (`pytest.ini`):
|
||
- **Автоматическое обнаружение**: тесты в директории `tests/`
|
||
- **Настройки asyncio**: автоматический режим для асинхронных тестов
|
||
- **Маркеры**: `slow`, `integration`, `unit` для категоризации тестов
|
||
- **Форматирование**: краткий вывод ошибок, отключение предупреждений
|