f8d6b92fd210aeb5de6bea029f689af10fedd6a8
- Introduce Nginx service in docker-compose for handling HTTP/HTTPS traffic. - Configure Nginx with SSL support and health checks for Grafana and Prometheus. - Update env.template to include SERVER_IP and STATUS_PAGE_PASSWORD variables. - Enhance Ansible playbook with tasks for Nginx installation, SSL certificate generation, and configuration management.
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. Настройка переменных окружения
Скопируйте шаблон и настройте переменные:
cp env.template .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. Запуск всех сервисов
docker-compose up -d
3. Проверка статуса
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 для запросов
- Доступ: Публичный (проброс из контейнера)
- Функции:
- Сбор метрик с telegram-bot (порт 8080)
- Сбор метрик с anon-bot (порт 8081)
- Сбор метрик с node_exporter (порт 9100)
- Хранение исторических данных
Порт 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 системы и мониторинга
📝 Логи
# Все сервисы
docker-compose logs
# Только мониторинг
# Prometheus
docker logs bots_prometheus
# Grafana
docker logs bots_grafana
🔍 Проверка статуса
Автоматическая проверка
python3 check_grafana.py
Ручная проверка
# Проверка метрик
curl http://localhost:9091/metrics
# Проверка Prometheus targets
curl http://localhost:9090/api/v1/targets
# Проверка Grafana
curl http://localhost:3000/api/health
🛑 Остановка
docker-compose down
🛠️ Управление через Makefile
В корневой директории доступен Makefile с удобными командами для управления инфраструктурой:
🚀 Основные команды
make help # Показать справку по всем командам
make start # Собрать и запустить все сервисы
make stop # Остановить все сервисы
make restart # Перезапустить все сервисы
make status # Показать статус контейнеров
make health # Проверить здоровье всех сервисов
📊 Мониторинг и логи
make logs # Логи всех сервисов
make logs-bot # Логи Telegram бота
make logs-errors # Только ошибки из логов
make monitoring # Открыть Grafana в браузере
make prometheus # Открыть Prometheus в браузере
🔧 Управление отдельными сервисами
make restart-grafana # Перезапустить только Grafana
make restart-prometheus # Перезапустить только Prometheus
make restart-bot # Перезапустить только Telegram бота
🧹 Обслуживание
make backup # Создать backup конфигурации
make restore FILE=... # Восстановить из backup
make clean # Очистить все контейнеры и образы
make clean-monitoring # Очистить только данные мониторинга
make check-ports # Проверить занятые порты
🔍 Диагностика
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 последовательно запускает:
- Тесты инфраструктуры
- Тесты Telegram бота
- Выводит общую статистику
📊 Анализ покрытия тестами (make test-coverage)
Команда make test-coverage запускает все тесты с детальным анализом покрытия:
- Тесты инфраструктуры с покрытием модулей мониторинга
- Тесты Telegram бота с покрытием всех компонентов
- 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для категоризации тестов - Форматирование: краткий вывод ошибок, отключение предупреждений
Description
Languages
Makefile
38%
Python
29.1%
Shell
24.8%
Jinja
4.9%
Dockerfile
3.2%