Прикручиваем смс оповещение к 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 без самого тела письма. Этого более чем достаточно, вся необходимая информация там содержится.
В идеале конечно хочется отдельного модуля для смс с более гибкими параметрами настройки. Может и до такого дойдут руки. Но и в текущем варианте все отлично работает и позволяет быстро реагировать на нештатные ситуации.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 6

    –1
    как бесплатная, но более экономичная альтернатива — отсылать обычное письмо на адрес вроде ваш_номер@ваш_оператор.ru, но возможность и детали нужно уточнять у оператора. По мне такой способ более надёжен и нет ограничений на кол-во текста, но и не все операторы это поддерживают.
      +1
      Этот способ указан в статье под номером 1. Он рабочий со своими + и -.
      0
      Долго заморачивался с usb модемом для отправки SMS. Теперь в андроиде пиликает оповещение когда приходит email от cacti. SMS в прошлом :)
        0
        А лучше всего использовать сразу два способа: аппаратную часть и веб смс сервис, на случай отказа какого-то из…
          0
          Использую бесплатный сервис от hostmonitoring.net для мониторинга сайтов на шаред хостинге, альтернатив для шареда пока не видел.
          За cacti спасибо вам, раньше не слышал, хочу с ним поиграть.
            0
            У смс сервиса изменился API. Редактирование статьи автором недоступно, новую писать смысла нет. Опишу в комментарии разницу.

            Далее у вас должен быть рабочий аккаунт на смс сервисе vesms.ru. Если нет, регистрируемся. После скачиваем PHP класс для работы с сервисом. Распаковываем и кладем файл smsc_api.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/smsc_api.php');
            
                    $subject = trim($subject);
            
                    $message = str_replace('<SUBJECT>', $subject, $message);
            
            $recipients='NUMBER'; //номер на который отправляем сообщения
            $sender='cacti'; // имя отправителя, должно предварительно пройти модерацию
            send_sms($recipients, $subject, 0, 0, 0, 0, $sender);
            ...
            

            Only users with full accounts can post comments. Log in, please.