Мониторинг транков (trunk) в asterisk с помощью zabbix

Мне понадобился простой мониторинг состояния транков в asterisk. Иногда после проблем с интернетом на некоторых серверах автоматически не восстанавливаются транки к sip провайдерам. Приходится дергать их вручную через sip reload после того, как пользователи начинают жаловаться. А так как провайдеров может быть несколько, не всегда сразу становится понятно, что какой-то из каналов отвалился.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

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

Введение

Я буду использовать очень простую проверку. В интернете находится много рецептов по мониторингу asterisk с помощью zabbix. Есть готовые наборы скриптов на питоне, есть шаблоны. Можно настроить мониторинг практически всего, что только пожелаешь.

Мне не хотелось во всем этом разбираться и нагромождать в систему, так как нужно только состояние транков - зарегистрирован или нет. Усложнять чем-то еще свои системы мониторинга не хотелось. Больше никакие данные мне не нужны. Я стараюсь настраивать мониторинг только тех параметров, которые реально необходимы. Это позволяет экономить время и ресурсы сервера.

С помощью простого sh скрипта я буду проверять суммарное количество транков в системе и сравнивать это число с числом зарегистрированных транков. Если разница этих чисел будет отлична от нуля, значит как минимум одна регистрация отвалилась. Нужно на всякий случай проверить сервер и выяснить причину.

После этой проверки можно тем же скриптом и перезапустить регистрации, но я в статье ограничусь только мониторингом состояния. Лично мне перезапуск в данном случае не нужен, так как ситуации бывают редко и я хочу сам проверить, почему регистрации отвалились.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Если у вас есть вопросы по настройке Asterisk, рекомендую мою очень подробную статью на эту тему. Там разобран на примерах основаной функционал современной ip атс.

Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.

Настройка агента для мониторинга транков (trunks)

Создадим папку для пользовательских скриптов в каталоге zabbix:

# mkdir /etc/zabbix/scripts

Создаем в ней скрипт asterisk.trunk.sh следующего содержания:

#!/bin/sh
# Получаем количество всех транков в системе
number_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep "SIP registrations" | awk '{print $1}'`
# Считаем количество зарегистрированных транков
reg_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l`
# Вычисляем разницу между полученными значениями
let result=$number_tranks-$reg_tranks
# Выводим результат вычисления
echo $result

Назначаем владельцем файла пользователя zabbix и выставляем права на выполнение скрипта:

# chown zabbix. /etc/zabbix/scripts/asterisk.trunk.sh
# chmod 0750 /etc/zabbix/scripts/asterisk.trunk.sh

Теперь просто запустите скрипт и посмотрите результат. Если все регистрации подключены, то скрипт должен вернуть значение 0:

# /etc/zabbix/scripts/asterisk.trunk.sh
0

Открываем на редактирование конфиг агента и добавляем параметр UserParameter:

UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk.sh

Перезапускаем zabbix-agent той командой, что соответствует вашей системе. В CentOS 7 делаем так:

# systemctl restart zabbix-agent

Теперь проверим с помощью zabbix_agentd какое значение будет отправлять агент на сервер:

# zabbix_agentd -t asterisk.trunk
asterisk.trunk [t|0]

Все в порядке, то что надо. На этом настройка агента на сервере asterisk закончена. Переходим на сервер мониторинга.

Создание шаблона мониторинга asterisk на сервере zabbix

Нам нужно создать шаблон на сервере, для назначения его серверам с астериском. Здесь ничего сложного, делаем все то же самое, что мы делали ранее, настраивая мониторинг рейда mdadm. Идем в раздел Configuration -> Templates, нажимаем Create template.

Создание шаблона Asterisk

Пишем название и добавляем его в группу с шаблонами.

Указываем параметры нового шаблона

Открываем шаблон, переходим в раздел Items и жмем на Create item. Заполняем параметры нового итема как на картинке.

Создание элемента для мониторинга транков

Я поставил интервал проверок 120 секунд = 2 минуты. Вы можете поменять под свои нужды этот параметр. Сохраняем новый итем.

Для сбора данных все готово. Теперь назначаем шаблон серверам с астериском, где мы подготовили агенты мониторинга и скрипты и ждем поступления данных. Проверять как обычно идем в Latest data. Через пару минут должны поступить значения.

Просмотр данным мониторинга asterisk

