Подавление шторма

Когда падает узел, от которого зависят другие (шлюз, гипервизор, база), каждый зависимый узел молчит или начинает сыпать собственными алертами — дежурный получает шторм уведомлений вместо одной понятной причины. Подавление шторма работает поверх графа явных рёбер зависимости, которые вы описываете сами: пока у родителя открыт инцидент недоступности, первое уведомление ребёнка удерживается, а не улетает независимо. Открывается пунктом «Оповещения → Тишина → Подавление шторма» — /projects/{id}/alert-suppression.

Это не то же самое, что Зависимости: та страница автоматически строит карту исходящих вызовов сервиса (базы данных, кеши, HTTP) по трейсам. Здесь — наоборот: вы вручную объявляете, что один узел инфраструктуры (хост или монитор) зависит от другого, и ребро используется только для подавления алертов, а не для отображения топологии.

Рёбра зависимостей

Ребро — пара «родитель → ребёнок»:

  • Родитель — конкретный хост или конкретный монитор.
  • Ребёнок — тоже может быть конкретным хостом или монитором, либо заданным через метку: «все хосты с окружением X» или «все хосты с ролью Y» (метки — см. «Метки хостов»). Один родитель может накрывать сразу целую группу хостов одним label-ребром, а не перечислять их по одному.

При сохранении форма проверяет: родитель и ребёнок принадлежат этому же проекту; ребро не замыкается само на себя; ребро-по-метке не совпадает с меткой самого родителя-хоста; точно такое же ребро ещё не существует; новое ребро не замыкает цикл среди уже объявленных узлов графа.

Ребро можно изменить, а не только удалить и создать заново: кнопка «Редактировать» в строке таблицы открывает модальное окно «Правка зависимости» с той же формой и теми же проверками, что при создании (в форме показаны только поля выбранного типа родителя и ребёнка). Правка, как и создание с удалением, — действие оператора проекта. Она действует на новые решения о подавлении: сервис перечитывает граф в течение нескольких секунд. Уже подавленные открытые инциденты подавленными и остаются — до их закрытия; задним числом правка ничего не переигрывает.

Что именно подавляется

Подавляются только инциденты недоступности ребёнка — хост замолчал или монитор ушёл в down. Метрические алерты того же хоста (диск/память/нагрузка) и SLO-алерты по его аптайму продолжают открываться как обычно и попадают в ту же группу инцидентов: если корень уже разослал своё уведомление, их уведомление придерживается на всё время, пока группа открыта, — дежурный видит одно сообщение о корневой причине вместо шторма; если корень к этому моменту ещё не уведомлял, первое уведомление ребёнка уходит как обычно, а дальнейшая эскалация ждёт закрытия группы. Регрессии трейсов и профилей в эту механику не входят и уведомляют как обычно — у них нет узла, который можно было бы поставить в зависимость.

Ограничение текущего выпуска. Гейт зависимостей в планировщике эскалаций — «держать лесенку, пока родитель лежит, и отпустить, когда он восстановился» — реализован только для инцидентов хостов. Инцидент монитора проверяется на родителя один раз, при открытии (детектор аптайма сам решает: подавить насовсем или отправить с опозданием после грейса), и дальше по родителю не пересматривается. Инциденты по метрикам, регрессиям трейсов и профилей и SLO на рёбра зависимостей не смотрят вовсе — для них работает только механика групп инцидентов, описанная выше.

Грейс схлопывания гонки

Первое уведомление ребёнка не улетает мгновенно — оно удерживается на срок GOTCHA_DEPENDENCY_SETTLE_SECONDS (по умолчанию 300 секунд, 5 минут). Это даёт родителю время либо упасть следом (тогда подавление успевает сработать раньше, чем ушло бы первое уведомление ребёнка), либо остаться живым — тогда по истечении грейса уведомление ребёнка уходит как обычно, без дальнейшей задержки. Действующее значение грейса показано прямо на странице над списком рёбер, чтобы не приходилось лезть в конфигурацию инстанса.

Грейс должен быть не меньше самого медленного порога тишины (silent_after) среди хостов-родителей — иначе при падении хоста-родителя часть шторма всё равно успевает проскочить до срабатывания подавления. Страница прямо предупреждает об этом несоответствии и отсылает к порогам тишины на странице «Хосты».

Тот же грейс — одна и та же величина GOTCHA_DEPENDENCY_SETTLE_SECONDS — использует и планировщик эскалаций, и детектор аптайма для монитора с задекларированным родителем: первая ступень лесенки эскалации узла с родителем удерживается тем же сроком.

Предпросмотр

Под списком рёбер и формой добавления — расчёт без побочных эффектов: для каждого родителя, у которого есть хотя бы одно ребро, что подавилось бы прямо сейчас, если бы этот родитель в эту секунду ушёл в недоступность. Полезно проверить граф до того, как он понадобится в реальном инциденте.

Переменные окружения

ПеременнаяПо умолчаниюОписание
GOTCHA_DEPENDENCY_SETTLE_SECONDS300Грейс схлопывания гонки при падении родителя — см. выше. Используется подавлением шторма, планировщиком эскалаций и детектором аптайма как одна и та же величина.

Смотрите также

  • Группы инцидентов — как подавленные и «молчащие за корня» инциденты выглядят на общей ленте.
  • Эскалации — лесенка уведомлений, которую подавление шторма приостанавливает для зависимых узлов.
  • Хосты — метки окружения/роли для label-рёбер и пороги тишины, с которыми должен быть согласован грейс.
  • Зависимости — автоматическая карта внешних вызовов сервиса; не путать с этой страницей.