< meta name="referrer" content="origin">
Home » Asterisk » Настройка мониторинга asterisk в zabbix

Настройка мониторинга asterisk в zabbix

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

Введение

У меня есть подробный материал по пошаговой настройке asterisk. В нем не хватает для полноты картины мониторинга. Без него обслуживание и поддержка работоспособности сервера затруднительна. Я всегда стараюсь все, что можно, завести на мониторинг. Так спокойнее живется. Ранее я писал о мониторинге транков. В принципе, на простейший вопрос по доступности транков он отвечает, но в процессе эксплуатации я много раз переделывал этот мониторинг, потому что он малоинформативен.

Например, у вас периодически отваливает один из транков. Мониторинг вам об этом говорит, но вы не знаете, что за транк отвалился и по какой причине. Надо идти на сервер и проверять глазами. Когда на одном из серверов у меня начали глючить пару транков, я не выдержал и переделал этот мониторинг. А заодно и добавил некоторые другие проверки, которые мне показались важными. В итоге получился законченный шаблон для мониторинга всего сервера asterisk. Далее я расскажу обо всем подробнее.

Я все настраивал на сервере с версией 3.2, агенты той же версии. Работоспособность в 3.4 не проверял, но, по идее, все должно работать и там. Если у вас еще нет сервера мониторинга, то можете его установить и настроить — 3.2 или 3.4 на Centos 7 или 3.4 на Debian 9.

Параметры мониторинга asterisk

В интернете есть примеры мониторинга asterisk. Кое-что я оттуда подсмотрел, но готового решения, которое бы мне подошло полностью, я не увидел, поэтому решил сделать по-своему. Я подумал в решил, что мне полезны для мониторинга следующие метрики:

  1. Состояние транков. Если один из них отваливается, я узнаю о его имени уже в оповещении на почте.
  2. Состояние самой службы asterisk на сервере. Тут все просто — либо работает, либо нет.
  3. Состояние работы программы fail2ban. Тоже все просто — либо работает, либо нет.
  4. Наличие цепочек fail2ban в таблице iptables. Эта проверка гарантирует, что fail2ban не только запущен, но и успешно блокирует нарушителей.
  5. Факт перезапуска сервиса asterisk. Как бонус к этой метрике — uptime службы астериска.
  6. Количество активных разговоров в данный момент.

Небольшие комментарии к метрикам. Если сервер смотрит в интернет, то обязательно наличие iptables и fail2ban. Боты будут регулярно к вам стучаться и перебирать учетки. Так что следить за работой этих служб необходимо. По транкам я уже сказал, это один из основных параметров, так как время от времени они отваливаются. Гораздо чаще, чем сами сервисы. На всякий случай будем следить за работой сервиса астериск на сервере. Он хоть у меня обычно и не падает, даже не припомню такого, но теоретически с ним это может происходить. Мониторинг перезагрузки и аптайма службы сделан в основном для любопытства. Практической пользы в этой метрике я не вижу, если вы единственный админ на сервере и без вас его никто не перезапускает. Мониторинг за количеством активных звонков в asterisk сделан для того, чтобы можно было оценить примерную нагрузку и занятость линий.

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

Настройка zabbix-agent

Для мониторинга за asterisk, я буду использовать один скрипт и несколько обработанных выводов из запросов к астериску. Начнем со скрипта. Он будет проверять статус транков и если какой-либо из них будет в offline, назовет его. Кладем этот скрипт в директорию /etc/zabbix/scripts.

# cat /etc/zabbix/scripts/asterisk.trunk-with-name.sh
#!/bin/bash

# Получаем количество всех транков в системе
total=`sudo asterisk -rx 'sip show registry' | sed -n '/registrations/p' | awk '{print $1}'`
# Получаем число активных транков
active=`sudo asterisk -rx 'sip show registry' | sed -n '/Registered/p' | wc -l`
# Получаем имена транков с проблемам
offline=`sudo asterisk -rx 'sip show registry' | sed -n '/Request\|Authentication\|Auth/p' | awk '{print $3}'`
# Сравниваем общее число с числом активных транков и выводим сообщение об их состоянии
if [ $active -lt $total ]
then
echo Trunks offline $offline
else
echo All trunks are online
fi

Я все прокомментировал. Добавлю только пояснение к регулярке, которая определяет проблемные транки. Я знаком со следующими состояниями транков, когда они не работают:

  • Request Sent
  • No Authentication
  • Auth. Sent

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

Далее создаем файл конфигурации zabbix с UserParameters в /etc/zabbix/zabbix_agentd.d.

