Мониторинг Asterisk при помощи shell скриптов в системе Zabbix.

Сентябрь 13th, 2016 | от | asterisk, centos, web, zabbix

Сен
13


В процессе работы зачастую требуется осуществлять мониторинг сложных систем и серверов с большим количеством запущенных сервисов. Эти сервисы могут мониторится по огромному числу разных параметров. Более того, в каждой отдельной Кампании требования к тому, какие именно критерии системы являются ключевыми различны.

Система мониторинга Zabbix предлагает широкий спектр заранее подготовленных шаблонов для мониторинга серверов, однако, стандартных тестов может оказаться недостаточно. В таком случае удачным выходом будет запуск отдельного shell скрипта. Который будет отправлять запрос к необходимому сервису и возвращать результат, который затем можно принять и обработать в системе Zabbix.

Для примера осуществим мониторинг сервера Asterisk по следующим параметрам:
1) Число одновременных активных звонков.

2) Число одновременно подключенных пиров (будет выводить данные о количестве пиров, и, если их число резко возрастет за короткий промежуток времени – выдаст сообщение о возможной угрозе).

3) Число активных транков (если на каком-либо транке asterisk перестанет регистрироваться – выдаст сообщение об этом с высокой степенью важности).

Для начала установим и запустим на необходимой машине zabbix-agent, который будет собирать все необходимые сведения и отправлять их на сервер. Установим агент той же версии, что и сервер. Версию сервера можно посмотреть внизу веб-интерфейса.

 

Установим пакет конфигурации репозитория

Zabbix 2.4 для RHEL5, Oracle Linux 5, CentOS 5:

# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/5/x86_64/zabbix-release-2.4-1.el5.noarch.rpm

Zabbix 2.4 для RHEL6, Oracle Linux 6, CentOS 6:

# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

Zabbix 2.4 для RHEL7, Oracle Linux 7, CentOS 7:

# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm

 

После чего произведем установку агента

yum install zabbix-agent

После установки необходимо отредактировать файл конфигурации /etc/zabbix/zabbix_agentd.conf

Редактируем следующие поля

Server=1.2.3.4

здесь указывается IP адрес или доменное имя zabbix-сервера

 

ListenPort=10051

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

 

ServerActive=1.2.3.4

здесь указывается IP адрес или доменное имя сервера для активных проверок. Если это поле не заполнять, Zabbix сервер не сможет проводить активные проверки данной системы.

 

Hostname=4.3.2.1

здесь указывается доменное имя или IP адрес данной машины в сети, по которому Zabbix сервер будет отправлять к ней запросы. (чтобы узнать IP адрес, воспользуйтесь командой ifconfig)

 

После того, как данные поля будут заполнены, необходимо добавить порт 10050 (или тот, который использует Zabbix сервер в Вашей сети) в исключения iptables. Откройте для редактирования файл

vim /etc/sysconfig/iptables

Добавить в середину файла строку

-A INPUT -p tcp -m tcp --dport 10050 -j ACCEPT

После чего выполните рестарт сервиса iptables

service iptables restart

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

/etc/init.d/zabbix-agent start
chkconfig --level 345 zabbix-agent on

Теперь zabbix-agent на нашей системе сконфигурирован и запущен. Можно приступать к добавлению хоста в систему мониторинга. В веб-интерфейсе переходим на вкладку

Настройка – Узлы сети

Нажимаем «Добавить узел сети» и заполняем необходимые поля

Имя узла сети – необходимо вписать те же данные, которые были указаны в файле zabbix_agentd.conf, в строке «Hostname»

Видимое имя – Заполняется произвольно. Под этим именем данный хост будет отображаться в веб-интерфейсе Zabbix.

Группы – можно выбрать группу, к которой относится текущий хост. Служит для удобства отображения и поиска хостов. Особенно при большом их количестве.

IP адрес – указывается IP адрес данной машины

Порт – порт на котором работает Zabbix сервер. Указывается то же значение, которое было прописано в zabbix_agentd.conf, в строке «ListenPort»

После заполнения всех полей, нажимаем кнопку «Добавить». Данный хост добавлен в систему мониторинга Zabbix. Теперь можно приступить к добавлению тестов. Для начала добавим стандартные тесты для OS Linux (в нашем случае хост использует OS CentOS 6)

В окне настройки узла сети переходим во вкладку «Шаблоны»

В поле «Соединить с новыми шаблонами» вводим linux и выбираем из предложенного списка «Template OS Linux». После чего нажимаем кнопку «Добавить»

А затем кнопку «Добавить» внизу окна (данная кнопка добавляет все выбранные шаблоны).

Для проверки можно перейти во вкладку «Настройка» - «Узлы сети» - «Элементы данных».

В столбце «Состояние» должно быть написано «Активирован». При возникновении ошибки – будет выведен её текст.

Если все в порядке и стандартный мониторинг системы работает, можно приступить к добавлению мониторинга отдельных сервисов при помощи внешних скриптов.

Добавление скриптов осуществляется при помощи опции UserParameter, прописываемой в файле zabbix_agentd.conf. Открываем для редактирования данный файл и в конец раздела

### Option: UserParameter

Дописываем строки

UserParameter=asterisk.trunk,/usr/etc/scripts/asterisk_trunks.sh
UserParameter=asterisk.calls,/usr/etc/scripts/asterisk_calls.sh
UserParameter=asterisk.peers,/usr/etc/scripts/asterisk_peers.sh

Где значение, указанное до запятой является именем ключа, а значение после запятой – полный путь к исполняемому файлу. В данном случае, ключи для мониторинга имеют имена asterisk.trunk, asterisk.calls и asterisk.peers.

В директории /usr/etc/scripts/ создаем соответствующие файлы asterisk_trunks.sh, asterisk_calls.sh и asterisk_peers.sh.

Скрипт asterisk_calls.sh служит для вывода в Zabbix количества активных разговоров и необходим для сбора статистики. Сам скрипт выглядит следующим образом

asterisk_calls.sh »

#!/bin/sh

total=`sudo asterisk -rx 'core show calls' | grep active`

echo $total

Скрипт asterisk_peers.sh необходим для вывода количества активных пиров.

asterisk_peers.sh »

#!/bin/sh

total=`sudo asterisk -rx 'sip show peers' | sed -n '/OK/p' | wc -l`

echo $total

Скрипт asterisk_trunks.sh необходим для мониторинг количества активных транков, и вывода сообщения о проблемах с регистрацией на одном из них

asterisk_trunks.sh »

#!/bin/sh

# Получаем количество всех транков в системе

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|No/p' | awk '{print $1}'`

# Сравниваем общее число с числом активных транков и выводим сообщение об их сотоянии

if [ $active -lt $total ]

then

echo Trunks offline $offline

else

echo All trunks are online

fi

Делаем данные файлы исполняемыми

chmod +x asterisk_calls.sh
chmod +x asterisk_peers.sh
chmod +x asterisk_trunks.sh

Все скрипты, запускаемый при помощи zabbix-agent выполняются под пользователем zabbix. Поэтому для выполнения некоторых команд может потребоваться добавление sudo.

Чтобы пользователь zabbix мог зпусть скрипты при помощи sudo без вода пароля, в файле /etc/sudoers необходимо после

root    ALL=(ALL)       ALL

добавить строку

zabbix ALL = NOPASSWD: /usr/sbin/asterisk

При появлении ошибки «sudo: sorry, you must have a tty to run sudo», после вышеуказанной строки, добавьте:

Defaults:zabbix !requiretty

После того, как скрипты были созданы и добавлены в конфигурационный файл агента, можно добавить новый Элемент данных в систему мониторинга. В веб-интерфейсе переходим во вкладку «Настройка» - «Узла сети», напротив необходимого нам хоста нажимаем на ссылку «Элементы данных». В открывшемся окне в правом верхнем углу нажимаем на кнопку «Создать элемент данных».

В данном окне заполняем необходимые поля:

Имя – Заполняется произвольно. По данному параметру будет производиться поиск и отображение текущего Элемента данных в системе.

Тип – будет выбран автоматически. Рекомендуется оставить без изменений.

Ключ – указывается тоже самое название, которое было прописано в файле zabbix_agentd.conf, в строке UserParameter перед запятой.

Интерфейс узла сети – будет заполнен автоматически. В данном поле указывается, через какой сетевой интерфейс будет осуществляться обмен данными с агентом.

Тип информации – выбирается в соответствии с тем, в каком виде скрипт выводит данные. В нашем случае, скрипт asterisk_trunks.sh выводит информацию в виде текста, поэтому в этом поле выбираем параметр «Текст».

Интервал обновления – указывает, как часто будет выполняться обновление данных по этому параметру (с какой частотой будет выполняться данный скрипт)

После заполнения необходимых полей, нажимаем кнопку «Добавить». Данный Элемент данных был успешно добавлен в систему мониторинга.

Аналогичным образом добавляем Элементы данных для двух оставшихся скриптов. Стоит отметить, что для Элемента данных «asterisk.peers» поле «Тип данных» необходимо оставить в виде

После добавления всех необходимых элементов для мониторинга остается добавить триггеры для оповещения, в случае, если что-то пойдет не так. Для этого в окне настройки узлов сети напротив необходимого узла нажимаем на ссылу «Триггеры». И в правом верхнем углу нажимаем кнопку «Создать триггер». В открывшемся окне заполняем необходимые поля:

Имя – заполняется произвольно. По данному имени будет осуществляться поиск и отсылка к триггеру в системе.

Выражение – тело триггера, в котором описывается, при каком условии он сработает. Для его описания нажимаем кнопку «Добавить» справа от поля ввода текста. В открывшемся окне в поле Элемент данных выбираем созданный нами Элемент “Trunk Status”. Далее в поле Функция указываем значение, приеденное на рисунке. По данному значению, система будет искать в выводе Элеента указанную в поле «V» строку, и, если её там не будет, выводить сообщение об ошибке. Таким образом, если Asterisk перестанет регистрироваться на каком-либо из транков, будет выведено сообщение об ошибке и текст, с указанием, какой именно транк не работает.

После заполнения полей нажимаем кнопку «Добавить». В окне добавления триггера выбираем

Важность – в данном случае ставим «Высокая».

И нажимаем «Добавить». Триггер добавлен. Аналогичным образом добавляем триггер к Элементу данных Asterisk Peers. За исключением того, что в данном случае в окне «Условия выражения триггера» выбираем функцию, приведенную ниже

Таким образом. Если за минуту число одновременно активных пиров увеличится больше, чем на 5 штук, будет выведено предупреждающее сообщение. В окне добавления триггера выбираем «Важность» - «Средняя» и нажимаем «Добавить».

 

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

 

 

Оставить комментарий