Прикручиваем смс оповещение к cacti

от автора

Для мониторинга серверов я использую cacti с плагином thold. Плагин замечательный, позволяет отслеживать как доступность всего сервера, так и выход какого-либо параметра за заданные пределы. При наступлении события отсылается e-mail сообщение. Но хочется получать не только e-mail, но и sms сообщения. Есть несколько способов это сделать:

  1. e-mail2sms шлюз, предоставляемый оператором сотовой связи. Способ не очень надежный и не у всех операторов есть данный сервис.
  2. Использовать железный телефон, прикрученный к серверу мониторинга. Самый надежный и сложный способ.
  3. Научить thold отсылать сообщения через смс сервис.

Я выбрал третий способ. Причин тому несколько. Во-первых, сервер мониторинга “далеко” и нет физической возможности подключить аппаратный телефон. Во-вторых, одно из направлений моего бизнеса — смс сервис. Поэтому интересно расширить сервис и для работы с cacti. Сразу скажу, что такой способ не подойдет тем, кому нужна 100% работоспособность. Понятно, что если у сервера мониторинга пропадет выход в Интернет, то никаких сообщений вы не получите. Но для тех кого устроит и 99% метод хороший. Итак, приступим.

Для начала у нас должен быть установлен и настроен сам cacti и модуль thold. Настройка cacti не тема данной статьи, поэтому считаем, что все настроено и работает. Заходим в настройки cacti Console->Settings-> Thresholds и ставим галочку Send Alerts as Text, нам HTML код в сообщениях не нужен.
image
Далее у вас должен быть рабочий аккаунт на смс сервисе vesms.ru. Если нет, регистрируемся. После скачиваем PHP класс для работы с сервисом. Распаковываем и кладем файл VESMS.class.php в папку с модулем thold, обычно это /usr/local/share/cacti/plugins/thold.

Далее правим код файла /usr/local/share/cacti/plugins/thold /thold_functions.php. Ищем строку function thold_mail($to, $from, $subject, $message, $filename, $headers = ») {
Нам надо добавить в код этой функции работу с смс. Изначально код выглядит так

... function thold_mail($to, $from, $subject, $message, $filename, $headers = '') {         global $config;         thold_debug('Preparing to send email');         include_once($config['base_path'] . '/plugins/settings/include/mailer.php');         include_once($config['base_path'] . '/plugins/thold/setup.php');         $subject = trim($subject);          $message = str_replace('<SUBJECT>', $subject, $message); ... 

Меняем на

... function thold_mail($to, $from, $subject, $message, $filename, $headers = '') {         global $config;         thold_debug('Preparing to send email');         include_once($config['base_path'] . '/plugins/settings/include/mailer.php');         include_once($config['base_path'] . '/plugins/thold/setup.php');         require_once($config['base_path'] . '/plugins/thold/VESMS.class.php');          $subject = trim($subject);          $message = str_replace('<SUBJECT>', $subject, $message);  $user = 'USERNAME'; //API логин или логин пользователя в сервисе (по умолчанию адрес электронной почты) $key  = 'APIKEY'; //API ключ, доступен по ссылке http://client.vesms.ru/settings/api $sms = new VESMS($user, $key); $recipients='NUMBER'; //номер на который отправляем сообщения $sender='cacti'; // имя отправителя, должно предварительно пройти модерацию, без модерации доступно только имя отправителя в виде номера пользователя используемого аккаунта $sms->messageSend($recipients, $subject, $sender); ... 

На этом все. В такой конфигурации все e-mail сообщения будут дублироваться смс. В смс приходит только тема e-mail без самого тела письма. Этого более чем достаточно, вся необходимая информация там содержится.
В идеале конечно хочется отдельного модуля для смс с более гибкими параметрами настройки. Может и до такого дойдут руки. Но и в текущем варианте все отлично работает и позволяет быстро реагировать на нештатные ситуации.

ссылка на оригинал статьи http://habrahabr.ru/post/192250/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *