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

266 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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