vault backup: 2025-08-09 22:55:07

This commit is contained in:
Andrey Epifancev
2025-08-09 22:55:07 +04:00
parent d8d65c709e
commit 7741789246
2 changed files with 449 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
---
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 недели*