# 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 для запросов - **Доступ**: Публичный (проброс из контейнера) - **Функции**: - Сбор метрик с 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 системы и мониторинга ## 📝 Логи ```bash # Все сервисы docker-compose logs # Только мониторинг # Prometheus docker logs bots_prometheus # Grafana docker logs bots_grafana ``` ## 🔍 Проверка статуса ### Автоматическая проверка ```bash 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-bot # Логи Telegram бота make logs-errors # Только ошибки из логов make monitoring # Открыть Grafana в браузере make prometheus # Открыть Prometheus в браузере ``` ### 🔧 Управление отдельными сервисами ```bash 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` для категоризации тестов - **Форматирование**: краткий вывод ошибок, отключение предупреждений