Skrypty operacyjne
Набор из десятка с лишним диагностических скриптов, следящих за здоровьем инфраструктуры. Они выявляют расхождение конфигурации, секреты в репозитории, истекающие сертификаты, битые ссылки, отсутствующие бэкапы и занятые порты. Рутинная работа, которая раньше отнимала часы, сведена к одной команде.
Больше десятка диагностических скриптов под одной командой. Истекающие сертификаты, отсутствующие бэкапы, секреты, попавшие в репозиторий, мёртвые ссылки, занятые порты - вещи, которые легко отложить на потом, пока что-то не упадёт. Одна команда, ненулевой код выхода, и конец гаданию, вспомнил ли кто-то проверить.
Введение
У любой инфраструктуры есть слой работы, который скучен ровно до того момента, когда становится критическим. Сертификат, истекающий в воскресенье. Бэкап, который уже месяц стреляет в пустоту. Секрет, случайно попавший в репозиторий. Занятый порт, который не должен слушать. Ничто из этого не кричит, пока не станет слишком поздно.
Мы собрали эти проверки в больше десятка маленьких скриптов и спрятали их за одной командой. Цель была не технической, а человеческой: сделать так, чтобы поддержание инфраструктуры перестало зависеть от того, вспомнил ли кто-то это сделать. Потому что память, как оказывается на практике, - худший механизм безопасности, который можно выбрать.
Рутина, которая всегда проигрывает срокам
Поддержание инфраструктуры - это из разряда работы, которую всегда можно сделать завтра. Скучная, пока всё работает, поэтому она вежливо уступает место вещам со сроком. Проблема в том, что у неё самой срока нет - до того момента, когда он вдруг появляется, и жёсткий: сертификат истекает сегодня, бэкап был нужен вчера.
Это не техническая проблема. Каждую из этих проверок можно сделать вручную за минуту. Проблема в том, что они требуют, чтобы кто-то о них помнил, регулярно, на фоне другой работы - а именно это люди делают плохо. Чем больше вещей надо запомнить, тем вернее одна выпадет, обычно как раз та, которая в этот раз что-то поймала бы.
Одна команда, один проход
Поэтому мы свели всю рутину к одной команде, которая не зависит ни от чьей памяти. Вы запускаете её вручную перед деплоем или встраиваете в расписание и забываете - и это именно тот эффект, которого мы хотели.
Что ловит один проход
| Проверка | Ловит |
|---|---|
| Сертификаты | истекает менее чем через N дней |
| Бэкапы | последний старше порога или пустой |
| Секреты | ключи и токены, попавшие в репозиторий |
| Ссылки | мёртвые ссылки в документах и конфиге |
| Порты | заняты или слушают там, где не должны |
| Расхождение конфига | одно в репозитории, другое на сервере |
Контракт: код выхода говорит всё
Чтобы что-либо можно было встроить в CI или cron, оно должно говорить кодом выхода, а не абзацем текста. Ноль значит чисто, что угодно другое значит загляни. Это весь контракт, и именно его простота делает инструмент автоматизируемым без всяких трюков.
Одна и та же команда имеет два лица. Человеку она выводит читаемый отчёт - что проверено, что прошло, что требует внимания. Машине она отдаёт JSON, который можно распарсить и подключить к алерту. Один вход, две формы вывода, никакого текста для людей, притворяющегося интерфейсом для машин.
Алярм, который не звонит без повода
Самая трудная часть такого инструмента - не сами проверки, а пороги. Алярм, который звонит всегда, стоит столько же, сколько выключенный алярм - люди просто перестают его читать, и тогда он пропустит тот единственный раз, когда что-то действительно не так. Это самый частый способ, которым мониторинг замолкает: не из-за отказа, а из-за шума.
Поэтому у каждой проверки есть порог, подобранный так, чтобы команда молчала, когда всё хорошо. Сертификат, истекающий через полгода, - не алярм. Сертификат, истекающий через неделю, - да. Бэкап часовой давности в порядке, месячной - уже нет. Пороги нужны для того, чтобы тишина что-то значила.
Тишина инструмента ценна только тогда, когда она достоверна. Если команда подаёт голос по любой мелочи, люди научатся её игнорировать, и тогда она не предупредит при пожаре. Подберите пороги так, чтобы отсутствие алярма действительно значило, что чисто - иначе вы строите шум, а не мониторинг.
Что от этого остаётся
Это не эффектный инструмент, и таким он быть не обязан. Нет дашборда, нет графиков, нечего показать на скриншоте. Вся его ценность в том, что рутина перестала зависеть от чьей-либо памяти - она запускается сама, а когда молчит, это молчание действительно значит, что чисто.
Разница в том, что класс проблем, которые раньше выходили наружу только при отказе, теперь выходит наружу раньше - при обычном проходе перед деплоем или в фиксированное время из cron. Истекающий сертификат даёт знать за неделю, а не в воскресенье в три ночи. В этом вся работа этого инструмента: превратить тишину из незнания в тишину из уверенности.
Больше проектов
Другие работы из той же категории - посмотрите, как мы решаем похожие задачи.
Есть похожий проект?
Напишите нам - смета бесплатна и приходит в течение часа.



