Initial commit: Message Gateway project

- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-11-12 20:25:11 +03:00
commit b90def35ed
72 changed files with 10609 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
# Настройка AlertManager
## Создание конфигурации AlertManager
1. **Открытие конфигурации:**
- Откройте файл конфигурации AlertManager (обычно `alertmanager.yml`)
- Добавьте webhook receiver:
```yaml
receivers:
- name: 'message-gateway'
webhook_configs:
- url: 'http://your-gateway-url/api/v1/alertmanager/{k8s_cluster}/{group_name}/{thread_id}'
send_resolved: true
http_config:
bearer_token: 'optional-bearer-token'
```
2. **Настройка Route:**
- В конфигурации AlertManager добавьте route:
```yaml
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'message-gateway'
routes:
- match:
severity: critical
receiver: 'message-gateway'
continue: true
- match:
severity: warning
receiver: 'message-gateway'
```
3. **Применение конфигурации:**
- Сохраните файл конфигурации
- Перезапустите AlertManager или перезагрузите конфигурацию:
```bash
curl -X POST http://alertmanager:9093/-/reload
```
## Пример конфигурации
**Полный пример `alertmanager.yml`:**
```yaml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'message-gateway'
routes:
- match:
severity: critical
receiver: 'message-gateway'
continue: true
- match:
severity: warning
receiver: 'message-gateway'
receivers:
- name: 'message-gateway'
webhook_configs:
- url: 'http://message-gateway.example.com/api/v1/alertmanager/production/monitoring/0'
send_resolved: true
```
**Пример URL для webhook:**
```
http://message-gateway.example.com/api/v1/alertmanager/production/monitoring/0
```
Где:
- `production` - имя Kubernetes кластера (используется для формирования URL к Grafana/Prometheus)
- `monitoring` - имя группы из `config/groups.json`
- `0` - ID треда (0 для основной группы, поддерживается только для Telegram)
## Формат данных
AlertManager отправляет данные в следующем формате:
```json
{
"status": "firing",
"externalURL": "http://alertmanager.example.com",
"commonLabels": {
"alertname": "HighCPUUsage",
"severity": "critical",
"namespace": "production",
"pod": "app-deployment-7d8f9b4c5-abc123",
"container": "app-container"
},
"commonAnnotations": {
"summary": "High CPU usage detected in production namespace",
"description": "CPU usage is above 90% for 5 minutes on pod app-deployment-7d8f9b4c5-abc123",
"runbook_url": "https://wiki.example.com/runbooks/high-cpu-usage"
}
}
```
## Поддерживаемые статусы
- `firing` - алерт сработал
- `resolved` - алерт разрешен
## Примечания
- Не требует авторизации (API ключ не нужен)
- Если Jira включена, будет автоматически создан тикет в Jira (внутренний процесс)
- В сообщении будет добавлена кнопка для перехода к тикету в Jira (если поддерживается мессенджером)
- Алерты могут быть заблокированы стоп-словами (настройка в config/stop_words.txt)
- URL к Grafana/Prometheus/AlertManager формируется на основе имени кластера
- Thread ID поддерживается только для Telegram (для MAX/VK игнорируется)