В мире постоянно работающих систем с «слушающими» отзывчивыми демонами, бывает, случается неприятность — в силу каких-либо причин демон перестает быть отзывчивым и прекращает свою работу. В итоге получаем неработающий сервис. Неприятность может застать нас в любое время и в любом месте. И даже если предусмотрительно настроенная нами система мониторинга шлет об этом тревожные письма и смс, побуждая к вполне закономерным действиям — сделать сервису start и разбираться, что случилось, — не всегда есть для того возможности. Банально, может не быть никаких «электронно-вычислительных машин» под рукой.
Делаем выводы с вышесказанного и решаем, что нужно «что-то», что будет следить за демонами и стартовать их автоматически, если те прикажут долго жить*. Кто-то для таких целей пишет свой скрипт и кидает его в cron, кто-то пользуется готовыми решениями, настраивая их под себя. Одним из таких решений и есть monitord — не самое лучшее, корявое, но, на мой взгляд, самое простое и лично мне подходящее.
Установка
На текущую дату — 07.04.2015 — порт monitord помечен как Broken:
# cd /usr/ports/sysutils/monitord # make config ===> No options to configure # make install ===> monitord-0.4.1_3 is marked as broken: No public distfiles. *** Error code 1 Stop. make: stopped in /usr/ports/sysutils/monitord
Игнорируем этот факт и все-таки устанавливаем порт (запускаем make с ключом -D, устанавливая переменную NO_IGNORE):
# make -DNO_IGNORE install clean ... ============================================================= Monitord requires procfs(5). Add this line to your fstab(5): proc /proc procfs rw 0 0 ============================================================= ===> Cleaning for monitord-0.4.1_3
После установки в системе появляются 3 файла:
- /usr/local/etc/rc.d/monitord — стартовый скрипт;
- /usr/local/sbin/monitord — бинарник;
- /usr/local/etc/monitord.conf.sample — пример конфигурационного файла.
Структура конфигурационного файла
/usr/local/etc/monitord.conf.sample:
############################################################################ ############################################################################ ## ## Monitord Configuration file ## ############################################################################ ############################################################################ # You MUST set your email address and the email server to use when sending # out notices. It will be used if you use the "alert" option below. email = this@is.your.email.address smtp-server = this@is.your.email.server # When specifying options, make sure that they are comma-separated and do NOT # have any spaces. # # user options delay service start script parameters #root auto,alert 10 inetd /usr/sbin/inetd -wW #root auto 10 syslogd /usr/sbin/syslogd #root auto 10 cron /usr/sbin/cron #root auto 20 httpd /usr/local/etc/rc.d/apache.sh #root auto,alert 10 sshd /usr/local/sbin/sshd
Одна строка в conf-файле отвечает за один сервис, и поделена на 6 столбцов:
- user — от имени какого пользователя производить запуск;
- options — как реагировать, если сервис потух:
auto — запускать сервис автоматически;
alert — отсылать письмо на почту об инциденте (здесь у меня возникли проблемы, ниже опишу какие);
noauto — не запускать сервис автоматически (имеет смысл при указании этой опции вместе с опцией alert — т.е. просто для уведомлений);
опции указываются через запятую, пробелы между ними не ставим.
- delay — задержка запуска (секунды);
- service — имя сервиса;
- script — скрипт запуска сервиса;
- parameters — аргументы, передаваемые скрипту запуска.
Настройка и запуск
Создаем или копируем с monitord.conf.sample конфигурацинный файл monitord.conf:
# cd /usr/local/etc/ # cp monitord.conf.sample monitord.conf # ee monitord.conf
Например, для мониторинга apache24, по образу и подобию добавляем строку:
root auto 10 httpd /usr/local/sbin/apache24 start
Добавляем monitord в автозагрузку и запускаем:
# ee /etc/rc.conf # MONITORD monitord_enable="YES" # /usr/local/etc/rc.d/monitord start
Проблемы с отправкой уведомлений
При использовании опции alert необходимо предварительно указать, через что эти алерты слать. Monitord предлагает указать только email получателя и MTA, который доставит alert-письмо этому получателю:
email = admin@provoip.in.ua smtp-server = mx.provoip.in.ua
К сожалению, править какие-то другие заголовки для отправки уведомлений нельзя. И если уже с неменяемой темой и телом пиcьма смириться можно, то критично важно было бы отредактировать адрес отправителя, потому как сам Monitord туда подставляет следующее:
monitord-notification@www, где www — это у меня имя хоста.
А мой МТА настроен на проверку адреса-отправителя и получив от monitord такое вот письмо, отказывается его дальше передавать:
sender verify fail for <monitord-notification@www>: Unrouteable address
Лично для меня это не критично, поскольку уведомлениями занимается нагиос. Alert’ы я отключаю и пользуюсь только возможностью слежки за демонами и их автоматического старта/рестарта.