Skrypty operacyjne

Набор из десятка с лишним диагностических скриптов, следящих за здоровьем инфраструктуры. Они выявляют расхождение конфигурации, секреты в репозитории, истекающие сертификаты, битые ссылки, отсутствующие бэкапы и занятые порты. Рутинная работа, которая раньше отнимала часы, сведена к одной команде.

Skrypty operacyjne
TL;DR

Больше десятка диагностических скриптов под одной командой. Истекающие сертификаты, отсутствующие бэкапы, секреты, попавшие в репозиторий, мёртвые ссылки, занятые порты - вещи, которые легко отложить на потом, пока что-то не упадёт. Одна команда, ненулевой код выхода, и конец гаданию, вспомнил ли кто-то проверить.

Введение

У любой инфраструктуры есть слой работы, который скучен ровно до того момента, когда становится критическим. Сертификат, истекающий в воскресенье. Бэкап, который уже месяц стреляет в пустоту. Секрет, случайно попавший в репозиторий. Занятый порт, который не должен слушать. Ничто из этого не кричит, пока не станет слишком поздно.

Мы собрали эти проверки в больше десятка маленьких скриптов и спрятали их за одной командой. Цель была не технической, а человеческой: сделать так, чтобы поддержание инфраструктуры перестало зависеть от того, вспомнил ли кто-то это сделать. Потому что память, как оказывается на практике, - худший механизм безопасности, который можно выбрать.

Рутина, которая всегда проигрывает срокам

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

Это не техническая проблема. Каждую из этих проверок можно сделать вручную за минуту. Проблема в том, что они требуют, чтобы кто-то о них помнил, регулярно, на фоне другой работы - а именно это люди делают плохо. Чем больше вещей надо запомнить, тем вернее одна выпадет, обычно как раз та, которая в этот раз что-то поймала бы.

Одна команда, один проход

Поэтому мы свели всю рутину к одной команде, которая не зависит ни от чьей памяти. Вы запускаете её вручную перед деплоем или встраиваете в расписание и забываете - и это именно тот эффект, которого мы хотели.

Что ловит один проход

ПроверкаЛовит
Сертификатыистекает менее чем через N дней
Бэкапыпоследний старше порога или пустой
Секретыключи и токены, попавшие в репозиторий
Ссылкимёртвые ссылки в документах и конфиге
Портызаняты или слушают там, где не должны
Расхождение конфигаодно в репозитории, другое на сервере

Контракт: код выхода говорит всё

Чтобы что-либо можно было встроить в CI или cron, оно должно говорить кодом выхода, а не абзацем текста. Ноль значит чисто, что угодно другое значит загляни. Это весь контракт, и именно его простота делает инструмент автоматизируемым без всяких трюков.

ops-check.sh · bash
ops check --all

ops check --all --format json || notify "ops: что-то требует внимания"

Одна и та же команда имеет два лица. Человеку она выводит читаемый отчёт - что проверено, что прошло, что требует внимания. Машине она отдаёт JSON, который можно распарсить и подключить к алерту. Один вход, две формы вывода, никакого текста для людей, притворяющегося интерфейсом для машин.

Алярм, который не звонит без повода

Самая трудная часть такого инструмента - не сами проверки, а пороги. Алярм, который звонит всегда, стоит столько же, сколько выключенный алярм - люди просто перестают его читать, и тогда он пропустит тот единственный раз, когда что-то действительно не так. Это самый частый способ, которым мониторинг замолкает: не из-за отказа, а из-за шума.

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

➜
Совет

Тишина инструмента ценна только тогда, когда она достоверна. Если команда подаёт голос по любой мелочи, люди научатся её игнорировать, и тогда она не предупредит при пожаре. Подберите пороги так, чтобы отсутствие алярма действительно значило, что чисто - иначе вы строите шум, а не мониторинг.

Что от этого остаётся

Это не эффектный инструмент, и таким он быть не обязан. Нет дашборда, нет графиков, нечего показать на скриншоте. Вся его ценность в том, что рутина перестала зависеть от чьей-либо памяти - она запускается сама, а когда молчит, это молчание действительно значит, что чисто.

12+
проверок под одной командой
1
вход вместо десятка ручных шагов
секунды
вместо часов обхода каталогов

Разница в том, что класс проблем, которые раньше выходили наружу только при отказе, теперь выходит наружу раньше - при обычном проходе перед деплоем или в фиксированное время из cron. Истекающий сертификат даёт знать за неделю, а не в воскресенье в три ночи. В этом вся работа этого инструмента: превратить тишину из незнания в тишину из уверенности.

Больше проектов

Другие работы из той же категории - посмотрите, как мы решаем похожие задачи.

Есть похожий проект?

Напишите нам - смета бесплатна и приходит в течение часа.