
Приветствую, Новенький! Рад, что вы завершили онбординг в нашей корпорации ACME. У меня для вас есть первый тикет. Это простая задача, всего два сторипоинта, но она позволит вам немного научиться тому, как взаимодействуют наши сервисы. Просто реализуйте SLO доступности нашего сервиса Foo. Вы ведь знаете, как реализуются SLO?
Думаю, нам стоит стремиться к четырём девяткам. Я уверен, что вы в курсе всех best practices нашей отрасли, поэтому не буду надоедать вам советами. Если нужно, внизу есть бумажная Google SRE Book. Мне кажется, это быстрая задача; сможете представить свой SLO к пятничному демо?
Наступает обычная скучная пятница
Спасибо за презентацию, Новенький, отличная работа! Здорово, что вы освоили наши метрики Prometheus, генерируемые сервисом Foo, но у меня есть пара вопросов. Ваш SLO показывает, что мы уже исчерпали наш бюджет ошибок, хотя в последнее время инцидентов не было. Может быть, что-то не так с расчётами? ... Так, сейчас... Ага, я вижу, в чём проблема! Коды ответов 4xx учитываются, как плохие события SLO. Это ерунда! Сервис Foo работает ровно так, как и должен. Если пользователи выполняют недопустимые запросы или ищут несуществующие ресурсы, то это не наша проблема и не показатель проблем Foo. Поэтому просто исключите эти запросы 4xx, после чего мы сможем добавить в ваш SLO алерты и закрыть тикет. Совещание закончено, увидимся на ретро через пять минут.
Постмортем инцидента утром во вторник
Понятно... Джон решил, что если установить ограничение частоты равной 0, то это, по сути, отключит фичу, но на самом деле любое значение, отличающееся от положительного целого означает, что использование фичи не ограничено. Я назначу Джону action item для изменения документации по конфигурации.
Но на самом деле больше всего мне хочется понять, почему мы узнали об этом только тогда, когда мне написала команда разработчиков Bar? Новенький, почему этого не перехватил ваш SLO? Сервис Foo не работал четыре часа! По моим расчётам, при частоте ошибок 100% SLO должен был сработать через пять секунд.
... А, ясно. Сервис Foo лежал, а потому не генерировал никаких метрик. Наш SLO не видел никаких запросов и сбоев, поэтому алерта и не было. Небольшой, но, к сожалению, очень важный недосмотр, Новенький. Нужно было использовать метрики, генерируемые балансировщиком нагрузок. Я снова открою тикет SLO, сославшись на протокол этой встречи. Устраните эту ошибку.
За полчаса до ухода домой в четверг
Привет, Новенький! Я как раз поговорил с проект-менеджером команды Bar. Похоже, у неё возникают проблемы с созданием объектов через наш веб-UI. Что-то связанное с тем, что фронтенд отправляет строку, а бэкенд ожидает объект, содержащий строку, поэтому возвращает 400. Я уже договорился с нашим фронтендером об исправлении UI, но ещё подумал: разве не должно это отражаться в нашем SLO? Знаю, я говорил, что нужно исключить коды ответов 4xx из статистики ошибок. Но если они поступают от нашего UI, то это другое дело, потому что за него отвечаем мы и он часть сервиса Foo. Можете ли вы изменить SLO так, чтобы он учитывал коды ответов 4xx как ошибки, если они поступают от нашего веб-UI? Чтобы определять, что запрос поступает от UI, можете использовать информацию заголовков, потому что мы всегда задаём нестандартные заголовки.
... Хм, это неприятно. Значит, поскольку теперь вы используете для вычисления SLO метрики балансировщика нагрузок, сложно будет создавать новые метрики на основании значений заголовков. Правильно я вас понял? Тем не менее, вряд ли это какая-то редкая проблема. В конце концов, мы не делаем ничего необычного с сервисом Foo, а значит, подобные трудности возникали у многих компаний. Наверно, в Интернете есть куча литературы по решению этой проблемы. Сможете представить своё решение к завтрашнему демо?
Наступает ещё одна унылая, безжизненная пятница
Ещё раз благодарю вас, Новенький, за это полезное демо. Кто бы мог подумать, что спустя неделю мы всё ещё будем говорить об этом SLO. Ха-ха-ха! Мне очень понравилось решение скомбинировать метрику подсчёта общего количества запросов из балансировщика нагрузок с нашей новой специализированной метрикой сервиса Foo. Очень инновационно. Сегодня же представлю его руководству.
Дождливое, не предвещающее ничего хорошего утро понедельника
Привет, Новенький. Послушайте, если эта задача оказалась для вас слишком сложной, нужно было попросить о помощи. В пятницу представил ваш SLO руководству, и оно заметило некоторые проблемы с вашим SLO. Вот, посмотрите! Это SLI второй половины для в пятницу, сразу после 13:00. По какой-то причине SLI немного падает. А потом повышается до 102%! Руководство должно поверить, что мы в команде Foo пишем волшебные приложения с доступностью выше 100%? Что это вообще может означать?! Я не специалист в SLO, но знаю, что доступность не может быть больше 100%.
... Нет. Я не хочу слышать никаких ваших оправданий о разном времени скрейпинга. Если результат иногда оказывается неправильным, то можем ли мы вообще ему доверять? Даже дети знают, что доступности на 102% быть не может.
Очевидно, у нас проблема. Задача признана стоящей два сторипоинта, прошло две недели, а мы всё ещё её обсуждаем. Это доказывает несоответствие между вашим уровнем навыков и тем, который мы ожидаем на вашей должности. Сегодня утром я поговорил с HR, сейчас у вас будет совещание с ним в кабинете 101. Ноутбук можете оставить здесь. Прощайте, Новенький.
Dhwtj
Реквестирую разъяснительную бригаду
Dhwtj
Это сатирический рассказ (перевод статьи с английского), описывающий «хоррор-стори» из жизни SRE-инженера (Site Reliability Engineering). В нем высмеиваются корпоративная абсурдность, некомпетентное управление и то, как, казалось бы, простая задача превращается в кошмар из-за постоянно меняющихся требований.
Вот подробный разбор того, что произошло в истории, по этапам:
1. Начало: «Простая задача»
Новичку дают задачу на 2 сторипоинта (то есть очень простую, на полдня): реализовать SLO (Service Level Objective — соглашение об уровне качества услуги) для доступности сервиса. Менеджер требует «четыре девятки» (99.99% доступности), считая это само собой разумеющимся и не давая никаких инструкций.
2. Первая пятница: Проблема с 4xx ошибками
Новичок делает SLO по учебнику (учитывая все коды ответов, кроме 200-ок, как ошибки). На демо менеджер недоволен: график показывает, что они исчерпали бюджет ошибок.
Суть проблемы: В логах много кодов 4xx (ошибки клиента, например, 404 Not Found).
Реакция менеджера: Он заявляет, что это не вина сервиса, а тупых пользователей, и заставляет исключить 4xx из расчетов.
Урок: Определение «успешного запроса» всегда субъективно и зависит от бизнеса.
3. Вторник: Инцидент и «тишина»
Сервис лежит уже 4 часа, но аларма не было.
Суть проблемы: Сервис упал так, что перестал отправлять какие-либо метрики («тишина»). Система мониторинга видела: запросов = 0, ошибок = 0. 0/0 = 0% ошибок (или отсутствие данных), поэтому тревога не сработала.
Требование: Менеджер требует переключиться на метрики с балансировщика нагрузки (Load Balancer), так как он видит, что сервис недоступен, даже если сам сервис «молчит».
4. Четверг: Проблема с фронтендом
Всплывает новая проблема: фронтенд (веб-интерфейс) сломан и шлет неправильные данные, из-за чего бэкенд отдает ошибку 400 (Bad Request).
Суть проблемы: Менеджер ранее запретил считать 4xx ошибками, но тут 4xx-ошибка возникает из-за бага их же фронтенда. Менеджер хочет, чтобы эти конкретные 4xx считались ошибками доступности.
Техническая ловушка: Балансировщик, метрики с которого теперь используются, не умеет смотреть заголовки (чтобы отличить запросы от своего UI от запросов внешних клиентов).
Решение новичка: Придется изобретать сложную схему («франкенштейна»), соединяя общие метрики с балансировщика и специфические метрики самого сервиса.
5. Следующая пятница: «Инновация»
Новичок показывает сложное, нестандартное решение. Менеджер, не понимая технической сути и рисков такой хрупкой архитектуры, хвалит его и показывает руководству.
6. Финал (Понедельник): 102% и увольнение
Руководство видит отчет, где доступность скачет и показывает 102%.
Техническая причина: Новичок пытался объяснить «race condition» (состояние гонки) при сборе метрик. Prometheus собирает (скрейпит) метрики не мгновенно и не идеально синхронно. Если числитель (общее кол-во запросов) обновился, а знаменатель (успешные) еще нет, или метрики взяты из разных источников в разное время, математика ломается, давая абсурдные проценты.
Результат: Менеджер, который сам поставил невыполнимые и противоречивые условия, обвиняет новичка в некомпетентности за то, что задача на 2 балла затянулась на 2 недели. Новичка увольняют, забирая ноутбук.
Главная мысль
Рассказ демонстрирует Dunning-Kruger effect в менеджменте и теорию кривой обучения:
Менеджер не понимал сложность задачи («просто сделайте SLO»).
Постоянно менялись требования (скопируйте 4xx — нет, не копируйте — нет, копируйте только от UI).
Инструменты (метрики) использовались не по назначению без правильной настройки.
Вину за архитектурные проблемы и управленческий хаос свалили на исполнителя самого низшего звена.
Akter
А не плохо так нейронки уже краткую выжимку генерят
Dhwtj
Просто мне было лень разобраться что такое SLO и почему 102%
Кстати, вижу что ошибкой новичка было что не настоял закрыть тикет сразу. Потому что дальше уже была вторая задача. А потом вообще почти исследование