[О блоге] [наверх] [пред] [2022-03-26 22:36:05+03:00] [6b7aeaf101572663bf56b5959cbfd95fab179157]

Написал замену Monit-у

http://www.git.stargrave.org/?p=sgmon.git;a=blob;f=README
https://en.wikipedia.org/wiki/Monit
Monit мне уже давно не нравился. Вообще с мониторингом как-то не густо в
плане выбора. Либо огромные монстры, либо... Monit. Когда-то я его
использовал и для перезапуска падающих демонов, но с переходом на
daemontools эта задача из него исчезла. Остался только как средство
мониторинга.

Но в связи с переездом на IP4Market туннельного брокера, мне
понадобилось для нескольких проб указывать исходящий IP адрес. Monit это
умеет, но вот только куча других проб при этом поломалась по какой-то
причине. А учитывая что проверку на subject сертификата, да и вообще на
HTTP доступность я делаю своими скриптами (curl | grep банальные), то
вопрос о целесообразности применения Monit-а уже давно возникал. Глюк с
исходящими адресами добил терпение работы с ним.

Сделал свою систему мониторинга. Просто на банальных shell-скриптах.
Даже не zsh (чтобы на сервере не надо было его ставить). Ведь по сути
что нужно: периодично запускать заданные команды, смотреть на код
возврата, показывать какой-то их вывод, агрегировать результаты работы
проб для удобства, отправлять письма если что-то где-то отвалилось или
вернулось в строй назад.

Собственно, sgmon все эти задачи и покрыл. Иерархия директорий (проб), в
каждой директории "run" скрипт, хранение особых настроек для заданной
пробы (типа периодичности запуска или кол-во допустимых падений) и
состояние запущенной пробы. Скрипт запуска пробы создаёт временную
директорию и symlink на неё, а trap-ом грохает при любом выходе. В
принципе мусора никакого не должно оставаться, кроме символической
ссылки и pid-файла. Проба может быть и просто выводом какого-нибудь top
(буквально скрипт с одним этим вызовом, stdout которого попадёт в
таблицу результатов работы проб), может и чем-то сложнее. Например ping
не только интересен в плане вышло/не вышло, но и своей последней
строчкой с round-trip статистикой.

Сделал несколько helper-ов для своих задач:

* dns        -- запрос на заданный DNS сервер
* http       -- curl URL | grep ЧТО-ТО
* https-cert -- проверка что CommonName соответствует домену
* iface      -- проверка что интерфейс поднят и просто вывод ifconfig
* netstat    -- показ трафика за секунду на интерфейсе
* pid-alive  -- проверка живности PID-а, вывод его команды
* ping       -- ping IPv4/IPv6
* smtp       -- проверка ESMTP ответа

А всё остальное это единичные run-ы с специфичными командами. Пробы
организованы в директории типа:

probes/go.stargrave.org/https-cert -- корректность сертификата
probes/go.stargrave.org/ping4      -- доступность IPv4
probes/go.stargrave.org/ping6      -- доступность IPv6
probes/go.stargrave.org/paster     -- известно ли об этом модуле
probes/go.stargrave.org/sgblog     -- известно ли об этом модуле
probes/go.stargrave.org/sgodup     -- известно ли об этом модуле
probes/go.stargrave.org/uploader   -- известно ли об этом модуле

Всё жутко тупо и просто. Гораздо проще настраивать чем monit (лично
мне). Его возможностей не хватало и я всё равно использовал в качестве
проб внешние вызовы shell-скриптов и так. Гораздо проще отлаживать это
всё.

Заметил что в Monit у меня не мало где стояли всякие дозволения на n-ое
количество падений. Регулярно от Monit мне приходит ошибка о
недоступности ресурсов при попытке сделать ping или достучаться по TCP
куда-то. Сейчас всё это пропало, видимо потому что даже ping делается
отдельной программой под отдельным shell скриптом.

Ну и есть простенький shell скрипт, генерирующий HTML табличку с
состоянием (??? (не запущена), OK, Prefail (X/Y), FAIL (X/Y)), названием
пробы, датой последнего её обновления, сообщения возможного. sgmon
запускаю под daemontools (это позволяет послать ему сигнал (svc -t
/var/service/sgmon) и оно само в фоне будет ожидать мягкого завершения
работы проб, выхода, повторного запуска supervise-ом), а скрипт
генерирования HTML-ек просто по cron-у, отдавая его с домена для
которого требуется авторизация с клиентским TLS сертификатом.

Конечно это всё не бесплатно. У меня сейчас 262 пробы. Это значит 262
run.sh процесса, которые запускаются время от времени ещё столько же
shell скриптов, которые, в большинстве своём, ещё другие .sh запускают.

    [оставить комментарий]