Andrey 95fabdc0d1 refactor: consolidate Nginx configurations into a single file
- Merged individual Nginx configuration files for Grafana, Prometheus, and Alertmanager into a unified nginx.conf.
- Added location blocks for Grafana, Prometheus, and Alertmanager with appropriate proxy settings, authentication, and rate limiting.
- Removed obsolete configuration files to streamline the Nginx setup and improve maintainability.
2025-09-20 01:14:10 +03:00

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 последовательно запускает:

  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 для категоризации тестов
  • Форматирование: краткий вывод ошибок, отключение предупреждений
Description
инфраструктура всех ботов
Readme 301 KiB
Languages
Makefile 38%
Python 29.1%
Shell 24.8%
Jinja 4.9%
Dockerfile 3.2%