18 сбоев, которые должен знать каждый DevOps-инженер: что случилось и чему они учат
Команда KAI Lab · · 9 мин чтения
Эти 18 сбоев — от облака Azure, сломанного 29 февраля 2012 года, до синих экранов CrowdStrike в 2024-м — показывают почти все способы, которыми ломается прод: релиз мимо проверок, бэкап, который никто не восстанавливал, дата или сертификат, утёкший ключ, лавина трафика и чужая зависимость. Ниже — таблица со всеми разборами и уроки, собранные по темам.
Каждый разбор написан по первоисточникам — постмортемам и отчётам компаний, решениям регуляторов, рассылке ядра Linux — со ссылками на них. Если у вас есть час, прочитайте три: GitLab 2017 про бэкапы, CrowdStrike 2024 про выкатку и CircleCI 2023 про секреты в CI.
Все 18 сбоев в одной таблице
| Компания | Год | Что случилось | Главный урок | Разбор |
|---|---|---|---|---|
| Microsoft Azure | 2012 | Сертификат «на год вперёд» получил дату 29.02.2013, автоматика разнесла ошибку по кластерам | Даты тестируют явно, а срочный фикс идёт через поэтапную выкатку | Сбой Azure 2012 |
| Linux, Mozilla, Qantas | 2012 | После високосной секунды таймеры ядра срабатывали раньше срока, серверы грузили CPU до 100% | Время — общая зависимость всех серверов | Високосная секунда 2012 |
| Knight Capital | 2012 | Код не доехал до одного из восьми серверов, старый флаг включил Power Peg: больше 460 млн долларов убытка за 45 минут | Ручной деплой без проверки версии — лотерея | Сбой Knight Capital 2012 |
| npm, left-pad | 2016 | Автор удалил 273 пакета, сборки по всему миру падали 2,5 часа | Зависимости нужно фиксировать и держать у себя | Сбой left-pad 2016 |
| Niantic, Pokémon GO | 2016 | Трафик в 50 раз выше плана, каскадный сбой при переезде на новый балансировщик | Мерить нагрузку у клиента, повторять запросы с джиттером | Сбой Pokémon GO 2016 |
| Uber | 2016 | Вход в приватный GitHub с чужими утёкшими паролями, в коде — ключ AWS, данные 57 млн человек | Секреты не хранят в коде, даже в приватном | Утечка Uber 2016 |
| GitLab | 2017 | Инженер удалил каталог рабочей базы, ни один из пяти механизмов бэкапа не сработал | Бэкап, который не восстанавливали, — не бэкап | Сбой GitLab 2017 |
| AWS S3 | 2017 | Неверный параметр в команде из плейбука вывел из работы подсистемы S3 в us-east-1 больше чем на 4 часа | Инструменты должны отказываться делать опасное | Сбой AWS S3 2017 |
| Ericsson, O2, SoftBank | 2018 | Истёк сертификат в ПО узлов SGSN-MME, операторы в 11 странах без мобильного интернета | Всё, что истекает, — в инвентарь с алертом | Сбой Ericsson 2018 |
| Capital One | 2019 | Через неверно настроенный WAF получили права роли сервера и данные около 106 млн человек | Минимальные права у ролей серверов, защита метаданных | Утечка Capital One 2019 |
| Cloudflare | 2019 | Регулярка в правиле WAF загрузила CPU до 100% по всему миру, 27 минут ошибок 502 | Конфигурация — тоже релиз, ей нужна канарейка | Сбой Cloudflare 2019 |
| Docker Hub | 2020 | Ввели лимиты на скачивание образов, пайплайны без входа упёрлись в toomanyrequests | Критичные образы держат в своём зеркале | toomanyrequests в Docker Hub |
| Codecov | 2021 | Два месяца подменённый Bash Uploader отправлял наружу переменные окружения CI клиентов | Сторонние скрипты проверяют по подписи и контрольной сумме | Взлом Codecov 2021 |
| Atlassian | 2022 | Скрипт за 23 минуты удалил 883 сайта 775 клиентов, восстановление до 14 дней | Мягкое удаление, пробный запуск и восстановление в масштабе | Сбой Atlassian 2022 |
| CircleCI | 2023 | Вредонос украл сессию SSO инженера, секреты всех клиентов пришлось менять | Короткоживущие секреты в CI и доступ к проду по запросу | Взлом CircleCI 2023 |
| Datadog | 2023 | Автообновление systemd стёрло маршруты Cilium на десятках тысяч узлов в пяти регионах | Автообновление — тоже деплой, окна в регионах разнести | Сбой Datadog 2023 |
| 2023 | Обновление Kubernetes до 1.24 сняло метку, по которой Calico выбирал route reflectors, 314 минут простоя | Вся конфигурация — в Git, восстановление — отрепетировано | Сбой Reddit 2023 | |
| CrowdStrike | 2024 | Обновление контента агента ушло сразу на все машины, около 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 минут, без регистрации.
Источники
- Microsoft Azure Blog. Summary of Windows Azure Service Disruption on Feb 29th, 2012, 09.03.2012.
- LKML, John Stultz. Potential fix for leapsecond caused futex related load spikes, 01.07.2012.
- SEC. Order: In the Matter of Knight Capital Americas LLC, 16.10.2013.
- npm Blog. kik, left-pad, and npm, 23.03.2016.
- Google Cloud Blog. Bringing Pokémon GO to life on Google Cloud, 30.09.2016.
- FTC. Uber Technologies: Revised Complaint, 2018.
- GitLab. Postmortem of database outage of January 31, 10.02.2017.
- AWS. Summary of the Amazon S3 Service Disruption in the Northern Virginia (US-EAST-1) Region, 2017.
- Ericsson. Update on software issue impacting certain customers, 06.12.2018.
- Capital One. Information on the Capital One cyber incident.
- Cloudflare. Details of the Cloudflare outage on July 2, 2019, 12.07.2019.
- Docker. Docker Hub usage and limits.
- Codecov. Bash Uploader Security Update, 15.04.2021.
- Atlassian. Post-Incident Review on the Atlassian April 2022 outage, 29.04.2022.
- CircleCI. CircleCI Jan 4, 2023 security incident report, 13.01.2023.
- Datadog. 2023-03-08 Incident: Infrastructure connectivity issue affecting multiple regions, 16.05.2023.
- Reddit Engineering. You Broke Reddit: The Pi-Day Outage, 21.03.2023.
- CrowdStrike. Preliminary Post Incident Review, 24.07.2024.