# cat /etc/zabbix/zabbix_agentd.d/asterisk.conf
# Статус службы fail2ban
UserParameter=asterisk.fail2ban_status,ps cax | grep fail2ban | wc -l
# Количество цепочек fail2ban в iptables
UserParameter=asterisk.fail2ban_chain,iptables -nL | grep Chain | grep -E 'f2b|fail2ban' | wc -l
# Время работы службы asterisk
UserParameter=asterisk.uptime,asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
# Количество активных разговоров
UserParameter=asterisk.active_calls,asterisk -rvvvvvx 'core show channels'| grep --text -i 'active call'| cut -c1
# Статус транков
UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk-with-name.sh
# Статус службы asterisk
UserParameter=asterisk.asterisk_status,ps cax | grep asterisk | wc -l

Некоторые из приведенных метрик требуют права root для своего исполнения. Скажу честно, мне было лениво разбираться с разрешениями и я просто запустил zabbix с правами root. Для этого в его конфиге /etc/zabbix/zabbix_agentd.conf раскомментировал следующую строку:

AllowRoot=1

После этого можно перезапустить zabbix-agent и проверить работу будущих итемов.

# systemctl restart zabbix-agent

Проверяем, насколько корректно агент возвращает указанные значения.

 # zabbix_agentd -t asterisk.asterisk_status
asterisk.asterisk_status [t|2]
# zabbix_agentd -t asterisk.fail2ban_chain
asterisk.fail2ban_chain [t|2]
# zabbix_agentd -t asterisk.trunk
asterisk.trunk [t|All trunks are online]

Все в порядке. В завершении настройки агента, поясню некоторые моменты для тех, кто не очень разбирается в bash скриптах. Для мониторинга статусов служб я просто вывожу список всех процессов, вычленяю из него нужный мне процесс, в данном случае asterisk или fail2ban и подсчитываю количество этих процессов. Далее в шаблоне я просто буду проверять число этих процессов. Если оно будет равно 0, значит процессы не работают.

Для анализа цепочки iptables я также обрабатываю ее вывод, ищу строки со словами fail2ban и подсчитываю их количество. Если они равны 0, значит fail2ban не работает, либо работает, но не добавляет правила в iptables, что по большому счету и равно тому, что он не работает.

Для мониторинга активных разговоров, я обрабатываю соответствующий вывод asterisk, вырезаю лишние строки и оставляю только необходимое мне число.

Мониторинг asterisk в zabbix сервере

Всю теорию я изложил выше. Осталось только добавить готовый шаблон на сервер и посмотреть на результат. Скачиваем шаблон — zabbix-asterisk-template.xml и импортируем его на сервер. В шаблоне присутствуют 6 элементов данных, которые мы определили в агенте, 5 триггеров и 1 график просто для красоты, чтобы был :). В этом шаблоне надобности в графиках нет. Остановлюсь подробнее на триггерах.

Триггеры шаблона мониторинга asterisk

Таблица триггеров в шаблоне мониторинга asterisk
Asterisk down on {HOST.NAME} Срабатывает, если последняя проверка количества запущенных процессов астериск вернула 0.
Asterisk restarted on {HOST.NAME} Тригер реагирует на изменение uptime службы. Если он стал меньше 300 секунд, то считается, что служба была перезапущена.
Fail2ban down on {HOST.NAME}  Срабатывает, если последняя проверка количества запущенных процессов fail2ban вернула 0.
Fail2ban inactive on {HOST.NAME}  Проверяет, есть ли в правилах iptables цепочки fail2ban. Если нет, срабатывает.
Trunk not registered on {HOST.NAME}  Срабатывает, если хотя бы одна из регистраций отвалилась.

Первые 4 триггера очевидны, по ним комментировать нечего. Остановлюсь на последнем с проверкой транков. Данный триггер проверяет текстовую строку «All trunks are online», которую возвращает итем. Если 2 раза подряд ее не было, значит проблема, и идет оповещение. Проблема закрывается, когда она же появляется 2 раза подряд. Сделал специально 2 проверки, чтобы не было ложных срабатываний на моментах перерегистрации или кратковременных сбоев, которые не требуют вмешательства.

После применения шаблона на хостах, увидите примерно такую картинку в «Последних данных».

Мониторинг asterisk в zabbix

Если какой-то транк отвалится, то в оповещении на почте будет его название. У меня вот так выглядят подобные оповещения.

Оповещение о проблеме с транком в астериск

На этом по мониторингу asterisk в zabbix все. Надеюсь, раскрыл тему достаточно подробно и понятно.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

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

