Подтвердить симптом серией запросов
Один curl может попасть в удачный момент: при одном мёртвом бэкенде
из двух падает часть запросов. Серия покажет долю ошибок.
Инцидент — сбой, который видят пользователи: сервис сначала восстанавливают по ранбуку, причину ищут потом.
curl -s -o /dev/null -w '%{http_code}\n' http://localhost/
mkdir -p ~/incident; cd ~/incident
echo "$(date -u +%T) алерт «сайт 502», подтвердил" >> timeline.txt
sudo journalctl -t sudo --since -1h | grep COMMAND
кто что запускал
sudo find /etc /opt /srv -newermt '-1 hour' -type f
свежие файлы
ls -lt /etc/nginx/sites-enabled/ | head
sudo cp -a /etc/default/lab-app ~/incident/
Инцидент — событие, когда сервис не делает для пользователей то, что должен: сайт отвечает 502, ответы идут секундами, доля ошибок съедает бюджет быстрее нормы (sli-slo). О нём сообщает алерт (alertmanager) или сам пользователь.
Работа с инцидентом — порядок действий, который сокращает простой: подтвердить симптом → восстановить сервис → понять причину → разобрать сбой (postmortem). Первые два шага делает дежурный (on-call) — тот, кто в эту смену отвечает на алерты.
Каждая минута сбоя — ошибки у пользователей и потраченный бюджет. Поэтому первая цель — вернуть сервис самым быстрым обратимым способом. Причину ищут, когда сервис уже работает: спокойно, по хронологии и сохранённым копиям.
| Способ | Когда подходит |
|---|---|
| откатить последнее изменение | сбой начался сразу после правки или выкладки |
| перезапустить службу | служба упала или зависла, а конфиг не менялся |
| переключить на запасную машину | сломана одна машина из нескольких |
| убрать сервер из балансировки | один бэкенд из нескольких отвечает ошибками |
Обратимый — значит, шаг можно отменить и после него остаются улики.
Перед откатом скопируй изменённый файл в ~/incident/ (cp -a
сохраняет время и права). Перед перезапуском сохрани
systemctl status и последние строки журнала службы: перезапуск
стирает состояние процесса.
Большая часть сбоев начинается после изменения: правки конфига, выкладки, обновления пакета. Где искать:
sudo journalctl -t sudo --since -1h — команды через sudo: кто,
когда и что запустил;sudo find /etc /opt /srv -newermt '-1 hour' -type f и ls -lt в
каталоге конфигов — какие файлы менялись (find);journalctl -u <служба> --since -1h — когда служба перезапускалась;/var/log/apt/history.log — какие пакеты обновлялись.Строка sudo в журнале (разбита для ширины):
Пользователь deploy в 12:00:41 поменял порт в файле службы. Если
сайт начал отвечать 502 в 12:00:43, это первый подозреваемый. Время
изменения сравнивают с началом симптома: изменение за секунды или
минуты до него — кандидат на откат.
Ранбук (runbook) — инструкция на один алерт: что он значит, какие команды выполнить первыми, как восстановить сервис и кого звать. Его пишут заранее, без спешки; в сбой дежурный выполняет шаги и не придумывает их на ходу.
Ранбук лежит там, где его найдут во время сбоя: рядом со службой
(/srv/runbooks/<алерт>.md), ссылкой в тексте алерта.
Хронология — список событий сбоя по времени, строка на событие:
Время первым и в UTC (date -u +%T), дальше — факт: что увидели или
сделали и кто, ролью. Оценок в строке нет. Пишут по ходу, дописывая
>> в файл: в стрессе время и порядок шагов забываются, а разбору
нужны оба. Тот, кто подключился позже, читает хронологию и видит,
что уже сделано. Как собрать хронологию из журналов после сбоя —
postmortem.
Когда инцидент тянется дольше нескольких минут или в нём больше одного человека, роли делят:
| Роль | Что делает |
|---|---|
| ведущий (incident commander) | решает, что делать, раздаёт задачи, сам не чинит |
| связной | сообщает пользователям и руководству, что происходит |
| исполнители | чинят по задачам ведущего и пишут в хронологию |
В маленькой команде всё делает один дежурный, но решение «сообщить» он принимает отдельно от «чинить»: пользователи и коллеги должны знать о сбое, пока его чинят.
Сервис отвечает на тот же запрос, которым подтвердили симптом, и время записано в хронологию. Если восстановление временное (откат, ручной перезапуск), заводят задачу на настоящее исправление. Дальше — разбор сбоя (postmortem).
Один curl может попасть в удачный момент: при одном мёртвом бэкенде
из двух падает часть запросов. Серия покажет долю ошибок.
Первая команда — действия людей через sudo, вторая — файлы со
временем изменения (с долями секунды) по порядку. -newermt
понимает и точное время:
-newermt '2026-10-22 12:00'.
reload или restart.Перезапуск убрал симптом, причина осталась: утечка памяти, растущий
журнал, исчерпанные соединения. Сохрани systemctl status, журнал
службы и free -m до следующего перезапуска — по ним видно, что
копится.
Изменение пришло не через sudo: вход под root, выкладка от имени
службы, автоматизация (cron, ansible, обновления пакетов). Смотри
время изменения файлов (stat, find -newermt) и весь журнал вокруг
начала сбоя: journalctl --since '12:00' --until '12:05'.
journalctl печатает время в поясе машины, date -u — в UTC. На
учебной машине это одно и то же. На машине с другим поясом сравнивай
в одном: journalctl --utc, TZ=UTC date.
Правка на месте, удаление «битого» файла, перезапуск без снятого
журнала стирают улики. Разбор потом строится на догадках, и тот же
сбой повторяется. Копия в ~/incident/ занимает секунды.
Три изменения подряд без проверки между ними: сервис ожил, но неясно, какое помогло, а два других могли добавить новую поломку. Одно изменение — одна проверка — одна строка в хронологии.
--since, -t, -u.status, reload, restart.Есть неточность? Сообщить об ошибке в статье