- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
82 lines
5.7 KiB
Python
82 lines
5.7 KiB
Python
"""
|
|
Модели данных для Zabbix webhooks.
|
|
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
from typing import Optional
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ZabbixAlert(BaseModel):
|
|
"""Модель данных вебхука из Zabbix."""
|
|
link: str = Field(..., description="Ссылка на событие в Zabbix", examples=["{$ZABBIX_URL}/tr_events.php?triggerid=42667&eventid=8819711"])
|
|
status: str = Field(..., description="Статус события (OK, PROBLEM)", examples=["OK"])
|
|
action_id: str = Field(..., alias="action-id", description="ID действия", examples=["7"])
|
|
alert_subject: str = Field(..., alias="alert-subject", description="Тема алерта", examples=["Resolved in 1m 0s: High CPU utilization (over 90% for 5m)"])
|
|
alert_message: str = Field(..., alias="alert-message", description="Сообщение алерта", examples=["Problem has been resolved at 16:49:44 on 2024.02.08"])
|
|
event_id: str = Field(..., alias="event-id", description="ID события", examples=["8819711"])
|
|
event_name: str = Field(..., alias="event-name", description="Название события", examples=["High CPU utilization (over 90% for 5m)"])
|
|
event_nseverity: str = Field(..., alias="event-nseverity", description="Числовой уровень серьезности", examples=["2"])
|
|
event_opdata: Optional[str] = Field(None, alias="event-opdata", description="Операционные данные события", examples=["Current utilization: 70.9 %"])
|
|
event_recovery_date: Optional[str] = Field(None, alias="event-recovery-date", description="Дата восстановления", examples=["2024.02.08"])
|
|
event_recovery_time: Optional[str] = Field(None, alias="event-recovery-time", description="Время восстановления", examples=["16:49:44"])
|
|
event_duration: Optional[str] = Field(None, alias="event-duration", description="Длительность события", examples=["1m 0s"])
|
|
event_recovery_name: Optional[str] = Field(None, alias="event-recovery-name", description="Название восстановленного события", examples=["High CPU utilization (over 90% for 5m)"])
|
|
event_recovery_status: Optional[str] = Field(None, alias="event-recovery-status", description="Статус восстановления", examples=["RESOLVED"])
|
|
event_recovery_tags: Optional[str] = Field(None, alias="event-recovery-tags", description="Теги восстановленного события", examples=["Application:CPU"])
|
|
event_severity: Optional[str] = Field(None, alias="event-severity", description="Уровень серьезности (Disaster, High, Warning, Average, Information)", examples=["Warning"])
|
|
host_name: str = Field(..., alias="host-name", description="Имя хоста", examples=["pnode28"])
|
|
host_ip: str = Field(..., alias="host-ip", description="IP адрес хоста", examples=["10.14.253.38"])
|
|
host_port: str = Field(..., alias="host-port", description="Порт хоста", examples=["10050"])
|
|
|
|
model_config = {
|
|
"populate_by_name": True,
|
|
"json_schema_extra": {
|
|
"examples": [
|
|
{
|
|
"link": "https://zabbix.example.com/tr_events.php?triggerid=42667&eventid=8819711",
|
|
"status": "PROBLEM",
|
|
"action-id": "7",
|
|
"alert-subject": "Problem: High CPU utilization (over 90% for 5m)",
|
|
"alert-message": "Problem started at 16:48:44 on 2024.02.08\r\nProblem name: High CPU utilization (over 90% for 5m)\r\nHost: pnode28\r\nSeverity: Warning\r\nCurrent utilization: 95.2 %\r\n",
|
|
"event-id": "8819711",
|
|
"event-name": "High CPU utilization (over 90% for 5m)",
|
|
"event-nseverity": "2",
|
|
"event-opdata": "Current utilization: 95.2 %",
|
|
"event-recovery-date": None,
|
|
"event-recovery-time": None,
|
|
"event-duration": None,
|
|
"event-recovery-name": None,
|
|
"event-recovery-status": None,
|
|
"event-recovery-tags": None,
|
|
"event-severity": "Warning",
|
|
"host-name": "pnode28",
|
|
"host-ip": "10.14.253.38",
|
|
"host-port": "10050"
|
|
},
|
|
{
|
|
"link": "https://zabbix.example.com/tr_events.php?triggerid=42667&eventid=8819711",
|
|
"status": "OK",
|
|
"action-id": "7",
|
|
"alert-subject": "Resolved in 1m 0s: High CPU utilization (over 90% for 5m)",
|
|
"alert-message": "Problem has been resolved at 16:49:44 on 2024.02.08\r\nProblem name: High CPU utilization (over 90% for 5m)\r\nProblem duration: 1m 0s\r\nHost: pnode28\r\nSeverity: Warning\r\nOriginal problem ID: 8819711\r\n",
|
|
"event-id": "8819711",
|
|
"event-name": "High CPU utilization (over 90% for 5m)",
|
|
"event-nseverity": "2",
|
|
"event-opdata": "Current utilization: 70.9 %",
|
|
"event-recovery-date": "2024.02.08",
|
|
"event-recovery-time": "16:49:44",
|
|
"event-duration": "1m 0s",
|
|
"event-recovery-name": "High CPU utilization (over 90% for 5m)",
|
|
"event-recovery-status": "RESOLVED",
|
|
"event-recovery-tags": "Application:CPU",
|
|
"event-severity": "Warning",
|
|
"host-name": "pnode28",
|
|
"host-ip": "10.14.253.38",
|
|
"host-port": "10050"
|
|
}
|
|
]
|
|
}
|
|
}
|