Сентябрь 20

Настройка уведомлений nagios по средствам telegram/wat’s app/ и других.

В данной статье-заметке расскажу как  настроить уведомления nagios 4.x.x по средствам личных сообщений в месенджеры, на примере Telegram.

С чего же у меня зародилась данная идея?

Появилась необходимость мониторить несколько VPS серверов на наличие проблем. Для этих целей был выбран более или менее знакомый(в плане работы, а не настройки) nagios.  Так как на любую почту сыплется море спама, да и почту с телефона просматривать не всегда удобно,  уведомления по средствам email было решено отбросить, а для оперативной связи использовать мессенджер Telegram .
Плюсы отправки уведомлений в месенджер:
Всегда под рукой;
Можно настроить специальную мелодию на алерты;

Никакого спама;

Есть как веб-версия, так и приложения для любого устройства.

Подготовка:

Для настройки нам потребуется:

  1. Личная учетная запись телеграмм куда будут отправляться уведомления
  2. Дополнительный аккаунт (номер телефона), с которого будут приходить уведомления с сервера
  3. Сервер VPS/VDS
  4. Установленный nagios

Приступаем:

Первое что необходимо сделать, это установить нативный клиент Telegram CLI for Linux, находящийся в разделе неофициальных приложений на самом сайте telegram.

На centos 6.6 он ставится из репозиториев:

yum install telegram-cli

Для других ОС можно воспользоваться инструкцией с github.

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

bash-4.1$ telegram-cli -D
phone number: xxxxxxxxxxx
code ('call' for phone call): xxxxxx

После ввода кода попадаем в сам клиент. Команды можно узнать набрав help, проверяем что работает:

> contact_list
Nagios M
Anton Ne

Заметка: Добавление контакта требует указания Имени и Фамилии, для дальнейшей работы с таким контактом используйте вместо пробела _
например:

> msg Anton_Ne test
[11:31] Anton Ne <<< test

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

В этом месте я столкнулся с главной проблемой нативного клиента, после авторизации требуется некоторое время для получения списка контактов и загрузки сообщений, в связи с чем поданное напрямую сообщение из консоли не могло корректно определить получателя:

# telegram-cli -D -e 'msg Anton_Ne test2'
change_user_group: can't find the user telegramd to switch to
> FAIL: 38: can not parse arg #1
> All done. Exit
halt

Немного покопавшись было найдено решение, путем добавления нескольких ключей:

#telegram-cli -WR  -D -e 'msg Anton_Ne test2'

В этом случае всё работает как часы.

С клиентом разобрались, теперь приступим к настройке nagios:
Нам необходимы два конфигурационных файла. Местоположение зависит от установки, ищем где находится nagios:

#whereis nagios
nagios: /etc/nagios /usr/lib64/nagios /usr/local/nagios

Файлы, в данном случае будут находится в каталоге

/usr/local/nagios/etc/objects/

commands.cfg
contacts.cfg

При установке из репов, могут быть в /etc/nagios

Открываем commands.cfg и добавляем  нотификацию для хостов и сервисов:

# 'notify-service-by-tg' command definition

define command{
command_name notify-service-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ - Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME
# 'notify-host-by-tg' command definition
define command{
command_name notify-host-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”'
}

Всё с этим файлом закончили.

Открываем  contacts.cfg  и добавляем в контакт (define contact) или группу (define contactgroup) следующие строки:

_tg имя_вашей_основной записи ( в примере Anton_Ne)
service_notification_commands notify-service-by-email notify-service-by-tg
host_notification_commands notify-host-by-email notify-host-by-tg

Перезапускаем nagios:

Service nagios restart

Внимание! Не забудьте что команда выполняется из под пользователя nagios а, поэтому у nagios должно хватать прав для запуска команды /usr/bin/telegram-cli, в том числе и регистрация должна быть пройдена под этим пользователем.
Проверяем, заходим в нагиос ищем проблемный сервис и отправляем тестовую рассылку:
2015-09-20 11-53-50 Скриншот экрана2015-09-20 11-55-24 Скриншот экрана

И радуемся полученному сообщению:

joxi_screenshot_1442739044346

PS Для других месенджеров, аля what’s app , достаточно изменить command_line в настройках нагиос  на команду отправки сообщения из консоли через нативное приложение, пример:

yowsup-cli -c $USER1$/yowsup/yowsup-cli.config -s $_CONTACTWHATSAPP$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”
}

