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

в 5:25, , рубрики: Без рубрики

Для мониторинга серверов я использую 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 без самого тела письма. Этого более чем достаточно, вся необходимая информация там содержится.
В идеале конечно хочется отдельного модуля для смс с более гибкими параметрами настройки. Может и до такого дойдут руки. Но и в текущем варианте все отлично работает и позволяет быстро реагировать на нештатные ситуации.

Автор: mrAleks

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js