9.8 Дежурства и эксплуатационная готовность
Обзор и мотивация
Кто-то прямо сейчас не спит, потому что ваша система может вызвать его по пейджеру. Дежурство это человеческая договорённость, ставящая квалифицированного человека в пределах досягаемости производственной проблемы в любой час, а эксплуатационная готовность работа, которую вы делаете заранее, чтобы у этого человека был шанс. Эта глава об этой готовности и этой человеческой системе: как проектировать ротацию, которую люди могут выдерживать годами, как решать, ради чего стоит будить человека, и как убедиться, что сервис действительно готов к эксплуатации, прежде чем позволить ему нести реальный трафик.
Держите это отдельно от двух соседей. Глава 9.3 охватывает управление инцидентами, процесс реагирования, когда что-то активно сломано: роли командования, уровни серьёзности, координацию и разборы. Глава 9.1 охватывает инженерию надёжности сайтов (SRE), более широкую дисциплину проектирования надёжности с целями уровня обслуживания и бюджетами ошибок. Эта глава стоит выше по течению инцидента и рядом с дисциплиной. Она задаёт более узкий, более личный вопрос: готов ли сервис к работе и настроен ли человек, носящий пейджер, на успех, а не на страдание? Организация может иметь отличный процесс инцидентов и всё равно выжигать своих инженеров, потому что боль дежурства определяется задолго до любого инцидента, качеством оповещений, состоянием ранбуков и человечностью расписания.
Для больших команд дежурство перестаёт быть неформальной любезностью и становится инфраструктурой. Платформа с сотнями сервисов и десятками команд не может полагаться на одного человека, случайно знающего, как всё работает. Ей нужны ротации, пути эскалации и стандарты готовности, выдерживающие уход первоначальных авторов. В корпоративной и государственной среде ставки растут. Регулируемые услуги несут обязательства по доступности и обязанность заботы о персонале, который их эксплуатирует. Система пособий или здравоохранения для граждан не может погаснуть за ночь, потому что единственный человек, понимавший её, был в отпуске. Эксплуатационная готовность то, как учреждение выполняет обещания после окончания праздника запуска, а человечное дежурство то, как оно удерживает людей, выполняющих эти обещания.
Ключевые принципы
- Вызывайте человека только для проблем срочных, действенных и реальных.
- Проектируйте ротацию для человека, у которого есть жизнь, а не для всегда доступной машины.
- Докажите, что сервис готов к эксплуатации, прежде чем он понесёт производственный трафик.
- Оповещайте о видимых пользователю симптомах и SLO, а не о каждой внутренней причине.
- Воспринимайте ранбуки и рецензии готовности как живые документы, которыми пользуются, а не подшивают.
- Кто строит сервис, тот помогает его эксплуатировать, в пределах человечных и поддерживаемых границ.
- Измеряйте здоровье дежурства и сокращайте рутину, чтобы нагрузка шла вниз, а не вверх.
Рекомендации
Проектируйте человечную устойчивую ротацию
Начните с формы расписания, потому что она решает об устойчивости больше любого инструмента. Распространённый шаблон недельная ротация с основным ответственным, получающим вызовы первым, и вторичным, выступающим резервом, когда основной не подтверждает или нуждается в помощи. Держите пул достаточно большим, чтобы любой инженер дежурил не чаще недели из четырёх, а в идеале одной из шести и реже. Ротация из четырёх человек или меньше тревожный знак: болезни, отпуска и уход людей схлопнут её в тех же двух измотанных героев.
Где вы работаете по часовым поясам, предпочитайте модель «следуй за солнцем», где команды в разных регионах каждая покрывает свои светлые часы, так что никого регулярно не вызывают в три часа ночи. Это уважает циркадный ритм, внутренний цикл сна и бодрствования организма, чьё нарушение прямая цена здоровью, а не мелкое неудобство. Когда «следуй за солнцем» невозможно, сожмите боль: более короткие блоки ночных смен, гарантированное время восстановления после плохой ночи и явное правило, что инженер, которого много вызывали ночью, не обязан на следующее утро полный день работы над функциями.
Эскалация страховочная сетка под ротацией. Определите письменно, что происходит, когда основной не подтверждает вызов в заданное окно: он переходит к вторичному, затем к руководителю команды или менеджеру, затем к более широкой группе. Политика эскалации, автоматическая и хорошо понятная, означает, что ни один вызов не падает молча на пол и ни один усталый человек не единственная линия обороны.
Сделайте политику вызовов о действенных, срочных, реальных проблемах
Самый быстрый способ уничтожить ротацию дежурств вызывать людей по поводу того, на что они не могут или не должны реагировать. Примите одно правило и яростно защищайте его: вызов это заявление, что человек должен сделать что-то сейчас. Если оповещение не проходит все три теста, срочное, действенное и описывающее реальную видимую пользователю проблему, оно не заслуживает вызова. Направьте его в заявку, на панель или в ежедневную сводку.
Враг здесь усталость от тревог, хорошо задокументированное явление, при котором люди, подвергающиеся частым тревогам, десенсибилизируются и начинают их игнорировать, включая важные. Это понятие безопасности пациентов из больниц, и оно точно переносится на программное обеспечение. Когда каждая смена приносит двадцать вызовов, а девятнадцать шум, ответственные учатся смахивать их спросонья, и двадцатый, настоящий, получает то же рефлекторное отбрасывание. Каждое терпимое вами шумное оповещение малый налог на доверие к каждому другому оповещению.
Воспринимайте качество оповещений как первоклассный инженерный результат. Отслеживайте отношение «подтверждено к действию»: из сработавших вызовов, сколько привели к тому, что человек сделал что-то важное? Оповещение, ни разу за квартал не потребовавшее действия, кандидат на удаление или понижение. Рецензируйте оповещения по регулярному ритму и давайте любому инженеру право оспорить шумное. Цель ротация, где вызов достаточно редок, чтобы всё ещё что-то значить.
Оповещайте о симптомах и SLO, а не о причинах
Самый эффективный способ сократить шум изменить то, о чём вы оповещаете. Оповещение о причинах, таких как высокий процессор, заполненный диск или единичный перезапущенный процесс, порождает поток вызовов о состояниях, которые могут никогда не затронуть пользователя и которые система нередко сама лечит. Оповещайте вместо этого о симптомах: делает ли сервис то, что нужно пользователям? Привяжите ваши оповещения-вызовы к вашим целям уровня обслуживания (SLO), числовым целям надёжности, определённым в главе 9.1, и вызывайте, когда вы сжигаете бюджет ошибок достаточно быстро, чтобы упустить цель, или когда видимый пользователю показатель вроде задержки или доли успеха пересекает черту, которую люди действительно чувствуют.
Этот подход на основе симптомов и SLO зависит от наблюдаемости и телеметрии главы 9.2, поскольку оповещение по скорости сгорания работает только при структурированных и заслуживающих доверия метриках, журналах и трассировках. Отдача драматична: горстка осмысленных оповещений о симптомах заменяет сотни оповещений о причинах, а вызов снова коррелирует с проблемой, ради которой стоит будить. Причины по-прежнему важны, но принадлежат диагностическим панелям, к которым обращается ответственный после срабатывания оповещения о симптоме, а не пути вызова.
Требуйте эксплуатационной готовности до запуска
Сервис должен заслужить путь в производство. Прежде чем он понесёт реальный трафик, проведите его через рецензию готовности к производству: структурированную проверку, в идеале кем-то вне строящей команды, что сервис действительно можно эксплуатировать. Кодифицируйте рецензию как контрольный список, ставший общим стандартом по командам. Сильный список охватывает мониторинг и SLO, оповещение, соответствующее политике вызовов, панели, ранбуки для вероятных отказов, определённое владение и ротацию дежурств, ожидания по мощности и нагрузке, анализ зависимостей и режимов отказа, резервное копирование и восстановление, безопасность и контроль доступа и план отката.
Рецензия это разговор, а не барьер для обхода. Её ценность в том, что она заставляет строящую команду столкнуться с эксплуатируемостью, пока у неё ещё есть контекст, а не обнаружить в два часа ночи полгода спустя, что никто не написал ранбук и не задал оповещение. Свяжите готовность с тестированием устойчивости главы 9.6: сервис, которому до запуска никогда не вносили отказ зависимости, даёт непроверенное обещание о том, как он отказывает. Для высокоставочных корпоративных и государственных запусков сделайте рецензию готовности обязательным документированным шагом, потому что цена публичного отказа неготового сервиса для граждан измеряется доверием не меньше, чем деньгами.
Пишите ранбуки и сценарии, которыми действительно пользуются
Ранбук это пошаговый эксплуатационный документ: как перезапустить этот сервис, провернуть эти учётные данные, осушить эту очередь, истолковать это оповещение. Сценарий это более широкое руководство по реагированию для класса ситуации. Оба бесполезны, если их никто не читает, а большинство ранбуков остаются непрочитанными, потому что устарели, расплывчаты или их невозможно найти в три часа ночи. Исправляйте режимы отказа прямо. Ссылайтесь на ранбук из самого оповещения, чтобы ответственный достигал его в один щелчок из вызова. Держите ранбуки под контролем версий рядом с кодом, как рекомендуют практики документирования главы 2.7, чтобы они рецензировались и обновлялись, как любой другой артефакт. Пишите их для измотанного сонного чужака, с конкретными командами и ожидаемыми выводами, а не прозой, предполагающей контекст автора.
Тест ранбука в том, может ли кто-то, кроме его автора, успешно следовать ему под давлением. Проверяйте это при вхождении и на игровых днях и обновляйте ранбук в момент, когда инцидент показывает, что он был неверен. Ранбук, который лжёт, хуже его отсутствия, потому что отправляет усталого ответственного уверенно не в ту сторону.
Владейте тем, что строите, в человечных пределах
Движение DevOps популяризировало «ты строишь, ты и эксплуатируешь»: команда, пишущая сервис, также носит его пейджер. Выгода реальна и стоит защиты. Когда строители чувствуют собственные вызовы, они вкладываются в надёжность, исправляют шумные оповещения и проектируют для эксплуатируемости, потому что петля обратной связи достигает их лично, а не приземляется на отдельную команду эксплуатации, не способную исправить первопричину.
У модели есть пределы, которые нужно уважать. Она требует, чтобы команды были действительно оснащены для эксплуатации своих сервисов: им даны инструменты, платформа, обучение и время хорошо делать эксплуатацию, как требуют и инженерная эффективность главы 1.10, и способы работы главы 1.4. Полное владение жестоко, когда навязано команде, слишком малой для комплектования ротации, или без платформенной поддержки, делающей дежурство выносимым. Некоторые организации ведут гибрид, где центральная команда SRE или платформы совместно владеет самыми трудными ярусами или обеспечивает ночное покрытие для сервисов, отвечающих высокой планке надёжности, освобождая продуктовые команды от рутинных ночных вызовов. Принцип, который нужно сохранить, петля обратной связи; форма может гнуться под размер команды, зрелость и человечность нагрузки.
Вводите дежурных намеренно и проводите игровые дни
Никто не должен впервые взять пейджер один и неподготовленным. Постройте путь вхождения: наблюдение за опытным ответственным в течение ротации, обратное наблюдение, где новичок ведёт, а наставник смотрит, обход панелей и ранбуков и ясная карта того, кому эскалировать. Сделайте готовность идти на дежурство явной вехой, а не допущением.
Игровые дни репетиция, делающая дежурство реальным. В игровой день вы намеренно отрабатываете отказ, в идеале в реалистичной среде, и позволяете дежурному инженеру реагировать, используя только инструменты и ранбуки, что у него были бы в настоящем инциденте. Здесь вы обнаруживаете, что ранбук устарел, на панели нет сигнала или оповещение никогда не срабатывает. Игровые дни строят мышечную память и уверенность, превращающие первый настоящий вызов из паники в процедуру, и они естественно связаны с хаос-инженерией главы 9.6.
Ведите чистые передачи и измеряйте здоровье дежурства
Передача между сменами то место, где утекает контекст. Введите краткую структурированную передачу: что сейчас деградировано, какие оповещения сработали и были подавлены, какие изменения в полёте, за чем наблюдать. Сочетайте её с базовой гигиеной дежурства, включая политику, что уходящий ответственный не оставляет беспорядка приходящему и что всё, оставленное полуисправленным, записывается.
Прежде всего измеряйте. Нельзя управлять нагрузкой, которой не видишь. Отслеживайте вызовы на смену, долю вызовов вне рабочего времени (вечера, ночи, выходные), время до подтверждения и как часто срабатывают вторичный и эскалационный ярусы. Следите за трендом, а не только числом: ротация, у которой вызовы вне рабочего времени растут квартал за кварталом, идёт к выгоранию независимо от текущего абсолютного счёта. Вводите эти метрики в регулярную эксплуатационную рецензию, где команда решает, какую рутину автоматизировать, какие оповещения убить и где готовность не дотянула. Сокращение рутины, повторяющейся ручной эксплуатационной работы, растущей с трафиком, а не фиксируемой раз, то, как вы держите нагрузку дежурств плоской, пока система растёт.
Компромиссы: плюсы и минусы
| Выбор | Плюсы | Минусы |
|---|---|---|
| Ты строишь, ты эксплуатируешь | Тугая петля обратной связи по надёжности; владельцы исправляют первопричины | Жестоко к недофинансированным или крошечным командам; неравномерная ночная нагрузка |
| Центральное дежурство SRE или платформы | Защищает продуктовые команды от рутинных ночных вызовов; глубокое эксплуатационное мастерство | Ослабляет петлю обратной связи строителей; может стать свалкой |
| Ротация «следуй за солнцем» | Никого не вызывают ночью; человечно и здорово | Нужен персонал в нескольких регионах; тяжелее накладные расходы передачи |
| Малая локальная ротация | Просто; все знают систему | Рушится при болезнях или уходе людей; быстрое выгорание |
| Оповещение по симптомам и SLO | Мало осмысленных вызовов; малая усталость | Нужна зрелая телеметрия; может пропускать медленно нарастающие причины |
| Оповещение по причинам | Ловит проблемы рано и точно | Заливает ответственных; порождает усталость от тревог |
| Строгие рецензии готовности | Меньше неприятных сюрпризов в производстве | Замедляет запуски; может казаться бюрократией при обходе |
Центральное напряжение между покрытием и человечностью. Давите на максимальное покрытие, и вы получаете большие ротации, агрессивное оповещение и полное владение повсюду, что защищает систему, перемалывая людей. Оптимизируйте исключительно под комфорт ответственного, и рискуете пробелами, где настоящая проблема ждёт без присмотра. Разрешайте это не делением разницы, а повышением качества: отличные оповещения, работающие ранбуки и готовые сервисы позволяют меньшей, спокойной ротации покрывать больше безопасно. Организации, эксплуатирующие лучше всего, обычно те, чьих ответственных вызывают реже всего, потому что они вложились в готовность, а не в выносливость. Каждый час, потраченный на удаление шумного оповещения или исправление ранбука, возвращает несколько часов человеческого внимания и защищает доверие ко всей системе.
Вопросы для обсуждения с командой
Согласились бы вы лично нести эту ротацию год и что вы бы изменили, если ответ нет? Этот вопрос прорезает абстракцию, потому что делает нагрузку личной. Принесите на разговор реальные числа: сколько вызовов сработало в прошлом месяце, сколько пришлось на время после полуночи или выходные и сколько длилось среднее подтверждение. Спросите каждого в ротации, такова ли нынешняя форма, что они могут выдерживать, не страшась своей недели дежурства, и слушайте тихие ответы не меньше громких. Если честный ответ в том, что ротация выносима, только потому что пара героев поглощает худшее, вы нашли хрупкость, которая сломается в первый раз, когда один из них уйдёт. Результат, который вы хотите, конкретный список изменений, будь то больший пул, разделение «следуй за солнцем», сокращение ночных вызовов или чистка оповещений, с владельцем и датой для каждого.
Для каждого оповещения, которое может вызвать человека, можете ли вы назвать действие, которое ожидается от ответственного? Большинство ротаций никогда этого не проверяли, и упражнение показательно. Вытащите полный список оповещений-вызовов и для каждого спросите, что ответственный должен делать, когда оно срабатывает, и как часто оно срабатывало, не приводя ни к какому реальному действию в прошлом квартале. Оповещения, не прошедшие тест, те, к которым никто не может привязать действие или которые стабильно разрешаются сами до того, как кто-либо к ним прикоснётся, шум, разъедающий доверие к каждому другому оповещению. Принесите данные «подтверждено к действию», если они есть, и будьте готовы удалять или понижать агрессивно. Цель путь вызовов, где каждое оповещение подлинная просьба о человеческой помощи, и совещание должно закончиться более коротким, острым списком оповещений, чем началось.
Когда новый инженер входит в эту ротацию, что именно его готовит и проверяли ли вы, что это работает? Вхождение в дежурство нередко предполагается, а не проектируется, и пробел проявляется в первый раз, когда новичка вызывают одного в отказ, которого он никогда не видел. Пройдите по реальному пути нового ответственного: за чем он наблюдает, какие ранбуки читает, следовал ли им кто-нибудь недавно, чтобы подтвердить, что они ещё работают, и кому он эскалирует, когда застрял. Попробуйте выбрать настоящий недавний инцидент и спросить, мог ли новичок, вооружённый только нынешними ранбуками и панелями, его разрешить. Честный ответ обычно выявляет устаревшую документацию и недостающие сигналы, а это именно то, что игровые дни призваны выявить раньше настоящего инцидента. Уйдите с определённой вехой готовности к дежурству и расписанием игровых дней, которые будут держать её честной.
Куда на самом деле падают наши вызовы вне рабочего времени и готовы ли мы менять штат или покрытие, чтобы защитить сон людей? Ночные вызовы и вызовы в выходные несут цену здоровью, которую голый счёт скрывает, поэтому ротация, выглядящая терпимой в среднем, может тихо разрушать нескольких людей, оказавшихся в тех, кто ловит отказы в три часа ночи. Принесите разбивку вызовов по часу и дню недели, по сервису и по ответственному и ищите концентрацию, а не среднее. Конкурирующее соображение реально: покрытие «следуй за солнцем» требует персонала более чем в одном регионе и добавляет накладные расходы передачи, тогда как малая локальная ротация проще, но оставляет кого-то владеющим ночами. Решите намеренно, будет ли исправление ротацией во втором регионе, центральной платформенной командой, берущей ночные ярусы, более короткими ночными блоками с гарантированным временем восстановления или чисткой оповещений, убирающей ночной шум у источника. Для корпоративных и государственных операторов воспринимайте обязанность заботы о дежурном персонале как формальное обязательство с владельцем и сообщаемой метрикой, а не лозунг благополучия, потому что регулятор или совет работников могут в итоге попросить вас это показать.
Является ли наша рецензия готовности к производству подлинным разговором о том, как сервис отказывает, или контрольным списком, обходимым ради прохождения барьера? Рецензия готовности окупается, только если меняет то, что отгружается, а режим отказа форма, заполненная днём перед запуском ради процесса, в который никто не верит. Принесите последние несколько завершённых рецензий и спросите, что каждая на самом деле поймала: недостающий ранбук, непроверенный откат, оповещение, которое никогда не срабатывало, или ничего. Напряжение между скоростью запуска и эксплуатационной строгостью, а рецензия, ощущаемая как бюрократия, будет обходиться, тогда как выявляющая настоящие режимы отказа будет вызывать обиду, пока в первый раз не спасёт чью-то ночь. Решите, кто ведёт рецензию, человек ли это вне строящей команды и какие свидетельства, такие как внесённый отказ зависимости или ранбук, которому последовал чужак, считаются прохождением. В корпоративных и государственных запусках храните завершённую рецензию как артефакт аудита и привяжите её к тестированию устойчивости главы 9.6, потому что публичный отказ неготового сервиса для граждан стоит доверия, которого никакой откат не вернёт.
Где «ты строишь, ты эксплуатируешь» действительно нам служит и где оно тихо жестоко к команде, которую мы не обеспечили ресурсами для эксплуатации её сервиса? Полное владение создаёт петлю обратной связи, заставляющую строителей исправлять шумные оповещения и проектировать для эксплуатируемости, но навязанное команде, слишком малой для комплектования человечной ротации, оно становится медленным двигателем выгорания в наряде подотчётности. Принесите карту того, какие команды владеют какими пейджерами, насколько велика каждая ротация на деле, если убрать людей, никогда не берущих трудный вызов, и какие платформу, инструменты и обучение имеет каждая команда для хорошей эксплуатации. Конкурирующее тяготение между чистым принципом универсального владения и неряшливой реальностью, где некоторым ярусам нужна центральная команда SRE или платформы для совместного владения самой трудной работой по надёжности или обеспечения ночного покрытия. Результат, который вы хотите, честная классификация каждого сервиса в полностью принадлежащие, совместно принадлежащие или централизованно покрываемые, с названным пробелом ресурсов для любой команды, которую вы просите вести то, что она не может выдержать. Для большой или государственной организации добавьте сроки закупок и найма для платформенной поддержки и штата, которые предполагает человечное владение, потому что команда, которую нельзя укомплектовать в нужное окно, та, которую вы настраиваете на провал.
Взгляд по секторам
Стартап. С горсткой инженеров все на дежурстве, и нет места, где мог бы спрятаться героический круг. Тратьте дефицитное время на два изменения, окупающиеся быстрее всего: удалите оповещения о причинах и вызывайте только по паре SLO, отслеживающих ваш основной поток, и ссылайтесь на одностраничный ранбук из каждого оставшегося оповещения. Пропустите сложные инструменты и «следуй за солнцем»; общая таблица, автоматическая эскалация от основного к вторичному и жёсткое правило, что плохая ночь покупает следующее утро выходным, унесут вас дальше любой покупки платформы.
Малый бизнес. У вас, вероятно, нет выделенного SRE и вы не можете укомплектовать ночную ротацию, поэтому опирайтесь на то, что покупаете, а не на то, что строите. Предпочитайте управляемые сервисы и хостинг, чей провайдер несёт глубокие инфраструктурные вызовы, и используйте размещённый инструмент вызова, а не катайте свою эскалацию. Формулируйте готовность как короткий список и горстку осмысленных оповещений, привязанных к тому, что заметил бы клиент, и будьте честны, что некоторые сервисы просто не должны вызывать человека ночью, когда хватило бы утренней заявки.
Крупная организация. Проблема согласованность по многим командам: общая рецензия готовности к производству, общая политика вызовов и репозиторий ранбуков под контролем версий, так что инженер, переходящий между командами, сразу понимает систему дежурств. Сделайте здоровье дежурства управляемой метрикой с порогами вызовов вне рабочего времени, запускающими рецензию, стандартизируйте эскалацию и передачу, чтобы ни один вызов не падал молча, и позвольте центральной платформенной команде совместно владеть самыми трудными ярусами. Управляйте портфелем ротаций так, как управляете портфелем сервисов, с данными о рутине, нагрузке вызовами и риске выгорания, питающими регулярную эксплуатационную рецензию.
Государственный сектор. Правила закупок, прозрачность и обязанность заботы формируют договорённость. Воспринимайте здоровье дежурного персонала как формальное проверяемое требование и, где ночной штат ограничен, заключайте контракт с партнёром по эксплуатации «следуй за солнцем», чтобы никого из госслужащих не вызывали регулярно в три часа ночи. Храните каждую завершённую рецензию готовности как артефакт аудита, пишите ранбуки для исполнения ответственным, не строившим систему, потому что люди, эксплуатирующие её через пять лет, не будут её авторами, и репетируйте сезонный пик игровыми днями до того, как граждане встретят его по-настоящему.
Примеры
Стартап. Стартап из двенадцати человек запускает первый платный продукт и ставит всех шестерых инженеров в недельную ротацию с основным и вторичным. В первый месяц пейджер срабатывает каждую ночь, в основном на оповещения о процессоре и диске, сами разрешающиеся, и двое инженеров тихо начинают искать работу. Команда останавливается и перестраивает: они удаляют каждое оповещение о причине, определяют два SLO для оформления заказа и поиска и вызывают только по сгоранию бюджета ошибок. Вызовы падают примерно с сорока в неделю до трёх. Они добавляют одностраничный список готовности, который должен пройти каждый новый сервис, и ссылаются на каждый ранбук прямо из его оповещения. Дежурство из причины ухода людей становится управляемой частью работы, и они сделали это таблицей и дисциплиной, а не дорогим инструментом.
Крупная организация. Глобальная платёжная компания ведёт сотни сервисов по модели «ты строишь, ты эксплуатируешь», поддержанной центральной платформенной командой, обеспечивающей систему вызовов, процесс рецензии готовности и общий репозиторий ранбуков под контролем версий. Каждый сервис проходит документированную рецензию готовности к производству до запуска, охватывающую SLO, оповещение, ранбуки, мощность и откат. Здоровье дежурства отслеживаемая метрика: команды, чьи вызовы вне рабочего времени превышают порог, запускают автоматическую рецензию, а платформенная команда предлагает совместно владеть работой над надёжностью, пока нагрузка не снизится. Игровые дни проводятся ежеквартально против реалистичного внесения отказов. Поскольку стандарт единообразен, а инструменты общие, инженер может переходить между командами и сразу понимать систему дежурств, а руководство видит по каждой команде, устойчива ли человеческая нагрузка.
Государственный сектор. Национальное налоговое ведомство ведёт систему подачи с жёсткими сезонными пиками и юридическим обязательством оставаться доступным для граждан. Поскольку персонал сконцентрирован в одном часовом поясе, а ночной штат ограничен, ведомство заключает с партнёром по эксплуатации договорённость «следуй за солнцем», чтобы никого из госслужащих не вызывали регулярно среди ночи, и воспринимает здоровье и обязанность заботы о дежурном персонале как формальное требование. Каждое изменение сервиса проходит рецензию эксплуатационной готовности до развёртывания, а контрольный список хранится для аудита. Ранбуки написаны для исполнения ответственным, не строившим систему, потому что люди, эксплуатирующие её через пять лет, не будут теми, кто её писал. В сезон подач ведомство проводит игровые дни по сценарию пиковой нагрузки, так что ответственные встречают всплеск на репетиции, прежде чем встретят его по-настоящему.
Бизнес-обоснование: мотивы, ROI и TCO
Отдача от эксплуатационной готовности и человечного дежурства проявляется в двух книгах: надёжности системы и удержании команды. Со стороны надёжности сервисы, прошедшие рецензию готовности и несущие оповещения о симптомах, отказывают реже и восстанавливаются быстрее, потому что ранбук есть, оповещение осмысленно, а ответственный отрепетирован. Среднее время подтверждения и среднее время восстановления оба падают, когда вызов достигает подготовленного человека со ссылкой на ранбук, а не растерянного, ищущего контекст. Со стороны людей дежурство ведущая причина ухода инженеров, а замена старшего инженера стоит во много раз больше вложений, потребовавшихся бы для исправления ротации. Профессиональное выгорание, состояние хронического рабочего истощения, которое Всемирная организация здравоохранения признаёт профессиональным феноменом, дорого именно потому, что забирает ваших самых опытных людей, тех, кто понимает систему, и вытесняет их.
Цена принятия в основном разовая и скромная. Вы пишете список готовности, переносите оповещения с причин на симптомы, помещаете ранбуки под контроль версий и настраиваете метрики здоровья дежурства. Постоянная цена дисциплина рецензии оповещений, проведения игровых дней и соблюдения человечного расписания. Цена пренебрежения накапливается тихо: шумные оповещения порождают усталость, усталость порождает пропущенные настоящие инциденты и уходы, а каждый уход уносит операционное знание, что повышает нагрузку на оставшихся. Чтобы обосновать перед руководством, свяжите здоровье дежурства с метриками, за которыми оно уже следит: частотой и длительностью инцидентов, временем подтверждения, незапланированным уходом и трендом вызовов вне рабочего времени. Ротация, у которой вызовы вне рабочего времени падают, пока система растёт, прямое свидетельство того, что ваши вложения в надёжность работают и что ваши инженеры всё ещё будут здесь в следующем году.
Антипаттерны и ловушки
- Героическая ротация: два-три человека тихо поглощают каждый трудный вызов, так что расписание выглядит нормально на бумаге и рушится в момент ухода одного из них.
- Вызовы по причинам: оповещение о процессоре, памяти и диске вместо видимых пользователю симптомов, заливающее ответственных вызовами, которым никогда не нужен был человек.
- Терпимая усталость от оповещений: заведомо шумные оповещения месяцами остаются в пути вызовов, потому что их удаление кажется рискованным, пока ответственные не начнут игнорировать всё.
- Гниение ранбуков: документы, написанные раз при запуске, никогда не обновлявшиеся и уверенно неверные, когда усталый ответственный следует им в три часа ночи.
- Владение без поддержки: навязывание «ты строишь, ты эксплуатируешь» команде, слишком малой для комплектования ротации или лишённой платформы и инструментов для человечной эксплуатации.
- Театр готовности: список рецензии, заполненный ради прохождения барьера, а не ради честного столкновения с тем, как сервис отказывает.
- Запустить и бросить: отгрузка сервиса без ротации, оповещений и ранбуков с последующим обнаружением пробела во время первого сбоя.
- Неизмеренная нагрузка: нет данных о вызовах на смену или вызовах вне рабочего времени, так что выгорание невидимо, пока люди не уходят.
- Первый вызов без репетиции: постановка нового инженера на дежурство без наблюдения и игрового дня с последующим удивлением, что он замирает.
Модель зрелости
- Уровень 1, Начальный: Дежурство неформально и реактивно. Нескольким людям звонят, когда что-то ломается, оповещения срабатывают на причины и в основном шум, ранбуки отсутствуют или устарели, сервисы запускаются без проверки готовности, и никто не измеряет человеческую нагрузку, пока кто-то не выгорит или не уйдёт.
- Уровень 2, Развитие: Появляются базовые практики, различающиеся по командам. У некоторых ротаций есть определённые основной, вторичный и эскалация, некоторые оповещения настроены, а некоторые ранбуки написаны, и существует список готовности, но применяется непоследовательно. Вызовы могут считаться в командах, которые утруждаются, ночные вызовы распространены, а вхождение в дежурство импровизировано, а не спроектировано.
- Уровень 3, Стандартизация: Рецензии готовности документированный шаг перед запуском, принуждаемый по командам. Вызовы основаны на симптомах и SLO по общей политике, ранбуки живут под контролем версий и ссылаются из оповещений, вхождение включает наблюдение и игровые дни, передачи следуют структурированному формату, а эскалация достаточно единообразна, чтобы инженер, переходящий между командами, сразу узнавал систему.
- Уровень 4, Управление: Дежурство измеряется и контролируется относительно базовых значений. Вызовы на смену, доля вне рабочего времени, время до подтверждения, частота эскалации и отношение «подтверждено к действию» отслеживаются по командам и сравниваются с целями, так что ротация, дрейфующая к выгоранию, видна до ухода людей, а не после. Пороги запускают рецензию, качество оповещений проверяется по свидетельствам того, какие вызовы привели к реальному действию, а решения о штате и владении определяются данными, а не анекдотами.
- Уровень 5, Оркестрация: Здоровье дежурства непрерывно улучшаемый результат, интегрированный по организации. Тренды вызовов и вызовов вне рабочего времени падают, пока система растёт, рутина систематически автоматизируется, «следуй за солнцем» или эквивалент защищает сон, игровые дни и внесение отказов рутинны, а организация адаптирует владение, покрытие и стандарты готовности, учась на каждой смене, перебалансируя нагрузку между командами и регионами по мере сдвигов картины рисков.
Идеи для обсуждения
- Каково ваше нынешнее отношение вызовов, приведших к реальному действию, к вызовам, разрешившимся сами, и что потребовалось бы, чтобы его измерить?
- Если бы ваш самый знающий ответственный ушёл завтра, какие сервисы стали бы небезопасны для эксплуатации и почему?
- Где «ты строишь, ты эксплуатируешь» вам хорошо служит и где оно тихо жестоко к недофинансированной команде?
- Когда вы в последний раз наблюдали, как новый инженер следует одному из ваших ранбуков в реалистичных условиях, и что сломалось?
- Растут или падают ваши вызовы вне рабочего времени за последние четыре квартала и владеет ли кто-нибудь этим числом?
- Какой пункт рецензии готовности, будь он принужден строго, предотвратил бы ваш самый недавний плохой запуск?
Главные выводы
- Готовность дежурств решается до любого инцидента, качеством ваших оповещений, ранбуков и ротации, а не героизмом во время сбоя.
- Вызывайте человека только для проблем срочных, действенных и видимых пользователю; оповещайте о симптомах и SLO и направляйте всё остальное в заявки и на панели.
- Проектируйте ротации для людей с жизнью: достаточно большие пулы, «следуй за солнцем», где возможно, автоматическая эскалация и соблюдаемое время восстановления.
- Доказывайте готовность сервисов до запуска рецензией готовности к производству, держите ранбуки под контролем версий и со ссылками из оповещений и репетируйте игровыми днями.
- Измеряйте здоровье дежурства, особенно вызовы вне рабочего времени и время до подтверждения, и снижайте нагрузку сокращением рутины и шума, а не просьбой к людям терпеть больше.
Источники и дополнительное чтение
- Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy (eds.), Site Reliability Engineering: How Google Runs Production Systems
- Betsy Beyer, Niall Richard Murphy, David K. Rensin, Kent Kawahara, and Stephen Thorne (eds.), The Site Reliability Workbook: Practical Ways to Implement SRE
- Rob Ewaschuk, “My Philosophy on Alerting,” in Site Reliability Engineering appendix
- John Allspaw and Jesse Robbins (eds.), Web Operations: Keeping the Data on Time
- Nicole Forsgren, Jez Humble, and Gene Kim, Accelerate: The Science of Lean Software and DevOps
- Gene Kim, Jez Humble, Patrick Debois, and John Willis, The DevOps Handbook
- Michael T. Nygard, Release It! Design and Deploy Production-Ready Software
- World Health Organisation, ICD-11, entry on burn-out as an occupational phenomenon