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

113
docs/jira-mapping.md Normal file
View File

@@ -0,0 +1,113 @@
# Конфигурация Jira Mapping
## Формат конфигурации
Конфигурация маппинга Jira хранится в файле `config/jira_mapping.json`. Она определяет, какие тикеты создавать в Jira на основе алертов.
**Пример конфигурации:**
```json
{
"alertmanager": {
"default_project": "MON",
"default_assignee": null,
"default_issue_type": "Bug",
"default_priority": "High",
"mappings": [
{
"conditions": {
"severity": "critical",
"namespace": "production"
},
"project": "MON",
"assignee": "devops-team@example.com",
"issue_type": "Bug",
"priority": "Highest",
"labels": ["critical", "production", "alertmanager"]
}
]
},
"grafana": {
"default_project": "MON",
"default_assignee": null,
"default_issue_type": "Bug",
"default_priority": "High",
"mappings": []
},
"zabbix": {
"default_project": "MON",
"default_assignee": null,
"default_issue_type": "Bug",
"default_priority": "High",
"mappings": []
}
}
```
## Условия маппинга
Условия маппинга определяют, когда использовать конкретный маппинг. Поддерживаются следующие условия:
### Для AlertManager:
- `status` - статус алерта (firing, resolved)
- `severity` - критичность (critical, warning, info)
- `namespace` - namespace Kubernetes
- `alertname` - название алерта
- Любые другие метки из `commonLabels`
### Для Grafana:
- `state` - состояние алерта (alerting, ok, paused, pending, no_data)
- `ruleName` - название правила
- `tags` - теги алерта (объект с ключами и значениями)
### Для Zabbix:
- `status` - статус (PROBLEM, OK)
- `event-severity` - серьезность события
- `event-name` - название события
- `host-name` - имя хоста
**Примеры условий:**
```json
{
"conditions": {
"severity": "critical",
"namespace": "production"
}
}
```
```json
{
"conditions": {
"state": "alerting",
"tags": {
"environment": "production"
}
}
}
```
**Приоритет маппингов:**
1. Проверяются все маппинги в порядке их определения
2. Используется первый маппинг, условия которого совпадают с данными алерта
3. Если маппинг не найден, используются значения по умолчанию
## Автоматическое создание тикетов
При получении алерта, если интеграция с Jira включена и выполнены условия для создания тикета:
1. Приложение проверяет конфигурацию маппинга
2. Находит подходящий маппинг на основе условий алерта
3. Создает тикет в Jira с указанными параметрами
4. Добавляет кнопку в Telegram сообщение со ссылкой на созданный тикет
**Настройка переменных окружения:**
- `JIRA_ENABLED=true` - включить интеграцию с Jira
- `JIRA_URL=https://jira.example.com` - URL Jira сервера
- `JIRA_EMAIL=user@example.com` - Email пользователя Jira
- `JIRA_API_TOKEN=your_jira_api_token_here` - API токен Jira
- `JIRA_PROJECT_KEY=MON` - Ключ проекта Jira по умолчанию
- `JIRA_DEFAULT_ASSIGNEE=user@example.com` - Исполнитель по умолчанию
- `JIRA_DEFAULT_ISSUE_TYPE=Bug` - Тип задачи по умолчанию
- `JIRA_CREATE_ON_ALERT=true` - Создавать тикет при алерте
- `JIRA_CREATE_ON_RESOLVED=false` - Создавать тикет при resolved