kai.kzLab

18 сбоев, которые должен знать каждый DevOps-инженер: что случилось и чему они учат

Команда KAI Lab · · 9 мин чтения

Эти 18 сбоев — от облака Azure, сломанного 29 февраля 2012 года, до синих экранов CrowdStrike в 2024-м — показывают почти все способы, которыми ломается прод: релиз мимо проверок, бэкап, который никто не восстанавливал, дата или сертификат, утёкший ключ, лавина трафика и чужая зависимость. Ниже — таблица со всеми разборами и уроки, собранные по темам.

Каждый разбор написан по первоисточникам — постмортемам и отчётам компаний, решениям регуляторов, рассылке ядра Linux — со ссылками на них. Если у вас есть час, прочитайте три: GitLab 2017 про бэкапы, CrowdStrike 2024 про выкатку и CircleCI 2023 про секреты в CI.

Все 18 сбоев в одной таблице

КомпанияГодЧто случилосьГлавный урокРазбор
Microsoft Azure2012Сертификат «на год вперёд» получил дату 29.02.2013, автоматика разнесла ошибку по кластерамДаты тестируют явно, а срочный фикс идёт через поэтапную выкаткуСбой Azure 2012
Linux, Mozilla, Qantas2012После високосной секунды таймеры ядра срабатывали раньше срока, серверы грузили CPU до 100%Время — общая зависимость всех серверовВисокосная секунда 2012
Knight Capital2012Код не доехал до одного из восьми серверов, старый флаг включил Power Peg: больше 460 млн долларов убытка за 45 минутРучной деплой без проверки версии — лотереяСбой Knight Capital 2012
npm, left-pad2016Автор удалил 273 пакета, сборки по всему миру падали 2,5 часаЗависимости нужно фиксировать и держать у себяСбой left-pad 2016
Niantic, Pokémon GO2016Трафик в 50 раз выше плана, каскадный сбой при переезде на новый балансировщикМерить нагрузку у клиента, повторять запросы с джиттеромСбой Pokémon GO 2016
Uber2016Вход в приватный GitHub с чужими утёкшими паролями, в коде — ключ AWS, данные 57 млн человекСекреты не хранят в коде, даже в приватномУтечка Uber 2016
GitLab2017Инженер удалил каталог рабочей базы, ни один из пяти механизмов бэкапа не сработалБэкап, который не восстанавливали, — не бэкапСбой GitLab 2017
AWS S32017Неверный параметр в команде из плейбука вывел из работы подсистемы S3 в us-east-1 больше чем на 4 часаИнструменты должны отказываться делать опасноеСбой AWS S3 2017
Ericsson, O2, SoftBank2018Истёк сертификат в ПО узлов SGSN-MME, операторы в 11 странах без мобильного интернетаВсё, что истекает, — в инвентарь с алертомСбой Ericsson 2018
Capital One2019Через неверно настроенный WAF получили права роли сервера и данные около 106 млн человекМинимальные права у ролей серверов, защита метаданныхУтечка Capital One 2019
Cloudflare2019Регулярка в правиле WAF загрузила CPU до 100% по всему миру, 27 минут ошибок 502Конфигурация — тоже релиз, ей нужна канарейкаСбой Cloudflare 2019
Docker Hub2020Ввели лимиты на скачивание образов, пайплайны без входа упёрлись в toomanyrequestsКритичные образы держат в своём зеркалеtoomanyrequests в Docker Hub
Codecov2021Два месяца подменённый Bash Uploader отправлял наружу переменные окружения CI клиентовСторонние скрипты проверяют по подписи и контрольной суммеВзлом Codecov 2021
Atlassian2022Скрипт за 23 минуты удалил 883 сайта 775 клиентов, восстановление до 14 днейМягкое удаление, пробный запуск и восстановление в масштабеСбой Atlassian 2022
CircleCI2023Вредонос украл сессию SSO инженера, секреты всех клиентов пришлось менятьКороткоживущие секреты в CI и доступ к проду по запросуВзлом CircleCI 2023
Datadog2023Автообновление systemd стёрло маршруты Cilium на десятках тысяч узлов в пяти регионахАвтообновление — тоже деплой, окна в регионах разнестиСбой Datadog 2023
Reddit2023Обновление Kubernetes до 1.24 сняло метку, по которой Calico выбирал route reflectors, 314 минут простояВся конфигурация — в Git, восстановление — отрепетированоСбой Reddit 2023
CrowdStrike2024Обновление контента агента ушло сразу на все машины, около 8,5 млн компьютеров на Windows в синем экранеПоэтапная выкатка всего, что меняет поведение продаСбой CrowdStrike 2024

Уроки по темам

Релизы и изменения

