Часть 2.
Если вам кажется, что инцидент — это про баги, вы просто ещё не видели, как баги превращаются в совещания.
Первый ночной алерт приходит в момент, когда организм ещё верит, что сон — это базовая потребность, а не роскошь уровня «enterprise».
Пейджер‑амулет (теперь уже и на моём поясе) запел так, будто ему лично не понравилось моё решение спать.
Текст был коротким:
«PROD: всё красное».
Я приехал в Башню релизов быстрее, чем когда‑либо ездил на работу. По дороге я повторял в голове мантру SRE: «Сначала стабилизируй. Потом разбирайся. Потом пишешь постмортем так, будто завтра судебный процесс».
В зале инцидентов уже собрались все.
Артур стоял у доски и рисовал мелом круг, как маг, которому нужно держать демона внутри границ.
— Боевой канал создан, — сказал он. — Марфа, ты коммуникации. Гаврила, база. Я — координация. Ты… — он посмотрел на меня, — ты сегодня глаза и уши. Метрики, логи, следы. Всё, что поможет найти «иглу».
— Почему «иглу»? — спросил я.
— Потому что в любой огромной проблеме есть маленькая причина, — сказал Артур. — Просто… она обычно тщательно спрятана под слоями «а давайте».
Марфа уже печатала сообщения стейкхолдерам так быстро, будто играла на клавесине.
— «Сервис недоступен. Команда работает. Следующее обновление через пятнадцать минут», — продекламировала она. — Пятнадцать — потому что звучит уверенно. Никто не верит «когда будет».
Гаврила сидел у своего котла и шептал на древнем языке:
— select… select… кто тебя так индексировал…
Экран мониторинга напоминал рождественскую ёлку, которую повесили на кардиограмму: всё мигало, всё было красным, и где‑то наверху горела одна маленькая зелёная точка, как насмешка.
— Что упало первым? — спросил я.
— Вопрос философский, — ответил Артур. — Упало сначала доверие. Потом уже сервис.
Я открыл логи. Логи были как древняя рукопись: много символов, мало смысла и явное ощущение, что автор хотел причинить боль.
На одном сервисе повторялось:
«timeout talking to dragon».
— Дракон, — буркнул Некромант Легаси, появившийся из тени так, как появляются архитекторы, когда горит прод. — Я же говорил.
— Дракон сейчас нас всех сожрёт, — сказал Артур. — Так что либо ты помогаешь, либо даёшь нам хотя бы карту его пещеры.
Некромант вздохнул. Это был вздох человека, который в 2012 писал монолит, а теперь слушает про микросервисы и «сервис‑меш».
— Карта? — сказал он. — У дракона нет карты. У дракона есть привычки. Он любит состояние. Он любит транзакции. Он не любит, когда его пытаются разделить на «нано‑сервисы ради гибкости».
Марфа подняла голову:
— Вот, кстати, про гибкость. Пока всё горит, давайте обсудим: может, нам нужно срочно внедрить кубер? Тогда же будет стабильнее.
Я почувствовал, как внутри меня кто‑то кричит: «Нет!»
— Кубер — это не заклинание лечения, — сказал я осторожно. — Это… другое измерение проблем.
Марфа улыбнулась как человек, который слышал слово «измерение» и увидел в нём KPI.
— Но у всех же так, — сказала она. — Мы отстаём. Нам нужен большой проект. Иначе как объяснить совету старейшин, что мы что‑то делаем?
Артур посмотрел на меня так, как смотрят на инженера, которому предлагают «проект ради проекта».
— Позже, — отрезал он. — Сейчас — стабилизация.
Я нашёл метрику, которая падала раньше остальных: очередь сообщений. Она росла, как грибы после дождя, и в какой‑то момент превратилась в лавину.
— Очередь забилась, — сказал я.
— Почему? — спросил Артур.
— Потому что потребители умирают, — ответил я. — А умирают они потому что… — я ткнул в график, — база отвечает медленно.
Гаврила поднял глаза — и в них было человеческое страдание.
— Не база отвечает медленно, — сказал он. — Люди спрашивают у базы глупости.
Он показал мне запрос. Запрос был прекрасен, как демонстрация того, что «работает на тесте» — это культурный миф.
— Кто написал? — спросил Артур.
Все посмотрели на Некроманта Легаси. Некромант молчал.
— Не я, — сказал он наконец. — Я бы так не сделал. Это… — он замялся, будто слово обжигало, — это новый сервис.
Марфа вздохнула:
— Ну хоть что‑то новое.
И тут дверь распахнулась.
Вошла Инквизиторша Безопасности.
— Что происходит? — спросила она.
— Инцидент, — сказал Артур. — Нам нужен доступ, чтобы быстро ограничить трафик и откатить часть функционала.
Инквизиторша подняла бровь.
— Быстро? — переспросила она. — Слово «быстро» не проходит проверку threat model.
Артур сжал челюсть.
— Если мы сейчас не ограничим трафик, пользователи уйдут. Это риск.
— Если вы сейчас дадите доступ без печатей, вы создадите дыру. Это риск, — сказала Инквизиторша. — Риски должны быть согласованы.
Я поднял руку:
— Можно компромисс? Мы делаем временную печать: ограниченный доступ на один час, под конкретное действие, с логированием. Потом закрываем.
Инквизиторша посмотрела на меня так, будто я предложил здравый смысл.
— Ты новый, — сказала она.
— Да.
— Поэтому ты ещё думаешь, что компромиссы возможны, — ответила она. И всё же — кивнула. — Ладно. Один час. Один доступ. Потом отчёт.
Артур выдохнул так, будто его выпустили из контейнера.
Мы ограничили трафик. Откатили функциональность. Поставили «рубильник» — фича‑флаг, который в нашем мире звучал как «проклятие»: выключили то, что приносило деньги, чтобы сохранить то, что приносит жизнь.
Система начала оживать.
Красное на графиках стало розовым. Розовое — серым. Серое — почти нормальным.
Марфа написала стейкхолдерам:
— «Стабилизировали. Идём в анализ. Следующее обновление через тридцать минут».
— Почему тридцать? — спросил я.
— Потому что пятнадцать уже использовали, — сказала она. — Нельзя повторяться, аудитория заметит.
Инцидент был локализован. Не решён — но локализован. Это как посадить дракона на цепь: он всё ещё дракон, но уже не бегает по городу.
Тогда в зал вошёл человек, которого я раньше не видел. В руках он держал толстую книгу. На обложке золотом было выбито:
«OKR».
— Доброе утро, команда, — сказал он. — Я Архимаг OKR. Слышал, у вас тут были сложности. Отлично — значит, есть рост. Мы удвоим скорость релизов и сократим инциденты вдвое.
Артур посмотрел на него так, как смотрят на человека, который обещает «вдвое» в системе, где всё связано.
— Каким образом? — спросил Артур.
Архимаг улыбнулся.
— Мы начнём с важного. С инициативы «Всё переписать». И, конечно, «Всё в кубер». Я уже назначил кик‑офф.
Марфа сияла. Некромант Легаси исчез в тень. Гаврила тихо прошептал:
— Господи, дай мне силы не убить никого транзакцией.
А я понял, что следующая битва будет не за метрики. Следующая битва будет за здравый смысл.
Продолжение следует...