Конечно, не очень правильно запускать zabbix от root. Тут я схалявил, но у меня есть оправдание — в заббиксе нет нормального средства для дебага не работающих скриптов. Итем просто становится неподдерживаемым и частенько приходится гадать, в чем же проблема. Даже когда выставляешь все необходимые права, все перепроверяешь, на стороне агента запускаешь и все работает как надо. Но на сервере итем не принимает данные.

Данный шаблон должен работать вместе со стандартным шаблоном для linux. Я видел в сети примеры шаблонов мониторинга asterisk, куда были добавлены метрики таких параметров сервера, как память, процессор, сеть и т.п. Не вижу смысла в таком подходе. Шаблоны надо максимально разделять, чтобы ими было удобнее пользоваться и не нагружать сервера лишними метриками. Я под каждый функционал сервера делаю отдельный шаблон. Примеры таких шаблонов можно посмотреть в моей рубрике zabbix.

На этом все. Не забываем меня научить, как надо администрировать в комментариях 🙂


Помогла статья? Есть возможность отблагодарить автора

10 комментариев

  1. Коллега, здравствуй!
    UserParameter=asterisk.active_calls,asterisk -rvvvvvx ‘core show channels’| grep —text -i ‘active call’| cut -c1

    cut -c -3 — небольшой фикс у кого кол-во звонков превышает двухзначное число.

    • Спасибо за дополнение. По месту, возможно, что-то надо подкрутить, как в этом примере.

  2. Поправочка -2. Ошибся.
    cut -c -2

  3. ¨asterisk -rx ‘sip show registry’ | sed -n ‘/Request|No|Auth|Registered/p’ »
    в ноябре очень интересно срабатывает.
    думаю ,чот у меня все транки оффлайн.
    и они же онлайн
    ))
    ахахах

    • Да уж, забавно получилось :))) Надо что-то придумать на этот счет! Есть идеи?

    • Самое простое, заменить No на Authentication. Я, кстати, не заметил этот глюк, так как у меня ни один транк не отваливался еще в ноябре. Я даже не сразу понял, при чем тут ноябрь 🙂

  4. Добрый день. Делаю по инструкции. При рестарте забикса падает с ошибкой:

    Job for zabbix-agent.service failed because the control process exited with error code. See "systemctl status zabbix-agent.service" and "journalctl -xe" for details.
    
     systemctl status zabbix-agent.service
    ● zabbix-agent.service - Zabbix Agent
       Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
       Active: activating (auto-restart) (Result: exit-code) since Пт 2017-11-03 08:33:44 +07; 4s ago
      Process: 6515 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS)
      Process: 6638 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=1/FAILURE)
     Main PID: 6383 (code=exited, status=0/SUCCESS)
    
    ноя 03 08:33:44 asterisk.grad.local systemd[1]: zabbix-agent.service: control process exited, code=exited status=1
    ноя 03 08:33:44 asterisk.grad.local systemd[1]: Failed to start Zabbix Agent.
    ноя 03 08:33:44 asterisk.grad.local systemd[1]: Unit zabbix-agent.service entered failed state.
    ноя 03 08:33:44 asterisk.grad.local systemd[1]: zabbix-agent.service failed.
    
     tail -f /var/log/zabbix/zabbix_agentd.log
      6383:20171103:082418.155 **************************
      6383:20171103:082418.155 using configuration file: /etc/zabbix/zabbix_agentd.conf
      6383:20171103:082418.155 agent #0 started [main process]
      6384:20171103:082418.157 agent #1 started [collector]
      6385:20171103:082418.157 agent #2 started [listener #1]
      6386:20171103:082418.160 agent #3 started [listener #2]
      6387:20171103:082418.167 agent #4 started [listener #3]
      6388:20171103:082418.170 agent #5 started [active checks #1]
      6383:20171103:082833.658 Got signal [signal:15(SIGTERM),sender_pid:6515,sender_uid:0,reason:0]. Exiting ...
      6383:20171103:082833.664 Zabbix Agent stopped. Zabbix 3.2.9 (revision 73587).

    Если закомментировать строчку

    UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk-with-name.sh

    в asterisk.conf то стартует нормально 🙂

    Allow root стоит 1 🙂

    • Вы что-то путаете.

      «Если закомментировать строчку
      UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk-with-name.sh
      в asterisk.conf то стартует нормально»

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

      • Я имел ввиду этот файл
        /etc/zabbix/zabbix_agentd.d/asterisk.conf
        я же правильно понимаю что он на сервере с астериском в папке забикс агента?

        в общем в понедельник ещё раз пройдусь по нему.
        единственное отличие это то что fail2ban я не настраивал за ненадобностью и следовательно 2 строчки с ним убрал

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

Ваш e-mail не будет опубликован.