В этой публикации я опять же напишу краткую шпаргалку по о том, как можно настроить Мониторинг SIP транков FreePBX, а также состояние соединения до пиров. О том, как настроить мониторинг FreePBX в Zabbix я уже писал ранее. Только вот штатный шаблон не позволяет отслеживать состояние отдельных SIP транков. Поэтому пришлось немного дополнить мониторинг. О том, как это можно сделать я расскажу ниже.
Версии ПО
Версия Zabbix: Zabbix 6.2.6.
Версия FreePBX: 14.0.16.11 (Asterisk 14.5.0).
Немного теории
Как я уже говорил ранее, в шаблоне для Asterisk от Zabbix нет возможности мониторить состояние SIP транков. Прийдется немного расширить мониторинг.
Что я хочу отслеживать:
- Состояние SIP-транков.
- Состояние соединения до пиров (которые используют TCP соединения).
Первое, что нужно выяснить – это то, как можно получить эту информацию через консоль Asterisk.
Команда для получения состояния SIP регистраций:
asterisk -rx "sip show registry"
[root@FreePBX ~]# asterisk -rx "sip show registry"
Host dnsmgr Username Refresh State Reg.Time
111111.11.rt.ru:5060 Y admin 3185 Registered Wed, 08 Mar 2023 18:04:40
1 SIP registrations.
[root@FreePBX ~]#
т.е. в случае успешной SIP регистрации статус будет отображаться как “Registered”.
Команда для проверки состояния соединений до пиров:
asterisk -rx "sip show peers"
[root@FreePBX ~]# asterisk -rx "sip show peers"
Name/username Host Dyn Forcerport Comedia ACL Port Status Description
........
RT/xxxxx 1.1.1.1 Yes Yes 5060 OK (31 ms)
goip_1/goip_1 192.168.1.12 D Yes Yes 5060 OK (7 ms)
goip_gsm 192.168.1.12 Yes Yes 5060 OK (5 ms)
101 sip peers [Monitored: 3 online, 98 offline Unmonitored: 0 online, 0 offline]
[root@FreePBX ~]#
т.е. в случае успешного соединения статус будет отображаться как “OK”.
Теперь попробуем сформировать нужные нам команды. Общий принцип, которые я использовал следующий – в случае успешной проверки команда должна возвращать значение 1, в противном случае возвращать значение 0.
Команда для проверки SIP регистраций (для SIP регистрации 111111.11.rt.ru):
if [[ $(sudo asterisk -rx "sip show registry" | grep "111111.11.rt.ru" | awk {'print $5'}) == "Registered" ]]; then echo 1; else echo 0; fi
Команда для проверки состояния соединений (для пира RT):
if [[ $(sudo asterisk -rx "sip show peer RT" | grep Status | awk {'print $3'}) == "OK" ]]; then echo 1; else echo 0; fi
Поскольку SIP транков и пиров можем быть несколько, то нужно немного обобщить команды таким образом, что при оформлении их в качестве скриптов всю нужную информацию можно было передать в качестве параметра.
Итоговая команда для проверки SIP регистраций:
if [[ $(sudo asterisk -rx "sip show registry" | grep $1 | awk {'print $5'}) == "Registered" ]]; then echo 1; else echo 0; fi
Итоговая команда для проверки состояния соединений:
if [[ $(sudo asterisk -rx "sip show peer $1" | grep Status | awk {'print $3'}) == "OK" ]]; then echo 1; else echo 0; fi
Далее я приступлю непосредственно к настройке.
Мониторинг SIP-транков FreePBX и соединения до пиров
Теперь я покажу, как настроить мониторинг SIP транков FreePBX и пиров непосредственно в Zabbix.
Настройка пользовательских параметров агента Zabbix
Поскольку команды у нас получились длинные и содержащие довольно много спецсимволов, то через обычный system.run[command] выполнить мы их. К тому же имя SIP транка или имя пира я хочу передавать параметрами к скрипту.
Для реализации подхода к мониторингу с требованиями выше я буду использовать пользовательские команды агента Zabbix.
Сначала я подготовлю два скрипта – для отслеживания состояния SIP транков и отслеживания состояния пиров.
Создам скрипт для мониторинга SIP транков:
nano /usr/lib/zabbix/externalscripts/TrunkAvailability.sh
#!/bin/bash
if [[ $(sudo asterisk -rx "sip show registry" | grep $1 | awk {'print $5'}) == "Registered" ]]; then echo 1; else echo 0; fi
Также создам скрипт для мониторинга состояния пиров:
nano /usr/lib/zabbix/externalscripts/PeerAvailability.sh
#!/bin/bash
if [[ $(sudo asterisk -rx "sip show peer $1" | grep Status | awk {'print $3'}) == "OK" ]]; then echo 1; else echo 0; fi
Установим бит выполнения:
chmod +x /usr/lib/zabbix/externalscripts/PeerAvailability.sh
chmod +x /usr/lib/zabbix/externalscripts/TrunkAvailability.sh
После создания скриптов необходимо добавить пользовательские параметры в конфигурационный файл агента Zabbix:
nano /etc/zabbix/zabbix_agentd.conf
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=peerstatus[*],/usr/lib/zabbix/externalscripts/PeerAvailability.sh $1
UserParameter=sipregistrystatus[*],/usr/lib/zabbix/externalscripts/TrunkAvailability.sh $1
Особо в детали вдаваться не буду, т.к. все подробно расписано в документации. Если кратко, то агент Zabbix будет вызыывать скрипт PeerAvailability.sh или TrunkAvailability.sh и передавать в этот скрипт параметр, который мы передали элементу peerstatus или sipregistrystatus. Например, при вызове sipregistrystatus[“11111.11.rt.ru”] в настройках элементов мониторинга скрипту TrunkAvailability.sh будет передано значение “RT” в качестве параметра, т.е. итоговый вызов скрипта будет вот такой:
TrunkAvailability.sh "11111.11.rt.ru"
После внесения всех изменений в конфигурационный файл агента Zabbix необходимо его перезапустить:
systemctl restart zabbix-agent
Настройка файла sudoers
Чтобы учетная запись агента Zabbix могла выполнять запуск команд в asterisk без пароля необходимо добавить соответствующую запись в файл sudoers:
vim sudoers
abbix ALL=NOPASSWD: /usr/sbin/asterisk
Сохраняем внесенные изменения.
Добавление элементов мониторинга в шаблон Zabbix
Последний шаг – это непосредственно добавление элементов мониторинга в веб интерфейсе управления Zabbix.
Для примера я добавлю один элемент для отслеживания состояния SIP транка и один элемент для отслеживания состояния соединения с пиром.
Я бы рекомендовал создать для этих целей отдельный шаблон мониторинга, который вы в последующем привяжете к хосту с FreePBX.
Пример для SIP транка:
Кратко привожу основные параметры настройки.
Параметр | Мое Значение | Описание |
Name | SIP Registry Status RT | Имя элемента мониторинга. Может быть любое |
Type | Zabbix agent | Тип элемента мониторинга |
Key | sipregistrystatus[“111111.11.rt.ru”] | Один из самых важных параметров. Здесь нужно указать ключ, который мы настроили на агента Zabbix + передать ему параметр – имя SIP транка |
Type of information | numeric (unsigned) | Тип значения. Наш скрипт возвращает либо 1, либо 0. Целое значение без знака вполне подойдет |
Update interval | 1m | Интервал опроса. Я буду отслеживать состояние раз в минуту |
Description | 1 – sip registry is active 0 – sip registry is offline | Для удобства интерпретации полученных значений от агента Zabbix |
Пример для отслеживания состояния соединения с пиром:
Кратко привожу основные параметры настройки.
Параметр | Мое Значение | Описание |
Name | Peer Status GSM | Имя элемента мониторинга. Может быть любое |
Type | Zabbix agent | Тип элемента мониторинга |
Key | peerstatus[“goip_gsm”] | Один из самых важных параметров. Здесь нужно указать ключ, который мы настроили на агента Zabbix + передать ему параметр – имя пира |
Type of information | numeric (unsigned) | Тип значения. Наш скрипт возвращает либо 1, либо 0. Целое значение без знака вполне подойдет |
Update interval | 1m | Интервал опроса. Я буду отслеживать состояние раз в минуту |
Description | 1 – peer is active 0 – peer is offline | Для удобства интерпретации полученных значений от агента Zabbix |
Далее, по желанию, вы можете настроить триггеры, графики и дашборы на ваше усмотрение и вкус.
Проверка работы
Проверим получаемые данные:
Агент Zabbix рапортует о том, что все SIP транки и пиры, которые мы подключили к мониторингу доступны.
Если вы настроили какие-то графики или дашборы, то на них у вас также должна начать отображаться собранная информация о состоянии транков и соединений.
Настройка мониторинга SIP-транков и подключения к пирам на FreePBX завершена.
Мониторинг SIP транков FreePBX в Zabbix: 2 комментария
chmod x+ /usr/lib/zabbix/externalscripts/PeerAvailability.sh
chmod +x /usr/lib/zabbix/externalscripts/PeerAvailability.sh
Добрый день! Благодарю за внимательность. Исправил опечатку.