Канал алертов перестаёт работать раньше, чем это замечает хоть кто-то. Переломный момент не выглядит событием: дежурный открывает канал посреди идущего инцидента, проматывает — и оказывается прав, потому что среди промотанного нужного не было. Дальше канал читают по привычке, решений в нём уже не принимают, потом перестают открывать совсем. Ни на одном из этих шагов никто не решает «перестанем смотреть» — решение принимается по частям, само. И оно рационально: чтение стоит дорого, а канал уже доказал, что почти ничего взамен не возвращает. Это не лень и не вопрос дисциплины, и лечится это не дисциплиной.
Почему внимание гаснет
Каждое сообщение в канале — маленькая ставка. Чтение стоит переключения внимания; выигрыш от чтения — это вероятность, что именно это сообщение важно, помноженная на цену пропуска. Каждый алерт, после которого не последовало действия, снижает эту вероятность в глазах читателя. В какой-то момент она падает так низко, что не-чтение становится правильной стратегией. Канал сам обучил человека не смотреть на него — и теперь приказы «смотрите внимательнее» спорят не с человеком, а с арифметикой, которая сидит в самом канале. Пока арифметика не изменится, уговоры бесполезны.
Шум в этом потоке — не несчастный случай, а свойство способа, которым алерты рождаются. Их вешают на то, что легко измерить, а не на то, что требует вмешательства: метрика уже есть, действие ещё надо придумать. Разница между этими двумя множествами и есть шум — сообщения, у которых есть повод, но нет адресата и дела.
Второй источник — веер симптомов. У одной причины их много: когда ломается зависимость, срабатывает она сама, всё, что стоит перед ней, всё, что на неё опирается, и соседи, у которых просел трафик. Для платформы это умножается: чем больше сервисов связаны друг с другом, тем больше сообщений приносит один инцидент. Канал считает симптомы, дежурному нужна причина — и усталость подкрадывается исподволь, потому что инциденты не участились, а поток симптомов перерос множество возможных действий.
Есть и третья беда, самая тихая: у канала нет обратной связи. Ничто в системе не знает, закончилось ли конкретное сообщение действием. Раз канал не знает о своей бесполезности, он не может и исправиться сам — поток может только расти.
Тупик: крутить пороги
Когда сообщений становится слишком много, рука тянется к порогам — это самая дешёвая ручка, она всегда под рукой. Поднять, расширить окно усреднения, добавить гистерезис. Ощущается как настоящая работа — и это настоящая работа, только не та, что нужна.
Порог настраивает частоту, а проблема — в применимости. Редкий бесполезный алерт остаётся бесполезным, зато к редкости добавляется незнакомость: срабатывает так редко, что никто не помнит, что он означает. Когда он наконец понадобится, реакция на него будет хуже, чем до всей чистки.
У подстройки нет критерия остановки. Обратная связь — «стало срабатывать меньше, хорошо», а это локальный оптимум: подняли здесь — стало тише; через время зафлапал соседний симптом — подняли там. В этом цикле можно сидеть сколь угодно долго, и канал останется шумом, просто более редким.
И шум переезжает. Пороги стоят на отдельных метриках, а причины живут в связях между системами. Задавили один симптом — зафлапал соседний; веер никуда не девается, вы просто играете с ним в чехарду.
Главное же вот что: подстройка — работа над каждым алертом по отдельности, а проблема — в их количестве. Линейная работа на неограниченном множестве не заканчивается никогда.
Рядом лежат ещё два хода, которые тоже не помогают. Метки серьёзности: пока все уровни падают в один канал, метка — украшение, обязательство от неё не меняется. Добавить людей в график: поток того же объёма разливается по большему числу голов, а рефлекс не-чтения тренируется в каждой из них так же быстро. Группировка и дедупликация выглядят решением, но на несортированном потоке они лишь уплотняют шум: тише, аккуратнее — и всё так же без действия.
Позиция редакции
Мы считаем, что алерт — это претензия на чужое внимание. Претензия законна, только если при сообщении есть: адресат — кто обязан отреагировать; первое действие — что этот человек делает сразу; цена игнора — что сломается, если реакции не будет. Нет любого из трёх — перед вами не сигнал, а график, который научился писать в чат.
Отсюда наша позиция: дефолтная реакция на алерт при ревью — удаление, а не починка. Бремя доказательства лежит на алерте: он обосновывает свою претензию на внимание или уходит. Не «поднимем порог», а «зачем это существует». Удалять, а не выключать: выключенный алерт остаётся в реестре, однажды кто-то включит его обратно — и он вернётся с той же претензией, но уже без памяти, почему его выключали. Реестр — тоже интерфейс, и он должен показывать правду о том, что работает.
Наша позиция неверна, если «у этого алерта нет действия» — свойство не алерта, а того, кто его читает. Вся конструкция стоит на допущении, что бесполезность — свойство сообщения. Если канал выгорел настолько, что сортирующий уже не может вспомнить, что следовало бы сделать при том или ином срабатывании, он отправит в корзину и то, что требует реакции, — вместе с настоящим шумом. Чистка тогда не лечит канал, а ампутирует рабочее покрытие. Проверка простая: после чистки посмотрите, откуда приходят инциденты. Если раньше их находил дежурный по алерту, а теперь — пользователи по тикетам, и на те же сбои срабатывало то, что вы удалили или увели в отчёт, значит сортировала усталость, а не содержание. В этом случае дефолт разворачивается: сначала чинить и заново прописывать действия, и только потом удалять.
У позиции есть границы, и мы признаём их честно. Там, где алерты обязаны существовать по договору или регламенту, удаление недоступно — честный ход: увести их из потока страниц в отчёт; наша позиция применима к маршрутизации, но не к удалению. Если алертов мало и каждый читают — не начинайте чистку ради чистки: тест обойдётся дороже шума. И если после чистки, после удаления всего, у чего нет действия, остаток всё равно не влезает в одну смену дежурного — дело уже не в наборе алертов: либо система действительно ломается слишком часто, и это задача архитектуры, либо нагрузка не соответствует графику, и это задача ротации. Гигиена на этом закончена, дальнейшее вычитание ничего не изменит.
Что делать руками
Порядок шагов важен: каждый следующий опирается на предыдущий.
Посчитайте приходящее, а не настроенное. Аудит реестра бесполезен: настроено всегда больше, чем реально приходит, а усталость растёт от приходящего. Проксируйте канал в лог и за несколько смен — сколько именно, выберите по ритму вашего дежурства — посчитайте, сколько сообщений пришло и у скольких из них за этим стояло действие. Действие — это изменение в системе или принятое решение; «посмотрел и закрыл» не считается. Отношение второго к первому — единственная метрика, которая здесь нужна; подставьте свои значения. Если оно мало, канал правильно учит людей не смотреть. Если логировать поток нечем — это шаг номер ноль: без него всё остальное делается по памяти, а память рисует картину доброжелательнее реальности.
Сортируйте по действию. Каждому сообщению, которое реально пришло, — один вопрос: что человек делает в первые минуты после него. Действие есть — алерт остаётся, и действие вписывается в его текст. Действие звучит как «посмотреть, всё ли в порядке» — это не действие, а тревога; переводите в дашборд или еженедельный отчёт. Действие не может назвать никто — удаляйте. Проверка на удаление: «если этот алерт исчезнет сегодня, кто и когда заметит?» Ответы «никто» и «косвенно, со временем» означают удаление. И сортирует тот, кто носит дежурство, а не тот, кто алерт писал: автор помнит замысел, дежурный видит фактическое поведение — это разные объекты.
Маршрутизируйте по обязательству. Каждому выжившему алерту — назначение, и назначение кодирует обязательство: то, что будит, идёт в один канал; то, что смотрят в течение смены, — в другой; то, что смотрят в конце недели, — в отчёт. Если всё падает в один канал, у вас один уровень серьёзности, как бы ни назывались метки. Только теперь заработает группировка по причине: до сортировки она уплотняла шум, после — сокращает дежурному лишние шаги.
Действие едет вместе с алертом. Текст алерта — первый шаг, а не название метрики. «Зайти туда, проверить это, при таком-то признаке сделать вот что» — читается. «Latency p99» — проматывается. Если порядок действий при дежурстве по агенту у вас уже описан, ссылка на него и есть текст алерта: сообщение, которое ведёт в готовую процедуру, доживает до прочтения; сообщение, которое ведёт в график, — нет.
Контроль на входе. Новый алерт при рождении проходит те же вопросы: адресат, первое действие, цена игнора. Алерт без владельца — будущий зомби. Гейт должен быть чек-листом, а не совещанием: тяжёлый контроль обходят «временными» алертами, а временные живут вечно.
Пересмотр. Алерты гниют: системы меняются, действия устаревают, владельцы уходят. Привяжите пересмотр к событию, которое и так происходит, — например, к передаче смены: новые календарные события умирают первыми.
Тишина в канале — не цель, а побочный эффект. Цель — чтобы каждое сообщение стоило того, чтобы его открыли.