У меня пришло значение 0 как и должно быть. Все регистрации на месте. Теперь нам нужно добавить триггер, который будет отправлять уведомление, если какая-нибудь из регистраций отвалится. Для этого идем в созданный шаблон и переходим в раздел Triggers. Жмем Create trigger и указываем значения, как у меня.

Создание триггера мониторинга регистраций

Если 3 последние проверки покажут значение, отличное от 0, сработает триггер и прилетит уведомление на почту. Сохраняем триггер. На этом все. Можете проверить работу любым способом, который придумаете. Например, временно измените пароль на одном из транков, или добавив новый с несуществующими параметрами. Можно и не проверять, все должно и так работать :)

Возможные ошибки

Если ваш новый item не работает, получает статус not supported, а в описании причины ошибка:

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

Необходимо разрешить пользователю zabbix, от которого работает скрипт, запускать asterisk. Для этого добавляем в файл /etc/sudoers в самый конец следующую строку:

zabbix ALL = NOPASSWD: /usr/sbin/asterisk

После этого проверяем выполнение скрипта от пользователя zabbix:

# sudo -u zabbix /etc/zabbix/scripts/asterisk.trunk.sh

Если получаете вывод значения, значит все в порядке. Если же все равно видите ошибку:

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

Добавьте в скрипт перед /usr/sbin/asterisk выполнение /usr/bin/sudo. Должно получиться так:

reg_tranks=`/usr/bin/sudo /usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l`

После этого отцепите шаблон от хоста и добавьте заново. Подождите несколько минут обновления данных. Вы можете снова получить ошибку, но уже другого рода:

sudo: sorry, you must have a tty to run sudo

Эта ошибка появится, если у вас пользователь zabbix создан без какой-либо оболочки. Это зависит от системы и версии заббикс агента. Проверить можно в файле /etc/passwd:

# cat /etc/passwd | grep zabbix
zabbix:x:496:496:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

Пользователям без оболочки по-умолчанию запрещено использовать sudo, которое мы добавили в скрипт. Исправить это можно в фале /etc/sudoers, закомментировав параметр:

#Defaults    requiretty

После этого снова отцепляем шаблон и прикрепляем заново. Теперь должно быть все в порядке.

Постарался предусмотреть все варианты развития событий. Наличие тех или иных ошибок будет зависеть от операционной системы и версии zabbix и asterisk.

Заключение

В очередной раз zabbix подтвердил свою простоту и гибкость настроек. Буквально за несколько минут, после беглого безрезультатного поиска в гугле, я смастерил простенький скрипт и добавил его к системе мониторинга. Поставленную задачу он успешно выполняет. Так как ставил на разные системы, пришлось отловить несколько ошибок.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Дополнительные материалы по Zabbix

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Рекомендую полезные материалы по Zabbix:
Настройки системы
  • Установка 4.0
  • Обновление 3.0 -> 3.2
  • Обновление 3.4 -> 4.0
  • Установка Zabbix Proxy
  • Работа на NGINX
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0.
Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями.
Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах.
Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm.
Мониторинг служб и сервисов
 
  • Температура процессора
  • Nginx и php-fpm
  • Mysql репликация
  • Службы Linux
  • Рейд mdadm
  • Транки Asterisk
  • Synology
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов.
Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров.
Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы.
Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks)
Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция.
Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix.
Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix.
Мониторинг различных значений
  • Мониторинг сайта
  • Мониторинг бэкапов
  • Размер бэкапа
  • Делегирование домена
  • Значения из текстового файла
  • Мониторинг логов
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения - доступность сайта, время отклика, скорость доступа к сайту.
Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time.
Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов.
Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены.
Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

