Логичным продолжением в настройке системы мониторинга будет реализация уведомлений хотя бы по электронной почте. По части ZABBIX, к сожалению, есть одно ограничение – из “коробки” он не поддерживает отправку сообщений на e-mail. Именно поэтому придется эту задачу решать путем использования скриптов, поддержка которых в ZABBIX широко присутствует. Об этом и пойдет речь в статье. Приступим сразу к делу.
Если вам интересна тематика ZABBIX, рекомендую обратиться к основной статье – Система мониторинга ZABBIX, в ней вы найдете дополнительную информацию.
E-mail оповещения ZABBIX 2
Начнем конечно же с установки MTA. В принципе подойдет любой агент, вы можете ставить тот, с которым больше знакомы, а у меня будет рассмотрен пример с sendemail:
root@debian7:~# apt-get install sendemail
Ищем папку для скриптов. Для этого смотрим файл конфигурации zabbix-сервера:
root@debian7:~# nano /usr/local/etc/zabbix_server.conf
Нам нужна опция “AlertScriptsPath“. Видим закомментированную строчку:
# AlertScriptsPath=${datadir}/zabbix/alertscripts
Необходимо определить папку, в которой будут храниться скрипты и назначить её параметру “AlertScriptsPath“:
AlertScriptsPath=/usr/local/bin/alertscripts
Поскольку такой папки изначально не было, надо её создать:
root@debian7:~# mkdir /usr/local/bin/alertscripts
Далее в этой папке создаем скрипт:
root@debian7:~# nano /usr/local/bin/alertscripts/zabbix_sendemail
Вставляем в него следующий текст:
#!/bin/sh
export smtpemailfrom=bissquit.email.bot@mail.ru
export zabbixemailto=$1
export zabbixsubject=”$2″
export zabbixbody=”$3″
export smtpserver=smtp.mail.ru
export smtplogin=bissquit.email.bot
export smtppass=bissquit.email.bot147258369
/usr/bin/sendEmail -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:25 -xu $smtplogin -xp $smtppass
Небольшая заметка: я не являюсь автором этого скрипта, он был взят отсюда, но надо сказать, что в исходном виде он работать не будет, т.к. параметры “$2” и “$3” передаются без кавычек. Поскольку в этих параметрах передается тема и текст сообщения, а они обычно всегда идут с пробелами, скрипт у вас отрабатывать не будет. Такая же проблема встретилась авторам этого поста.
Изменим права доступа к файлу:
root@debian7:~# chmod 755 /usr/local/bin/alertscripts/zabbix_sendemail
Вернемся в корневую директорию:
root@debian7:/usr/local/bin/alertscripts# cd /root/
Проверим работу скрипта:
root@debian7:~# /usr/local/bin/alertscripts/zabbix_sendemail адрес_отправителя адрес_получателя тема текст адрес_smtp_сервера:25 логин пароль
Небольшая подсказка: вводить аргументы для проверки работы скрипта нужно точно в таком же порядке, в каком они стоят в самом скрипте (см. последнюю строчку), то есть так – адрес отправителя, адрес получателя, тема сообщения, текст сообщения, адрес smtp-сервера с портом, имя учетной записи для авторизации, пароль.
Получаем ошибку:
Дело в том, что я использую mail.ru и с недавнего времени они запретили использовать незащищенные соединения. Произошло это примерно с сентября 2014 года и заметил это я конечно же на своих продакшн-серверах, поскольку они тоже используют ящики на mail.ru. Отлично, раз так, придется немного изменить скрипт, добавив в него в самом конце “-o tls=yes“. В итоге весь скрипт будет выглядеть следующим образом:
#!/bin/sh
export smtpemailfrom=bissquit.email.bot@mail.ru
export zabbixemailto=$1
export zabbixsubject=”$2″
export zabbixbody=”$3″
export smtpserver=smtp.mail.ru
export smtplogin=bissquit.email.bot
export smtppass=bissquit.email.bot147258369
/usr/bin/sendEmail -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:25 -xu $smtplogin -xp $smtppass -o tls=yes
Однако и тут получим ошибку:
Решение нашел в теме форума “Отправка e-mail из консоли (скрипта)” –
Установим необходимые библиотеки:
root@debian7:~# apt-get install libio-socket-ssl-perl libnet-ssleay-perl
И снова получаем ошибку:
В топике “invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332” –
есть решение проблемы. Оказывается это баг и он даже есть на багрепортах – “Debian Bug report logs – #679911“.
Надо сказать, что и два года назад, когда я впервые ставил ZABBIX, эта ошибка тоже была и кажется ситуация за это время не изменилась. Придется исправлять вручную.
Открываем файл:
root@debian7:~# nano /usr/share/perl5/IO/Socket/SSL.pm
Ищем строчку
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
и заменяем на
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
Сохраняем изменения.
Пробуем после этого отправить сообщение:
Все получилось! Теперь можно быть уверенным в корректной работе скрипта, идем дальше.
Переходим в веб интерфейс, идем в “Администрирование/Способы оповещений”, создаем новый способ оповещения:
Теперь необходимо назначить пользователю способ оповещения. Для этого переходим в “Администрирование/Пользователи”, выбираем нужного пользователя и переходим во вкладку “Оповещения”:
Настроим действие на срабатывание триггера – “Настройка/Действия” – создать действие. В сообщение по умолчанию я использую следующий шаблон:
<html><body><font size=”4″ color=”black” face=”Arial”>
<B>Name:</B> {HOST.NAME}<BR>
<B>Trigger:</B>{TRIGGER.NAME}<BR>
<B>Status:</B> {TRIGGER.STATUS}<BR><BR>
<B>Last Value:</B> {{HOSTNAME}:{TRIGGER.KEY}.last(0)}<BR>
</font></body></html>
Полные настройки выглядят так:
Переходим на вкладку “Условие”, тут оставляем как есть.
Далее надо настроить операции – вкладка “Операции” – “Новый”. Нас интересует отправка уведомлений всего одному пользователю, поэтому настройки для группы пользователей оставляем как есть. Остальные настройки будут выглядеть как на скриншоте. Не забываем нажать “Добавить”, но не в самом низу, а сразу под “Условия”.
В конечном счете все будет выглядеть примерно так:
На этом настройка уведомлений завершена. Позже приложу примеры работы.
Использованные источники, кроме упомянутых выше: