From 6b7aeaf101572663bf56b5959cbfd95fab179157 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 26 Mar 2022 22:36:05 +0300 Subject: [PATCH] =?utf8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?utf8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D1=83=20Monit-=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 запускают. -- 2.48.1