Больше всего сбоев начинается с изменения, которое ушло сразу везде: правило WAF у Cloudflare, контент агента у CrowdStrike, blast-обновление у Azure. У Knight Capital и AWS S3 изменение делал человек руками. Reddit и Datadog показали, что обновление платформы или пакета ОС — такой же релиз, как код.

  • Всё, что меняет поведение прода, идёт через пайплайн: код, конфиги, правила, флаги, обновления ОС.
  • У выкатки есть канарейка, партии и автоматический стоп по метрикам.
  • Разрушительные команды проверяют масштаб и отказываются работать ниже безопасного минимума.

Бэкапы и восстановление

У GitLab было пять механизмов бэкапа, и ни один не сработал. У Atlassian бэкапы были, но массово восстанавливать сотни связанных сайтов никто не умел. У Reddit процедура восстановления кластера устарела вместе с версией Kubernetes.

  • Восстановление проверяют регулярно и на реальном объёме, а не только делают бэкап.
  • Бэкапы мониторят метрикой: возраст, размер, код возврата.
  • Время восстановления (RTO) меряют заранее, а не узнают в аварии.

Сертификаты и время

Три истории — Azure, високосная секунда и Ericsson — про то, что часы и календарь тоже часть инфраструктуры. Такие сбои бьют везде одновременно: срок наступает для всех копий в одну минуту, и поэтапная выкатка от них не спасает.

  • У каждого сертификата, токена и лицензии есть владелец, дата и алерт за недели до срока.
  • Тестовый прогон с часами, переведёнными вперёд, ловит встроенные сроки и ошибки в датах.
  • Источник времени и политика для високосных секунд одинаковы на всех серверах.

Секреты и безопасность

Uber, Capital One, Codecov и CircleCI — четыре пути к ключам: через репозиторий, облачную роль, скрипт в CI и ноутбук инженера. Везде долгоживущий секрет с широкими правами превратил одну ошибку в утечку.

  • Секреты — в менеджере секретов, в CI — короткоживущие токены через OIDC.
  • Права ролей и токенов минимальные, доступ к проду выдаётся на время.
  • Замену всех секретов репетируют: инвентарь, владельцы, порядок.

Нагрузка и ёмкость

Pokémon GO получила 50X плана, Cloudflare и високосная секунда загрузили процессоры до 100%. Худший сценарий почти всегда хуже расчётного, поэтому кроме запаса нужны способы деградировать управляемо.

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

Зависимости

left-pad и Docker Hub сломали сборки, в которых никто ничего не менял. Сбой Datadog оставил клиентов без алертов, а ПО Ericsson положило сети операторов, которые сами ничего не выкатывали. Чужой код, чужой реестр и чужой сервис падают вместе с вашим продом.

  • Версии зависимостей фиксируются в lock-файлах, пакеты и образы кэшируются в своём реестре.
  • Для каждого внешнего сервиса есть план Б: что делаем, если он недоступен.
  • Сроки и ограничения, зашитые в чужие продукты, вносятся в свой инвентарь.

Что общего у всех 18 сбоев

Одно изменение на всех сразу. Регионы, кластеры и страны изолированы друг от друга, но одинаковое изменение или одна дата бьют по всем одновременно.

Защита, которую не проверяли. Бэкапы GitLab, процедура восстановления Reddit, валидатор CrowdStrike — всё это было и не сработало, когда понадобилось.

Автоматика как усилитель. Service healing у Azure, автозамена узлов у Datadog, повторы клиентов у Pokémon GO превратили локальную проблему в массовую.

О проблеме узнали снаружи. CircleCI — от клиента, Capital One — из письма постороннего человека. Мониторинг видел не всё.

Каждый разбор устроен как хороший постмортем: хронология, причина, почему защита не сработала, что изменили. Как писать такой у себя — в статье как писать постмортем, почему в нём не ищут виноватого — в статье про blameless-постмортем.

Частые вопросы

Какой сбой из списка прочитать первым? GitLab 2017, если вы отвечаете за базы и бэкапы. CrowdStrike 2024, если выкатываете релизы. CircleCI 2023, если у вас есть CI с секретами.

Почему в подборке утечки, а не только сбои? Для DevOps-инженера утечка ключа — такой же инцидент, как падение сервиса: его надо заметить, остановить и разобрать. У Uber, Capital One, Codecov и CircleCI причина была в инфраструктуре и CI, то есть в зоне ответственности DevOps.

Можно ли разобрать эти сбои на практике? Все 18 историй есть в симуляторе DevOps KAI Lab — по две на каждый из девяти месяцев, рядом с тикетами на ту же тему. Там их не только читают, но и отвечают на вопросы, как поступил бы дежурный.

Проверить себя

На дежурстве важно, что вы сделаете первым. Бесплатный тест навыков DevOps — 18 ситуаций из реальной работы, 10–15 минут, без регистрации.

Источники

Читать дальше