--- created: 2024-12-19 updated: 2024-12-19 tags: - мониторинг - алерты - devops - автоматизация parent: "[[Second Mind Pipeline/index|Second Mind Pipeline]]" status: "планирование" priority: "высокий" --- # 📊 Мониторинг и алерты Second Mind Pipeline ## 🎯 Цели мониторинга ### Основные метрики - **Доступность сервисов** (uptime) - **Время отклика** веб-сайта - **Успешность сборки** Quartz - **Использование ресурсов** VPS - **Работоспособность** webhook'ов ### Критические события - Падение любого из сервисов - Ошибки в процессе сборки - Превышение времени сборки - Проблемы с Git репозиторием - Переполнение дискового пространства ## 🔧 Инструменты мониторинга ### Prometheus + Grafana ```yaml # Добавить в docker-compose.yml prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" grafana: image: grafana/grafana:latest environment: - GF_SECURITY_ADMIN_PASSWORD=admin123 ports: - "3001:3000" volumes: - grafana_data:/var/lib/grafana ``` ### Node Exporter для системных метрик ```yaml node-exporter: image: prom/node-exporter:latest ports: - "9100:9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro ``` ### Cadvisor для контейнеров ```yaml cadvisor: image: gcr.io/cadvisor/cadvisor:latest ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ``` ## 📈 Ключевые метрики ### Доступность сервисов - **Gitea**: HTTP 200 на `/api/v1/version` - **Notes site**: HTTP 200 на главной странице - **Webhook**: HTTP 200 на `/health` - **Nginx**: Статус процесса ### Производительность - **Время сборки Quartz**: от webhook до готового сайта - **Время отклика сайта**: TTFB (Time To First Byte) - **Пропускная способность**: requests/second - **Размер сайта**: количество страниц и объем ### Системные ресурсы - **CPU usage**: по контейнерам и общий - **Memory usage**: RAM и swap - **Disk usage**: свободное место - **Network I/O**: входящий/исходящий трафик ### Бизнес-метрики - **Частота обновлений**: commits в день/неделю - **Количество заметок**: общее и новых - **Посещаемость сайта**: уникальные посетители - **Время работы без сбоев**: MTBF ## 🚨 Алерты и уведомления ### Критические алерты ```yaml # Prometheus alerting rules groups: - name: second-mind-critical rules: - alert: ServiceDown expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Service {{ $labels.instance }} is down" - alert: HighErrorRate expr: rate(nginx_http_requests_total{status=~"5.."}[5m]) > 0.1 for: 2m labels: severity: critical annotations: summary: "High error rate on {{ $labels.instance }}" ``` ### Предупреждения - **Высокое использование CPU** (>80% в течение 5 минут) - **Низкое свободное место** (<1GB) - **Длительная сборка** (>60 секунд) - **Высокое время отклика** (>500ms) ### Каналы уведомлений 1. **Telegram бот** для критических алертов 2. **Email** для еженедельных отчетов 3. **Grafana Dashboard** для визуального мониторинга 4. **Slack webhook** (если используется) ## 📱 Telegram интеграция ### Создание бота для алертов ```bash # Создать бота через @BotFather # Получить токен и chat_id ``` ### Настройка Alertmanager ```yaml # alertmanager.yml global: telegram_api_url: "https://api.telegram.org" route: group_by: ['alertname'] receiver: 'telegram-alerts' receivers: - name: 'telegram-alerts' telegram_configs: - bot_token: 'YOUR_BOT_TOKEN' chat_id: YOUR_CHAT_ID message: | 🚨 {{ .GroupLabels.alertname }} {{ range .Alerts }} • {{ .Annotations.summary }} {{ end }} ``` ## 📊 Dashboard'ы Grafana ### Главный dashboard - **System Overview**: CPU, Memory, Disk, Network - **Services Status**: все сервисы и их статус - **Build Pipeline**: статистика сборок - **Website Performance**: время отклика, ошибки ### Детальные dashboard'ы - **Git Activity**: commits, webhook calls - **Quartz Performance**: время сборки, размер выходных файлов - **Nginx Analytics**: access logs, top pages - **Container Resources**: детализация по контейнерам ## 🔍 Логирование ### Централизованный сбор логов ```yaml # Добавить в docker-compose.yml logging: driver: "json-file" options: max-size: "10m" max-file: "3" ``` ### ELK Stack (опционально) ```yaml elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0 environment: - discovery.type=single-node - xpack.security.enabled=false logstash: image: docker.elastic.co/logstash/logstash:8.5.0 volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf kibana: image: docker.elastic.co/kibana/kibana:8.5.0 ports: - "5601:5601" ``` ## 🏥 Health Checks ### Встроенные health checks ```yaml # В docker-compose.yml для каждого сервиса healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s ``` ### Внешний мониторинг - **UptimeRobot** для проверки доступности извне - **StatusCake** как альтернатива - **Pingdom** для детального анализа ## 📋 Checklist внедрения ### Фаза 1: Базовый мониторинг - [ ] Настроить Prometheus - [ ] Добавить основные метрики - [ ] Создать простые алерты - [ ] Настроить Telegram уведомления ### Фаза 2: Расширенная аналитика - [ ] Развернуть Grafana - [ ] Создать dashboard'ы - [ ] Настроить детальные алерты - [ ] Добавить логирование ### Фаза 3: Оптимизация - [ ] Настроить внешний мониторинг - [ ] Внедрить ELK (при необходимости) - [ ] Автоматизировать отчетность - [ ] Создать runbook'и для инцидентов ## 🎯 Следующие шаги 1. **Начать с Prometheus + Node Exporter** 2. **Добавить базовые алерты через Telegram** 3. **Создать простой Grafana dashboard** 4. **Постепенно расширять покрытие метрик** --- *Связано с: [[Second Mind Pipeline/index|Главная страница проекта]]* *Приоритет: Высокий | Срок: 2 недели*