266 lines
7.8 KiB
Markdown
266 lines
7.8 KiB
Markdown
---
|
||
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 недели*
|