22 комментария

  1. Я конечно извиняюсь, но транк не может быть зарегистрирован или нет. Транк может быть доступен или не доступен, или не мониториться вообще. sip show peers в помощь. А то, что вы описываете - это sip-регистрации, регистраций может быть несколько в рамках однго транка. Хотя с точки зрения парсинга выхлопа asterisk - разница не особо большая

  2. Alexey Chernyavskiy

    Для pjsip транков все так же, только скрипн немного меняется

    #!/bin/sh
    # Получаем количество всех транков в системе
    number_tranks=`/usr/sbin/asterisk -rx "pjsip show registrations" | grep "Objects found:" | awk '{pr$

    # Считаем количество зарегистрированных транков
    reg_tranks=`/usr/sbin/asterisk -rx "pjsip show registrations" | grep Registered | wc -l`

    # Вычисляем разницу между полученными значениями
    let result=$number_tranks-$reg_tranks

    # Выводим результат вычисления
    echo $result

  3. Евгений

    Добрый день, всё работает отлично, единственно есть вопрос. У меня на астериске 13 транков. Как можно сделать что бы при обрыве в уведомлении было имя того транка который ушёл в обрыв. Спасибо

  4. Спасибо за подсказку :)

  5. Имеется трабл.

    Value "Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
    -2" of type "string" is not suitable for value type "Numeric (unsigned)"

    я так понял что как раз ошибка из за того что zabbix не может запустить скрипт.

    Всё что описано в возможных ошибках - сделано. Только вот строчки
    #Defaults requiretty
    небыло в файле /etc/sudoers

    Так же если в консоли ввести

    sudo -u zabbix /etc/zabbix/scripts/asterisk.trunk.sh

    выводит следующее

    Unable to access the running directory (Permission denied). Changing to '/' for compatibility.
    Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
    -2

    • Если все это настраивается на локальном сервер мониторинга, где нет повышенных требований к безопасности, можно просто запустить zabbix agent от root. В конфиге агента есть закомментированные строки на этот счет. Если это не приемлемо, то надо по месту разбираться, каких прав не хватает. По ошибке видно, что у заббикса нет доступа к указанной директории.

  6. Евгений

    Добрый день, не могу понять куда копать, пробовал на разных версиях агента, подскажите?

    zabbix_agentd -t asterisk.trunk

    asterisk.trunk [m|ZBX_NOTSUPPORTED] [Unsupported item key.]

    • Лог на сервере можно посмотреть. Но тут и так понятно, что в скрипте или в userparameters ошибка. Агент не возвращает значение.

      • Добрый день!
        Как исправить?

      • Проблема не в ошибке в скрипте, а в версии Zabbix agent .
        У меня на одной машине с Centos 7.0 + Elastix2,5 + версией Zabbix agent 3.2.2 Ваш скрипт отрабатывается ,
        а с последними версиями агента релиза 4 ,например Centos 7.6 +Issabel + Zabbix agent 4.4.4 тот же самый скрипт -нет.

        Та же самая история .

        [root@issabel etc]# zabbix_agentd -t asterisk.trunk
        asterisk.trunk [m|ZBX_NOTSUPPORTED] [Unsupported item key.]

      • Можете игнорировать мой предыдущий комментарий - с последений версией тоже все работает ж8-))) .
        Сам дурак .

  7. У вас ошибка вы башевский скрипт хотите запустить от shell

    #!/bin/bash

    при вашем скрипте жалкется let: not found

    • Кстати да, я и не заметил, что в sh запускаю. Но проверил сейчас свои сервера. У меня там именно в таком виде, как в статье, все работает. В sh скрипт корректно отрабатывает.

  8. Здравствуйте! Мониторинг транка работает, но минимум раз в сутки zabbix отправляет два сообщения с минутным интервалом о срабатывании триггера и возвращении его в исходное положение. Причем значение Trunk status (Asterisksrv:asterisk.trunk): 0 в обоих сообщениях. Не знаете, что это может быть?

    • Надо смотреть, что там на сервере. Транки реально пропадали или нет. Мне тоже иногда кажется, что есть ложные срабатывания, но никак руки не дойдут проверить.

  9. Романё

    #Defaults requiretty - закоментирована...

  10. Романё

    на сервере телефонии все ок
    [root@Asterisk-test scripts]# zabbix_agentd -t chek_peer_Vega
    chek_peer_Vega [t|1]
    А вот на сервере zabbix получаю такую ошибку
    Received value [sudo: sorry, you must have a tty to run sudo0] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]
    не могу понять в чем проблема...

    • У меня же описана эта ошибка в самом конце. Попробуй решение.

    • sudo: sorry, you must have a tty to run sudo
      Эта ошибка появится, если у вас пользователь zabbix создан без какой-либо оболочки. Это зависит от системы и версии заббикс агента. Проверить можно в файле /etc/passwd:

      # cat /etc/passwd | grep zabbix
      zabbix:x:496:496:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
      Пользователям без оболочки по-умолчанию запрещено использовать sudo, которое мы добавили в скрипт. Исправить это можно в фале /etc/sudoers, закомментировав параметр:

      #Defaults requiretty
      После этого снова отцепляем шаблон и прикрепляем заново. Теперь должно быть все в порядке.

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

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

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar