Files
second-mind-aep/💡 Идеи/💡 Проекты/Second Mind Pipeline/Мониторинг и алерты.md
2025-08-09 22:55:07 +04:00

7.8 KiB
Raw Permalink Blame History

created, updated, tags, parent, status, priority
created updated tags parent status priority
2024-12-19 2024-12-19
мониторинг
алерты
devops
автоматизация
Second Mind Pipeline/index планирование высокий

📊 Мониторинг и алерты Second Mind Pipeline

🎯 Цели мониторинга

Основные метрики

  • Доступность сервисов (uptime)
  • Время отклика веб-сайта
  • Успешность сборки Quartz
  • Использование ресурсов VPS
  • Работоспособность webhook'ов

Критические события

  • Падение любого из сервисов
  • Ошибки в процессе сборки
  • Превышение времени сборки
  • Проблемы с Git репозиторием
  • Переполнение дискового пространства

🔧 Инструменты мониторинга

Prometheus + Grafana

# Добавить в 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 для системных метрик

node-exporter:
  image: prom/node-exporter:latest
  ports:
    - "9100:9100"
  volumes:
    - /proc:/host/proc:ro
    - /sys:/host/sys:ro
    - /:/rootfs:ro

Cadvisor для контейнеров

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

🚨 Алерты и уведомления

Критические алерты

# 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 интеграция

Создание бота для алертов

# Создать бота через @BotFather
# Получить токен и chat_id

Настройка Alertmanager

# 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: детализация по контейнерам

🔍 Логирование

Централизованный сбор логов

# Добавить в docker-compose.yml
logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

ELK Stack (опционально)

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

# В 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 недели