Універсальний спосіб моніторингу Asterisk з допомогою Zabbix

image

Добрий день, хабровчане.

У цьому пості я хотів би розповісти про те, як ми здійснюємо моніторинг серверів Asterisk. Безумовно, пости по використанню Zabbix для моніторингу Asterisk вже є на хабре, в них ми почерпнули багато цікавої інформації і додали ще ряд необхідних, на наш погляд, речей.

Що з цього вийшло — можна подивитися під катом.

Телефонія є критичним сервісом в роботі компанії. Найважливішим завданням після розгортання і налаштування телефонної інфраструктури є її моніторинг. Своєчасне оповіщення відповідальних за функціонування телефонних мережі осіб зможе компанії заощадити величезну кількість часу і грошей і мінімізувати час простою телефонної станції.

Спочатку для моніторингу сервера Asterisk потрібно вибрати інструмент, яким буде здійснюватися моніторинг. Безумовно в мережі існує величезна кількість самописних скриптів, які дозволяють здійснювати поверхневий моніторинг сервера, але часто вони є малофункціональними, вимагають глибоких знань linux і природно не мають GUI.

Для моніторингу стану серверів телефонії нами була обрана система моніторингу Zabbix. Zabbix — досить потужний інструмент моніторингу, який має велику кількість шаблонів для моніторингу вузлів мережі і процесів і дозволяє вбудовувати користувача. Для нормального функціонування сервера Asterisk ми виділили наступні компоненти, які потрібно моніторити і написали під них скрипт на python, які будемо перенести в Zabbix:

  • Використання CPU, RAM, HDD (графіки, звіти і повідомлення)
  • Мережевий трафік на кожному інтерфейсі
  • Моніторинг процесу і пам'яті для Asterisk
  • Аналіз процесу і пам'яті для Mysql
  • Моніторинг процесу і пам'яті для Apache
  • Відстеження процесу fail2ban
  • Реєстрація і статус SIP провайдерів
  • Статус кожного SIP пєєра (peer)
  • Кількість поточних дзвінків в Asterisk
  • Моніторинг черг
  • Відстеження кількості дзвінків у черзі
  • Моніторинг Агентів черзі


При виникненні проблем з одним із вищеназваних параметрів, Zabbix надсилає повідомлення (варіанти оповіщення: повідомлення на e-mail, jabber, SMS) адміністратору АТС або будь-якій іншій відповідальній особі для вжиття заходів щодо оперативного усунення проблеми.

Архітектура Zabbix включає в себе:

  • безпосередньо сам сервера моніторингу, отримує і обробляє дані, а також запускає скрипти оповіщення
  • бази даних
  • веб-інтерфейсу
  • Zabbix-агента, встановленого на спостережуваному сервері.



Розглянемо процес установки zabbix-агента.



Спочатку на вашому сервері повинні бути задоволені наступні залежності:

  • python 2.7+
  • python-all-dev
  • Zabbix 2.4+
  • asterisk 1.8+
  • argparse 1.2.1+
  • pexpect 3.3+
  • posix-ipc 0.9.9+
  • wsgiref 0.1.2+


Встановлюємо безпосередньо сам Zabbix-агент:
aptitude install zabbix-agent


Встановлюємо python-модулі для виконання наших користувальницьких скриптів Zabbix:

aptitude install python-pip python-all-dev
pip install argparse pexpect posix-ipc wsgiref


Качаємо необхідні нам скрипти (для зручності зібрали їх на bitbucket):
cd /etc/zabbix/
git clone https://pbxware@bitbucket.org/pbxware/asterisk-zabbix-py.git
cd asterisk-zabbix-py


Змінюємо settings.py у відповідності з налаштуваннями Asterisk:
vim setting.py

# coding=utf-8
HOST = "localhost" - адреса, на якому працює наш сервер Asterisk
PORT = "5038" - порт AMI з manager.conf
USERNAME = "zabbix" - користувач AMI
PASSWORD = "zabbixpasswordami" - пароль користувача AMI
DEFAULT_TIMEOUT = 3
AMI_VERSION = "1.3" - версія AMI, щоб дізнатися наберіть у терміналі telnet localhost 5038


Додаємо в кінці конфігураційного файлу /etc/asterisk/manager.conf наступні рядки:

[zabbix] ; username from settings.py
secret=zabbixpasswordami ; password from settings.py
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,command,reporting,message
allowmultiplelogin = yes
displayconnects = no
writetimeout = 100


Після виконання цих дій перезавантажуємо Asterisk:

service asterisk restart


Далі в конфігураційний файл zabbix-агента /etc/zabbix/zabbix_agentd.conf додаємо в самому низу:

Include=/etc/zabbix/asterisk-zabbix-py/userparameter_asterisk.conf


і перезавантажуємо zabbix-агент:

/etc/init.d/zabbix-agent restart


Наявні команди:

  • channel — CoreShowChannels
  • member — SIP member
  • peer — SIP peers
  • queue — SIP queue
  • registry — SIP registrations


Параметри:

./run.py -a Discovery.
./run.py -f <field_name> -p Return the param of the field
./run.py -f <field_name> -p-r Regular expression for field value. (Return group 1)
./run.py -v Verbose

Приклади:

sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py registry-a Return all SIP Registrations
sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer-a Return all SIP Peers
sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer-f Address-IP-p 101 Return ip address peer 101
sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer-f Status-r "(\d+)" -p 101 Return Qualify user 101

Опис модуля



Модуль для опитування Asterisk працює через AMI.

settings.py — налаштування модуля
userparameter_asterisk.conf — команди zabbix і параметри, що передається модулю
zasterisk/ami.py — підключення до AMI використовуючи pexpect
commands/ — папка з командами

Модуль універсальний, і якщо немає потрібного параметра, то його можна легко додати. Наприклад потрібно отримати контекст sip-бенкету 101:

sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer-f Context-p 101

отримаємо відповідь from-users (моє назва контексту)

або, наприклад, дізнатися використовувані кодеки:

sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer-f Codecs-p 101

отримаємо відповідь (g722|ulaw|alaw|g729)

Для більш детального виведення інформації до команд можна додавати опцію "-v"

Якщо нам потрібні додаткові команди, то за аналогією з файлами з commands додаємо свій, наприклад iax2.py, який буде моніторити IAX-бенкети:

# coding=utf-8
from zasterisk.base import DiscoveryFieldCommand


class Command(DiscoveryFieldCommand):
help = "'
IAX2 peers
"'

def discovery(self, ami):
def callback(connect, timeout):
events = self.parse_events(connect)
return self.create_discovery(events.get("PeerEntry"), "{#USERNAME}", "ObjectName")

return ami.execute("IAXpeers", {}, callback)

def get_field(self, ami, field_name, param):
return ami.execute("IAXpeers", {"Peer": param}, lambda connect, timeout: self.expect_field(
connect, field_name, timeout))

def count(self, ami):
return 0


В результаті отримаємо можливість змінювати параметри IAX бенкетів:

sudo-u zabbix /etc/zabbix/asterisk-zabbix-py/run.py iax2-v-f IPaddress-p demo


результат: 216.207.245.47

У висновку хотілося б відзначити, що ми навели лише деякі, найважливіші на нашу думку, процеси для моніторингу. За допомогою даного модуля для Zabbix ви можете моніторити інші необхідні вам процеси. Сподіваюся даний топік може вам отримувати більш детальну інформацію про «життєдіяльності» вашого Asterisk і максимально мінімізувати час простою:)

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.