За три дня сайт пять раз пропадал из сети, самый долгий раз — на пять часов. Сервер при этом не перезагружался и не падал, исправно собирал статистику: пропадала только связь между ним и интернетом.

Внешний монитор замечал сбои раньше владельца, а собственная проверка на сервере в это же время показывала «проблем: 0». Она проверяла только внутреннее состояние — свежесть данных, работу контейнеров и служб, место на диске, но не путь до сервера снаружи.

В журналах Docker в минуты сбоев повторялась одна и та же ошибка: не удавалось узнать у DNS адрес — от удостоверяющего центра до собственных доменов. Разложив ошибки по десятиминуткам, автор увидел получасовой всплеск и полтора часа сплошных сбоев, совпавшие по времени с письмами монитора: сервер одновременно не мог выйти наружу и не принимал соединения извне.

Проверку дополнили: теперь сторож раз в десять минут обращается к DNS и пробует подключиться к публичным адресам. Так как во время обрыва сообщение отправить нельзя, он запоминает время первой неудачной проверки, а после восстановления присылает одно сообщение о том, сколько длился перерыв, и сам готовит черновик разбора.

Три пойманных обрыва проверили по журналу сайта: два подтвердились — снаружи не пришло ни одного запроса, а первый, десятиминутный, оказался ложным. Отказывал только DNS, а посетители заходили. Теперь перед черновиком сторож смотрит журнал сайта: если запросы шли хотя бы в половине отрезков перерыва, приходит только пометка «сайт при этом был доступен».

Чтобы определить сторону обрыва, сторож раз в сутки запоминает шлюз сервера и первый узел провайдера, найденный через ping с временем жизни 2. Во время сбоя он пингует оба каждые десять минут: молчит шлюз — проблема на стороне сервера, отвечает шлюз, но не узел провайдера — обрыв на линии провайдера, отвечают оба — сбой дальше в сети провайдера или только в DNS.

На странице инцидентов появилась таблица надёжности: число сбоев, суммарный простой, среднее время восстановления (MTTR), среднее время между сбоями (MTBF) и бюджет ошибок при цели 99,5% доступности в месяц — около 3 часов 40 минут простоя. Ноябрь исчерпал этот бюджет за первую неделю: только два сбоя 5 ноября дали больше пяти часов.