Всё с этим файлом закончили.

Открываем  contacts.cfg  и добавляем в контакт (define contact) или группу (define contactgroup) следующие строки:


Перезапускаем nagios:


Внимание! Не забудьте что команда выполняется из под пользователя nagios а, поэтому у nagios должно хватать прав для запуска команды /usr/bin/telegram-cli, в том числе и регистрация должна быть пройдена под этим пользователем.
Проверяем, заходим в нагиос ищем проблемный сервис и отправляем тестовую рассылку:
2015-09-20 11-53-50 Скриншот экрана2015-09-20 11-55-24 Скриншот экрана

И радуемся полученному сообщению:

joxi_screenshot_1442739044346

PS Для других месенджеров, аля what’s app , достаточно изменить command_line в настройках нагиос  на команду отправки сообщения из консоли через нативное приложение, пример:


                            

Метки: , , , , ,

Опубликовано 20.09.2015 nedoadminko в категории "Администрирование

6 COMMENTS :

  1. By Кирилл on

    Добрый день. Через консоль сообщения одной командой отправляются нормально. Через nagios тишина.
    Грешу на contacts.cfg

    define contact{
    contact_name kirill ;
    use generic-contact ;
    alias Nagios Admin ;
    email ####@inbox.ru ;
    _tg kirill_ivanov ;
    service_notification_commands notify-service-by-tg ;
    host_notification_commands notify-host-by-tg ;
    }

    1. By nedoadminko (Сообщение автора) on

      Покажите, полные конфиги contact.cfg, command.cfg, а также проверьте что у нагиоса хвататет прав на запуск, для этого например можно выполнить:
      sudo -u nagios -s Если используется пользователь nagios, после чего запустить команду отправки из консоли и проверить не будет ли ошибок.
      PS
      Также, не забываем что после изменения конфигов nagios его требуется перезапустить.
      Также если нагиос установлен из коробки и не настроен, то директива contact_name kirill ; выдаст ошибку при перезагрузке, так как данный контакт не прописан и не имеет алиаса Nagios Admin. Укажите в данном поле nagiosadmin и проверьте.

  2. By Кирилл on

    Большое спасибо за ответ!
    Содержимое contacts.cfg
    define contact{
    contact_name nagiosadmin
    use generic-contact
    alias Nagios Admin
    service_notification_period 24×7
    host_notification_period 24×7
    service_notification_options w,u,c,r,f,s
    email nagios@localhost
    _tg kirill_ivanov
    service_notification_commands notify-service-by-tg
    host_notification_commands notify-host-by-tg
    }

    define contactgroup{
    contactgroup_name admins
    alias Nagios Administrators
    members nagiosadmin
    }

    Содержимое commands.cfg

    # ‘notify-service-by-tg’ command definition
    define command{
    command_name notify-service-by-tg
    command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ — Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$’
    }

    # ‘notify-host-by-tg’ command definition
    define command{
    command_name notify-host-by-tg
    command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ «$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$»‘
    }

    ***Вывод команды в консоли из под sudo -u nagios -s***
    nagios@debian:/home/kirill$ telegram-cli -WR -D -e ‘msg kirill_ivanov test’
    open[config_file]: No such file or directory
    I: config_file=[/home/nagios/.telegram-cli/config]

  3. By nedoadminko (Сообщение автора) on

    Видимо нагиос у вас настроен из под пользователя root, а не nagios. Создайте директорию /home/nagios/ и пройдите стандартную авторизацию telegram из консоли под sudo -u nagios -s, после этого должно заработать.

  4. By Ulis on

    Доброй ночи!
    В чем может быть проблема, из под пользователя nagios из консоли все замечательно отправляется, а из скрипта тишина. В логах пишется [01-11-2015 00:40:23] HOST NOTIFICATION: admin;localhost;CUSTOM (UP);notify-host-by-telegram;PING OK — Packet loss = 0%, RTA = 0.04 ms;nagios;test Но месага не приходит.

  5. Уведомление: sildenafil vs tadalafil

Обсуждение закрыто.