Подключение AlertManager
Принимайте алерты Prometheus AlertManager в Incident Garden.
Это руководство показывает, как подключить Prometheus AlertManager как источник алертов. Если вы ещё не проходили базовую настройку, начните с Quick Start.
Предусловия
Интеграцию нельзя создать без политики эскалации, поэтому сначала подготовьте следующее в указанном порядке:
- Team — команда, которая будет принимать алерты этой интеграции.
- Escalation Policy этой команды — цепочка, по которой алерты пойдут к получателям.
Как создать команду и политику, описано в Quick Start: Создание команды и Escalation Policy.
Создание интеграции
Откройте вкладку интеграций команды
Откройте нужную команду и перейдите на вкладку Integrations. Нажмите Add Integration.
Заполните параметры
- Name — например, «Production Alertmanager»
- Type —
Alertmanager - Team — команда, к которой привязана интеграция
- Escalation Policy — политика, подготовленная заранее
При выборе типа Alertmanager поле маппинга важности заполняется готовым
пресетом — для базового сценария оставьте его как есть.
Скопируйте API key
После сохранения откроется диалог с API key интеграции. Скопируйте его.
API key показывается только один раз. Позже в интерфейсе виден лишь его префикс. Если ключ утерян, его нельзя восстановить — можно только перевыпустить новый.
Endpoint приёма
AlertManager отправляет батчи на endpoint вашей интеграции:
Конфигурация AlertManager
Добавьте в alertmanager.yml receiver, который шлёт на этот endpoint (замените
<API_KEY> на ваш ключ):
После этого направьте нужные маршруты (routes) AlertManager на ресивер (receiver) incidentgarden.
Маппинг важности
Пресет для типа Alertmanager:
source_field—labels.severitycritical←criticalwarning←warning,infodefault—critical
Это означает, что важность каждого алерта берётся из метки severity в его
labels. Как изменить эти значения — см.
Настройка важности. Зачем нужен
маппинг и как он связан с эскалацией — в концепции
Важность и её маппинг.
Как обрабатывается батч
Один батч AlertManager превращается в один алерт (плоская группировка).
Жизненным циклом группы управляет верхнеуровневый status: отправляйте точные
значения firing или resolved. Статус отдельного элемента alerts[].status
для этого не используется. Полный контракт и примеры см. в
формате payload.
Что решает group_by
Состав батча задаёте вы сами — параметром group_by в route вашего
alertmanager.yml. Он определяет, какие срабатывания Prometheus поедут одним
батчем и какие метки у этого батча будут общими. Поскольку батч — это ровно один
алерт, а «та же самая проблема» опознаётся по общим меткам группы, group_by
прямо решает, сколько алертов у вас появится и что с чем схлопнется. Это
единственная настройка на стороне отправителя, которая так сильно меняет картину
дежурства, — поэтому её стоит выбрать осознанно, а не оставить как получилось.
group_by определяет, сколько алертов увидит дежурный.
- Слишком широкий (мало меток — скажем, только
alertname): независимые проблемы попадают в одну группу и становятся одним алертом. У него растёт счётчик повторов, но второго алерта и второго оповещения не будет — про вторую проблему дежурный не узнает, пока не откроет карточку первой. - Слишком узкий (метки вплоть до
instanceилиpod): каждое срабатывание становится отдельным алертом со своей эскалацией. Один сбой превращается в поток звонков, в котором тонет всё остальное.
Правило простое: группируйте по тому, что описывает проблему, а не
экземпляр. Держите в group_by метки, разделяющие независимые контуры (кластер,
окружение, сервис), и не кладите туда идентификаторы отдельных экземпляров —
они видны внутри алерта на вкладке Payload, в секции Instances.
Две метки в group_by заслуживают отдельного внимания: от них зависит, как алерт
будет выглядеть в списке и насколько настойчиво пойдёт эскалация.
alertnameдаёт алерту заголовок. Если её нет вgroup_by, заголовок берётся из общей метки батча — а общей она будет, только еслиalertnameсовпал у всех срабатываний группы. Иначе алерт приедет с заголовкомUnnamed Alert, и по списку понять, что именно горит, не получится.severityучаствует в определении важности: важность считается по общим меткам батча. Если в одну группу попали срабатывания разной важности, общей меткиseverityу батча не окажется — маппинг не сойдётся, и алерт получит важность по умолчанию, то естьcritical(см. Настройка важности). Иными словами, смешав в одной группеcriticalиwarning, вы получитеcritical.
Качество алертов закладывается на стороне Prometheus, а не в Incident Garden:
- Алерты без агрегации в PromQL — без агрегации один инцидент рассыпается на сотни отдельных срабатываний.
- Описание алерта как диагностический отчёт — перегруженный текст мешает дежурному быстро понять суть.