Ответ
В наших системах мониторинга на базе Prometheus и Grafana мы использовали четкую градацию алертов, которая определяла приоритет и канал уведомления. Основа — классификация по последствиям для бизнеса и пользователей.
Уровни критичности, которые мы настраивали:
- Critical (Критический): Полная или значительная недоступность сервиса, напрямую влияющая на бизнес-процессы. Пример: Сквозная ошибка оплаты, недоступность основного API > 5 минут, отказ всех реплик базы данных. Уведомление: звонок (PagerDuty/OpsGenie) + Slack/Telegram.
- High (Высокий): Серьезная деградация сервиса, влияющая на часть пользователей или функциональности. Пример: Повышение latency ключевого эндпоинта выше 2 секунд, увеличение rate 5xx ошибок выше 5%, отказ одной из зон доступности. Уведомление: Slack/Telegram с требованием немедленного реагирования.
- Warning (Предупреждение): Потенциальная проблема, которая не влияет на пользователей сейчас, но может перерасти в более серьезную. Пример: Заполнение диска на 85%, достижение 80% лимита памяти в Pod'е, аномальный рост количества логов. Уведомление: Slack/Telegram, задача в тикет-системе.
- Info (Информационный): События, не требующие немедленного действия, но важные для аудита или информации. Пример: Успешный деплой новой версии, перезапуск пода по причине OOMKilled, срабатывание горизонтального автомасштабирования (HPA). Уведомление: лог-канал в Slack.
Пример правила Prometheus для алерта уровня High:
- alert: APIHighLatency
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{job="api-gateway", path!~"/health"}[5m])) > 1.5
for: 3m # Задержка перед срабатыванием, чтобы отсечь кратковременные всплески
labels:
severity: high
team: backend
annotations:
summary: "Высокая задержка API-шлюза"
description: "95-й перцентиль задержки запросов к {{ $labels.instance }} превышает 1.5 секунды уже 3 минуты."
runbook: "https://wiki.internal/runbooks/api-high-latency"
Ключевое правило: каждый алерт должен иметь понятное описание и ссылку на runbook с инструкциями по диагностике и устранению.