Звонок-оповещение zabbix через asterisk на мобильный телефон

Звонок-оповещение Zabbix через Asterisk на мобильный телефон

Меня однажды попросили настроить оповещение о некоторых событиях в zabbix в виде звонка на мобильный телефон с проговоркой определенного текста. Сам я в своей практике не сталкивался с ситуациями, когда нужно было бы именно звонить. Обычно хватает почты, смс или на худой конец telegram. Но раз просят, почему не настроить. Делается это довольно просто, и я сейчас расскажу как.

Введение

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

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

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

Первым делом мы напишем скрипт, который будет генерировать call файлы для asterisk и подготовим dialplan астериска для исходящих звонков через zabbix. А потом настроим выполнение этого скрипта по определенным событиям в мониторинге.

Все действия будут выполняться на серверах под управлением CentOS 7. Если у вас ничего нет и вы только думаете как настроить то, что я описал выше, приведу для вас все необходимые ссылки с описанием настройки всего, что понадобится:

Если вы предпочитаете систему Debian, то вот то же самое, только для нее:

Когда все готово, можно приступать к реализации задуманного.

Настройка оповещений через asterisk

Я не буду рассказывать о формате call файлов астериск. В интернете есть полная информация. Привожу сразу готовый скрипт с комментариями, который будет генерировать файл звонка. Этот скрипт должен располагаться на сервере с asterisk.

И на нем обязательно должен стоять zabbix-agent. Можно и без этого обойтись, генерировать call файл в любом месте и потом по сети тем или иным способом передавать на сервер с asterisk.

Но мне удобнее все делать сразу на астериске, так как у меня всегда все сервера под мониторингом.

Создадим директорию для скрипта, выставим на нее права и напишем скрипт для формирования call файла.

# mkdir /etc/zabbix/scripts && chown zabbix. /etc/zabbix/scripts # mcedit /etc/zabbix/scripts/make-call.sh#!/bin/bash callname=/etc/zabbix/scripts/zabbix-alert.call # Call-файл Asterisk echo “Channel: SIP/89659036455@num-mango” > $callname # Каким номером представляемся echo “Callerid: 101” >> $callname # Сколько раз звонить в случае неответа echo “MaxRetries: 2” >> $callname # Через сколько времени перезваниваем (сек) echo “RetryTime: 90” >> $callname # Сколько ждем ответа (сек) echo “WaitTime: 60” >> $callname # Контекс звонка в dialplan echo “Context: zabbix_alarm” >> $callname echo “Extension: s” >> $callname echo “Priority: 1” >> $callname cp $callname /var/spool/asterisk/outgoing/zabbix-alert.call rm -f $callname

89659036455 Мобильный телефон, куда будем звонить
num-mango Имя транка для исходящих звонков
zabbix_alarm Имя контекста в dialplan, по которому выполняется звонок

Мы создаем файл с нужными параметрами и копируем его в папку /var/spool/asterisk/outgoing. После этого asterisk сразу совершает звонок.

Теперь добавим указанный контекст в dialplan. Редактируем файл /etc/asterisk/extensions.conf

[zabbix_alarm] exten => s,1,Answer exten => s,n,Wait(1) exten => s,n,Background(yourcallisimportant) exten => s,n,hangup

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

В данном примере один скрипт и один контекст с одной фразой. Если вам нужно несколько разных фраз проговаривать на разные события, то создавайте на каждое такое событие отдельный скрипт, в нем отдельный контекст, а уже в контекстах указывайте разные фразы. Я все покажу на одном примере.

Перечитываем диалплан и можно тестировать. После запуска скрипта вручную, астериск должен вам позвонить и проговорить указанную фразу. Если этого нет, то разбирайтесь сразу на месте, дальше в zabbix лезть нет смысла. Сначала надо настроить звонок. Обратите внимание на права файлов.

Не забывайте, что скрипт будет исполняться от пользователя, под которым работает мониторинг. Скорее всего это zabbix. У него должны быть права для записи в папку /var/spool/asterisk/outgoing, иначе он не сможет создать call файл.

Я просто добавил права на запись в эту папку группе zabbix:

# chown root:zabbix /var/spool/asterisk/outgoing && chmod 0775 /var/spool/asterisk/outgoing

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

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

Заббикс рапортовал об успешном выполнении внешнего скрипта, но при этом ничего не происходило.

Нам нужно разрешить выполнение внешних скриптов в zabbix-agent. Заодно включим их логирование. Для этого выставляем в файле конфигурации агента следующие параметры:

EnableRemoteCommands=1 LogRemoteCommands=1

Перезапускаем агента:

# systemctl restart zabbix-agent

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

Звонок на мобильный телефон по событию в zabbix

Настраиваем сам сервер мониторинга zabbix. Я для примера буду использовать следующее событие — будем звонить на мобильный телефон, когда количество ssh пользователей на сервере будет больше, чем 2. Эта метрика есть в стандартном шаблоне для серверов linux. Триггер создам для этого вручную. Открываем необходимый для теста хост и добавляем новый триггер.

В данном случае asterisk это имя сервера. Сервер может быть любым.

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

Дальше идем в раздел Configuration -> Actions и создаем новое действие с Event source в виде Triggers. Выбираем в качестве условия только что добавленный триггер.

Переходим на вкладку Operations и добавляем там новое действие в соответствии с нашей задачей.

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

Проверка работы оповещения на сотовый

Осталось проверить работу всей конструкции. Для этого заходим 3-мя пользователя по ssh на сервер asterisk и ждем звонка. При срабатывании триггера на дашборде будет следующая информация.

В это же время вам придет звонок на мобильник. Если не ответите на звонок, через 90 секунд позвонит еще раз. В логе агента заббикс появится следующая запись:

# cat /var/log/zabbix/zabbix_agentd.log 44152:20170407:175635.453 Executing command '/etc/zabbix/scripts/make-call.sh'

А в логе звонков астериск будет информация о совершенном звонке:

# cat /var/log/asterisk/cdr-csv/Master.csv “”,”101″,”s”,”zabbix_alarm”,””””” “,”SIP/num-mango-00007561″,””,”BackGround”,”yourcallisimportant”,”2017-04-07 14:58:15″,”2017-04-07 14:58:15″,”2017-04-07 14:58:20″,4,4,”ANSWERED”,”DOCUMENTATION”,”1491577085.45519″,””

Если все сделали правильно, у вас будет примерно то же самое. Статью написал по рабочему примеру, который во время написания настроил. Реализовать подобные оповещения можно по-разному, но принцип будет тот же самый — формирование call файла и создание необходимого action. Создавать call файлы и настраивать action можно различными способами.

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

Источник: https://serveradmin.ru/zvonok-opoveshhenie-zabbix-cherez-asterisk-na-mobilnyiy-telefon/

Оповещения Zabbix по телефону через Asterisk

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

Наведу пример варианта оповещений Zabbix используя телефонный вызов через Asterisk.

У Asterisk должен быть загружен модуль, для этого откроем файл конфигурации модулей, например в редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/asterisk/modules.conf

И проверим есть ли cтрока, если нет — добавим:

load => pbx_spool.so

А также подгрузим его в данный момент:

sudo asterisk -rvv module load pbx_spool quit

В моем случае Zabbix и Asterisk находятся на разных серверах.

На сервере с Asterisk я написал русский текст уведомления в текстовый файл high_temperature.txt которое должно воспроизвестись при звонке.

Установил festival, русский мужской голос чтобы конвертировать текст в звуковой файл и rsync чтобы копировать файл звонка на сервер Asterisk:

sudo apt-get install festival festvox-ru rsync

Собственно команда конвертации текста в звуковой файл:

text2wave -eval '(voice_msu_ru_nsh_clunits)' < high_temperature.txt > high_temperature.wav

Далее конвертировал формат файла wav в ulaw, так как у меня используется он:

sox -V high_temperature.wav -r 8000 -c 1 -t ul high_temperature.ulaw

И переместил готовый звуковой файл в директорию со звуковыми файлами Asterisk:

sudo mv high_temperature.ulaw /usr/share/asterisk/sounds/ru_RU/high_temperature.ulaw

Смотрите также мою статью — Как конвертировать звуковые файлы в ulaw, alaw, gsm, g722 и т.д. для Asterisk

На сервере с Zabbix используя текстовый редактор nano я создал файл:

sudo nano /etc/zabbix/zabbix.call

И добавил в него содержимое (где 0670000000 номер телефона на который нужно звонить, а цифра 4 это номер канала Goip4 GSM шлюза с которого будет совершен звонок):

Channel: SIP/goip4/40670000000 Application: Playback Data: high_temperature MaxRetries: 10 RetryTime: 60 WaitTime: 30

На файл я установил права 777 чтобы разрешить доступ всем, пользователь zabbix будет его копировать, а на другом сервере пользователь asterisk прочитает и удалит после звонка:

sudo chmod 777 /etc/zabbix/zabbix.call

Также нужно создать сам файл скрипта, который будет выполнять Zabbix (я создал в директорий со скриптами zabbix/alert.d/asterisk_call.sh):

rsync -avh -e “ssh -p 22” /etc/zabbix/zabbix.call [email protected]:/var/spool/asterisk/outgoing/zabbix.call

Скрипт просто копирует файл zabbix.call на сервер с Asterisk в директорию /var/spool/asterisk/outgoing/, после попадания в которую, Asterisk сразу обрабатывает его и совершает звонок.
По сути скрипту можно передавать номер звонящего и составлять файл zabbix.call, но мне это не нужно было.

Если Asterisk и Zabbix на одном сервере, то строку в скрипте заменим на:

cp /etc/zabbix/zabbix.call /var/spool/asterisk/outgoing/zabbix.call

Или:

rsync -avh /etc/zabbix/zabbix.call /var/spool/asterisk/outgoing/zabbix.call

Чтобы rsync выполнял копирование без запроса пароля, нужно сгенерировать SSH ключ и скопировать его на сервер Astersik, как это делать я описывал в этой статье — Подключение к SSH с использованием ключей

Если доступ к серверу по SSH предоставляется пользователю root, то в целях безопасности можно ограничить доступ по IP средствами SSH:

sudo nano /etc/ssh/sshd_config AllowUsers user1 user2 [email protected] sudo service ssh restart

Если проблемы с правами на сервере с Zabbix, например при копировании call файла, можно в файле конфигурации /etc/zabbix/zabbix_server.conf указать следующий параметр:

Читайте также:  Бесплатный ssl сертификат для postfix

AllowRoot=1

Осталось добавить новый тип оповещения в панели Zabbix («Администрирование» — «Способы оповещений»). Далее создал новую группу узлов и добавил устройство для которого отрабатывает триггер о высокой температуре. Создал отдельного пользователя, указал ему созданный тип оповещения и добавил в созданную группу узлов.

Также добавил действие в «Настройка» — «Действия» указав отправку сообщений через скрипт.

Источник: https://ixnfo.com/opoveshheniya-zabbix-po-telefonu-cherez-asterisk.html

Оповещение о проблемах Zabbix по телефону через Asterisk

Замечательная система мониторинга Zabbix предлагает «из коробки» несколько способов оповещения администратора о возникших проблемах: e-mail, SMS и Jabber.

В этом топике я расскажу вам как подружить Zabbix и офисную АТС на основе Asterisk. Когда произойдет нештатная ситуация вам позвонит робот и проговорит сообщение с описанием проблемы.

Зачем это нужно

Оповещения по e-mail неплохо работают, когда их мало. При большом количестве писем возникает вероятность пропустить критическую ошибку. Поэтому логично настроить на e-mail оповещения по всем уровням проблем, а на SMS — только самые критичные.

Но, к сожалению, не у всех коллег администраторов есть бюджет на покупку GMS-модема и оплату SMS. Отсылка SMS через онлайн сервисы не надежна, т.к. у нас может упасть канал в Интернет. А оповещение через свою АТС будет бесплатным. Вы сможете настроить звонок на внутренний номер в офисе, группу абонентов или на мобильный.

Если АТС подключена к физической телефонной линии, то падение канала в Интернет ей будет не страшно.

Как это работает

В сети я нашел па ру примеров скриптов для решения этой задачи. Однако оба они обладают существенными недостатками: используют PHP (зачем?) и не умеют зачитывать текст сообщения — только стандартное сообщение, что есть какая-то проблема.

Наш скрипт будет работать так:

  1. при возникновении alert Заббикс запускает bash-скрипт;
  2. bash-скрипт готовит call-файл для Asterisk и сообщение об ошибке в текстовом виде;
  3. файлы пересылаются по SCP на сервер Asterisk;
  4. по SSH на Asterisk запускается text2wave, зачитывающий текст в wav-файл;
  5. wav-файл и call-файл копируются в соответствующие папки Asterisk;
  6. Asterisk видит файлы, совершает звонок и проигрывает сообщение.

Весь процесс занимает всего 1-2 секунды.

Скрипт

Заббикс умеет запускать скрипты при возникновении проблем. Скрипты лежат в папке, указанной в переменной AlertScriptsPath серверного конфига Заббикс.
Как и все такие скрипты, наш скрипт должен принимать 3 параметра: адресат, тема сообщения, текст сообщения.

#!/bin/bash
# Asterisk сервер
server=”[email protected]” # Уникальная метка
ts=$(date +%s%N) # Создаем два файла
txtname=/tmp/zabbix-alert.$ts.txt
callname=/tmp/zabbix-alert.$ts.call # Наговариваемый текст. # Приветствие. Запятые для паузы.
echo “Zabbix alert,,,,,,,,,,,,,,,,,” > $txtname
# $2 – subject триггера. Можно поставить $3 – сообщение.
echo “$2” >> $txtname # Call-файл Asterisk
echo “Channel: Local/$1@from-internal” > $callname
echo “Extension: s” >> $callname
echo “MaxRetries: 2” >> $callname
echo “RetryTime: 60” >> $callname
echo “WaitTime: 30” >> $callname
# С какого номера звоним
echo “Callerid: 999” >> $callname
echo “Application: Playback” >> $callname
# Повторяем 3 раза
echo “Data: zabbix-alert.$ts&zabbix-alert.$ts&zabbix-alert.$ts” >> $callname scp $txtname $server:$txtname
scp $callname $server:$callname
rm -f $txtname
rm -f $callname
ssh $server “cat $txtname | /usr/bin/text2wave -F 8000 > /var/lib/asterisk/sounds/zabbix-alert.$ts.wav && mv $callname /var/spool/asterisk/outgoing/ && rm -f $txtname && find /var/lib/asterisk/sounds/ -name 'zabbix-alert*' -type f -mmin +10 -delete”

Настраиваем серверы

Тут все зависит от используемой вами ОС/дистрибутива, поэтому 100% точных рекомендаций дать не могу.
Если вкратце, во-первых, нам нужно на Asterisk установить программу text2wave (пакет Festival), по желанию установить русский голос.
Во-вторых, нужно настроить беспарольную SSH аутентификацию между Zabbix и Asterisk.

Можно воспользоваться этой инструкцией (пп. 1-6). Ключ придется сделать без passphrase. Вы можете настроить аутентификацию как для пользователей, под которыми работают Zabbix и Asterisk, так и завести других, но во втором случае в скрипте надо будет использовать sudo.

Также проследите, чтобы у Asterisk были все права на создаваемый call-файл.

Если нужно, заведите отдельный extension, с которого будет происходить звонок.

После того, как все настроено, можно проверить работу скрипта запустив его из консоли:
./call_sip.sh номер “текст” “”
Если не получается, ковыряем логи Zabbix, ssh и Asterisk. Я большую часть времени потратил как на раз на настройку sudo и ssh.

Настраиваем Zabbix

Самое простое: В Administration — Media types создаем новый тип оповещения.

У нужных пользователей (Administration — Users) в закладке Media указываем их телефон. Это может быть как внутренний номер, так и мобильный — в соответствие с планом набора вашей АТС.

В Actions редактируем или создаем новое действие, указав оповещаемых пользователей. Я рекомендую заголовок сообщения установить в {TRIGGER.STATUS} {TRIGGER.NAME} {HOSTNAME}, чтобы было понятно на какой машине произошла беда.

Итого

Мы получили еще один канал оповещения администраторов в дополнение к e-mail и SMS.

Источник: http://www.pvsm.ru/sip/37069

Подключаем к Asterisk мобильный телефон

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

Для этого нужен небольшой домашний сервер (у многих людей нашей профессии он есть) и установленный Asterisk с подключеным мобильным телефоном.

Об этом и поговорим.

Итак, у нас есть сервер с Ubuntu 14.04, bluetooth dongle, и старый мобильный телефон типа Nokia 6300. Сразу устанавливаем все необходимое:

$ sudo apt-get update && sudo apt-get install asterisk asterisk-mobile bluez-utils bluez-hcidump libbluetooth-dev python-gobject-2 python-dbus

Теперь необходимо соединить телефон с нашим сервером. Посмотрим MAC адрес нашего донгла:

$ sudo hcitool dev
Devices:
hci0 00:15:83:3D:1A:57

Пробуем установить связь. Для этого нам понадобится небольшой скрипт:

$ pushd /tmp
$ wget https://raw.githubusercontent.com/DmitriyLyalyuev/simple-agent/master/simple-agent.py
$ chmod +x /tmp/simple-agent.py
$ hcitool scan
Scanning … 00:11:22:33:44:55 Nokia 6300

Мы нашли MAC адрес нашего телефона. Теперь нужно его подключить.

$ sudo /tmp/simple-agent.py hci0 00:11:22:33:44:55
RequestPinCode (/org/bluez/22380/hci1/dev_00_11_22_33_44_55)
Enter PIN Code: 4567
Release
New device (/org/bluez/22380/hci1/dev_00_11_22_33_44_55)

Если все прошло именно так, как описано выше, то настраиваем Asterisk:

/etc/asterisk/chan_mobile.conf:

[Adapter]
address = 00:15:83:3D:1A:57
id = Dongle

Перегружаем asterisk и ищем наш телефон:

$ sudo service asterisk reload
$ sudo rasterisk
asterisk*CLI> mobile search
Address Name Usable Type Port
00:11:22:33:44:55 Mokia 6300 Yes Phone 13 asterisk*CLI> module unload chan_mobile
asterisk*CLI> exit

Теперь у нас есть вся информация о телефоне и мы можем его вписать в конфигурацию.

/etc/asterisk/chan_mobile.conf:

[Adapter]
address = 00:15:83:3D:1A:57
id = Dongle [Nokia]
address = 00:11:22:33:44:55
port = 13
context = from-phone
adapter = Dongle

Возврщаемся в консоль asterisk'a и загружаем модуль:

$ sudo rasterisk
asterisk*CLI> module load chan_mobile
asterisk*CLI> mobile show devices ID Address Group Adapter Connected State SMS
Nokia 00:11:22:33:44:55 0 Dongle Yes Free Yes
asterisk*CLI> exit

В итоге мы соединили наши устройства и Asterisk готов совершать вызовы через этот телефон.

Осталось настроить пользователей и планы звонков.

/etc/asterisk/sip.conf:

[internal](!)
type=friend
host=dynamic
context=home
dtmfmode=rfc2833
canreinvite=no [200](internal)
secret=Password
callerid='Username'

/etc/asterisk/extensions.conf:

[from-phone]
exten => s,1,Answer
exten => s,n,Dial(SIP/200)
exten => s,n,Hangup() [home]
exten => _.,1,Dial(MOBILE/Nokia/${EXTEN})
exten => _.,n,Hangup()

Перечитываем конфиги и пробуем звонить.

$ sudo service asterisk reload

Исходящие звонки будут идти через телефон. Поступивший звонок на телефон будет переадресован на внутренний номер 200.

Осталось установить любой VoIP клиент на ноутбук или смартфон и звонить через интернет своим родным.

И не забудьте про правильные пароли, а то много ботов пытается подбирать пароль к пользователям asterisk'a. А еще лучше уставновите fail2ban для защиты от перебора пароля.

Источник: https://lyalyuev.info/2014/10/03/podkliuchaem-k-asterisk-mobil-nyi-telefon/

Нотификация/оповещение из Nagios через Asterisk

Эта статья о том как подключить Nagios к Asterisk

Для чего всё это надо? Идея состоит в том, чтобы получать автоматичские уведомления на телефон при срабатывании пробников.

Итак, приступаем.

Создадим темплейт контакта:

…define contact{name contact-by-sip ; The name of this contact templateservice_notification_period 24×7 ; service notifications can be sent anytimehost_notification_period 24×7 ; host notifications can be sent anytimeservice_notification_options c ; criticalhost_notification_options d ; downservice_notification_commands notify-service-by-sip ; send service notifications via siphost_notification_commands notify-host-by-sip ; send host notifications via sipregister 0 ; ITS NOT A REAL CONTACT, JUST A TEMPLATE!}…

И сам контакт:

define contact{contact_name nagios-sipuse contact-by-sipalias Nagios Sipemail Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.address2 SIP/37327@cucm1}

Команда нотификации:

define command{command_name notify-host-by-sipcommand_line $USER1$/notify-by-sip.sh $CONTACTADDRESS2$ “HOST” $NOTIFICATIONTYPE$ $HOSTNAME$ H_$HOSTEVENTID$}define command{command_name notify-service-by-sipcommand_line $USER1$/notify-by-sip.sh $CONTACTADDRESS2$ “SERVICE” $NOTIFICATIONTYPE$ $HOSTALIAS$ S_$SERVICEEVENTID$}

И описание сервиса:

define service{use my_graph-service-template-1minhost_name test.ruservice_description PINGcheck_command check_ping!200.0,20%!500.0,60%contacts nagios-sipmax_check_attempts 5}

Исходящий вызов будем совершать с использованием так называемых “.call” файлов. Это текстовые файлы, которые надо поместить в директорию outgoing на сервере астериска, которая в настройках Asterisk прописана так чтобы совершить исходящий вызов автоматически. Однако настройка asterisk не тема этой статьи.

Пример скрипта, генерирующего файл .call приведен ниже. Также приведен пример экстена (exten) для Asterisk.

#!/bin/bashchannel=$1alarm_hs=$2alarm_type=$3alarm_hostname=$4alarm_id=$5mytmpfile=`mktemp /tmp/nagios_call/nagios_$alarm_id.XXXX`mytmpfile=$mytmpfile.”call”file_name_only=`echo $mytmpfile | sed -e 's/.*///g'`CDR=`echo $channel | sed -e 's/.*///g' | sed -e 's/@.*$//g'`if [ “$alarm_type” = “ACKNOWLEDGEMENT” ]thenecho `date` >> /tmp/nagios_call/logging.txtecho “$alarm_hs, $alarm_type, $alarm_hostname” >> /tmp/nagios_call/logging.txtexit 0fiif [ “$alarm_hs” = “SERVICE” ]thendata_wav=”otkaz_servisa_na_servere”fiif [ “$alarm_hs” = “HOST” ]thendata_wav=”otkaz_servera”fiecho “Channel: $channelCallerID: ALARMMaxRetries: 5RetryTime: 10WaitTime: 23Account: callback_nagiosContext: callback_nagiosExtension: 911Priority: 2Set: file=$data_wav&$alarm_hostnameAlwaysDelete: YesArchive: Yes” > $mytmpfilehost=”ip address”port=”21″user=”nagios”pass=”passsword”file=”$mytmpfile”ufile=”//$file_name_only”echo “put $file $ufile” >> /tmp/nagios_call/test_script.txtecho `date` >> /tmp/nagios_call/logging.txtecho “$alarm_type” >> /tmp/nagios_call/logging.txtecho “verboseopen $hostuser $user $passbinput $file $ufilebye” | ftp -n >>/tmp/nagios_call/logging.txt 2>&1 &

В Asterisk примерно следующее:

[callback_nagios]exten => 911,1,Answerexten => 911,2,Playback(/var/spool/alarm/${file})exten => 911,3,Hangup

Другая статья о настройке системы оповещения Nagios через Asterisk

Обновлено 06.04.2016 21:53

Источник: http://unix-way.ru/index.php/nastrojka-sistem-monitoringa/notifikatsiya-opoveshchenie-iz-nagios-cherez-asterisk

Оповещения Zabbix через Telegram

Вы хотите получать уведомления с Zabbix через Telegram? Нет ничего проще!

Есть для этого готовый бот и Telegram API

Бот присылает все, что было в специальном HTTP GET запросе вида:

http://crierbot.appspot.com/@token@/send?message=@message@

TOKEN — токен выданный ботом при его добавлении в список контактов Telegram

MESSAGE — собственно сообщение, которые хотите передать.

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

Добавление бота

Для начала добавляем себе в Telegram бота @crierbot и нажимаем START

После нажатия на STARTбот пришлет нам уникальный ключ «Token»

Ну вот и все. На этом наше общение с ботом окончено. Теперь только он нам будет писать то, что нам необходимо.

Настройка Zabbix Telegram

Zabbix умеет отправлять оповещения, используя скрипт. Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Создание скрипта

Давайте напишем скрипт, который и будет передавать нам информацию из Zabbix нашему боту, который в свою очередь будет передавать ее нам:

#!/bin/bash PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin wget -O /dev/null “http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3”

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, например. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Freebsd по умолчанию это директория:
/usr/local/zabbix32/zabbix/alertscripts/     —       (Для версии 3.2)

Делаем наш скрипт исполняемым:

chmod +x /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Выдаем zabbix права на этот скрипт:

chown zabbix:zabbix /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Настройка способа оповещения через telegram

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Тут заполняем:

Имя — Произвольное

Тип — Скрипт

Имя скрипта — так, как вы назвали скрипт при его создании

Параметры срипта:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

(Это как раз и есть наши $1, $2 и $3)

Читайте также:  Как бегать правильно? бег с нуля. практические советы.

И ставим галочку «Активировано»

И нажимаем Добавить (у меня обновить, так как он уже создан у меня)

Добавление способа оповещения пользователю

Далее заходим в «Администрирование» -> «Пользователи«. Выбираем нашего пользователя и переходим на вкладку «Оповещения» и нажимаем «Добавить»

В появившемся окне выбираем тип — под каким именем мы создали действие, вставляем наш токен, который выдал нам бот и нажимаем «Добавить»

После этого у пользователя в Оповещениях появится новый способ оповещения. Нажимаем «Обновить«.

Теперь нам осталось только создать действий, по которому нам будет приходить какое-либо сообщение.

Настройка действий

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

Действие:

Имя — Пишем любое понятное для нас имя

Условие — Настраиваем условие, при котором будет происходит наше действие (ниже я приведу пример 1 из своих действий)

Операции:

Выбираем что будет присылаться нам во время срабатывание нашего условия

В операциях нажимаем Новый и добавляем наш способ оповещения:

Должно получиться что то типа вот этого.

На вкдадке Операции восстановления Выбираем в операциях «оповещение о восстановлении», чтобы знать, что проблема ушла.

И нажимаем «Добавить«. В принцип на этом этапе мы уже все настроили!

Заключение

Вот пример одного из моих действий. У меня есть триггер на температуру CPU моего NAS. Его я и использовал:

Вот что мы в принципе видим в окне самого Telegram:

Собственно ничего сложного нет. Это настроить гораздо быстрее чем все это прочитать или тем более все это написать. Если возникнут трудности — пишите в комментарии. Постараюсь помочь.

Источник: https://sysadmin-note.ru/opoveshheniya-zabbix-cherez-telegram/

Zabbix оповещения на jabber

Сейчас будем разбираться с оповещениями zabbix на jabber. В ранних статьях мы уже устанавливали jabber сервер Openfire и будем использовать его на примере.

Для начала, в opebfire необходимо создать пользователя для zabbix сервера с которого будем отправлять сообщения и добавляем его в группу.

С коробки zabbix я не смог отправлять оповещения, поэтому будем использовать скрипт.

создаем файл jabber в /etc/zabbix/alert.d:

nano /etc/zabbix/alert.d/jabber#!/usr/bin/perl use common::sense;
use Net::XMPP; use constant {
SERVER => 'jabber.domain.ru',
PORT => 5222,
USER => 'server',
PASSWORD => 'password',
RESOURCE => 'company',
TLS => 0,
DEBUG => 0,
}; $0 =~ s{.*/}{};
my ($to, $subj, $body, $type) = @ARGV;
$type ||= 'headline'; die DEBUG ); $bot->SetCallBacks(
    onconnect => sub{},
        onauth => sub{
        $bot->PresenceSend;
        $bot->MessageSend( to => $to, subject => $subj, body => $body, type => $type );
        $bot->Disconnect();
        },
            ondisconnect => sub{}
            );
            $bot->Execute(
            hostname => SERVER,
            port => PORT,
            tls => TLS,
            username => USER,
            password => PASSWORD,
            resource => RESOURCE,
            register => 0,
            connectiontype => 'tcpip'
            );

Делаем его запускающимся:

chmod +x /etc/zabbix/alert.d/jabbercd /etc/zabbix/alert.d

Пробуем запустить:

./jabber

Получаем вот такую ошибку, а все из-за того что скрипт использует модули perl common::sense; Net::XMPP;

Can't locate common/sense.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./jabber line 3.
BEGIN failed–compilation aborted at ./jabber line 3.

perl -MCPAN -e 'install +common::sense'perl -MCPAN -e 'install +Net::XMPP'

Пробуем отправить сообщение с помощью скрипта:

./jabber [email protected] test test

сообщения также не доходят (тишина).

Добавлено из комментарий (спасибо Андрею):

Необходимо найти и закомментировать строку в

/usr/local/share/perl/5.14.2/Net/XMPP/Protocol.pm

return $self->AuthSASL (%args);

Кстати, в скрипте можно включить debug для просмотра где у нас ошибка:

DEBUG => 1,

Так же смотрим логи openfire в /var/log/openfire/warn.log

Важный момент:

Если у вас Openfire заведен на поддомене, например jabber.domain.ru, то и отправлять сообщения пользователю нужно с указанием с доменом третьего уровня:

./jabber [email protected] test test

Теперь остается в Вебморде zabbix добавить скрипт:

Администрирование -> Типы средств передачи -> Jabber — где Тип: выбрать Сценарий, Название скрипта — jabber

Источник: https://dyrik.ru/linux/zabbix-opoveshheniya-na-jabber.html

Оповещения Zabbix через sms используя GSM модем. Простая настройка

9 ноября 2015 в 16:21 (МСК) | сохранено9 ноября 2015 в 21:07 (МСК)<\p>Zabbix сервер — это хорошо. Правильно настроенный, он мониторит серваки и необходимые мне узлы. В случае проблем на них он с радостью уведомляет меня по электронной почте.

Не так давно выяснилось, что оба наших любимых провайдера (основной и резервный интернет каналы) решили не обеспечивать ИБП свое сетевое оборудование в здании.

Поэтому когда вырубают электричество (а бывает такое!) Zabbix бы и рад разбудить веселым письмом, а никак! В общем, решил заморочиться уведомлением по sms. Именно через GSM модем чтобы не было зависимости от интернета.

Поискав по интернету варианты отправки sms Zabbix-ом, нашел варианты решения, но они показались мне длинными. Поэтому сделал по своему «на коленке». Постараюсь подробно описать не сложное рабочее решение и «грабли».

Итак, что у меня было:

  1. Zabbix 2.4 на OC Debian 7 — мониторит несколько серваков, к одному из них подключен через USB кабель APC smart ups 3000. Мониторинг состояния UPS настроен по этой статье.
  2. GSM модем Huawei e1550 (Мегафон) который валялся дома со времен отсутствия проводного интернета. Как показала практика — вставив в уже настроенную систему другой модем Huawei все так же работает, не требуя перенастройки!

Для отправки из терминала sms я использовал gnokii.

Поехали:

# apt-get install gnokiiВставляем GSM модем в сервак и проверяем:# lsusbСреди прочего видим что-то типа:Bus 001 Device 009: ID 12d1:14ac Huawei Technologies Co., Ltd.Проверяем определился ли как модем:# ls /dev/ttyUSB*Если пусто (а меня было пусто):# apt-get install usb-modeswitchВытаскиваем и заново вставляем модем. Проверяем определился ли:# ls /dev/ttyUSB*Видим что-то типа:/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2

Осталось чуть-чуть до первой отправки sms!

Создаем конфиг gnokii. Я положил его в /home# nano /home/user/sms.

conf
Текст конфига[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200

Сохраняем и тестируем:# echo “text” | gnokii –config /home/user/sms.

conf –sendsms +7ХХХХХХХХХХ(+7ХХХХХХХХХХ — тут, конечно, номер, на который надо отправить)

Должна прийти sms без проблем. Обо всем этом есть много инструкций на просторах интернета и до этого момента проблем у меня не возникло.

Дальше важно!

Заббикс в системе работает от пользователя zabbix. Разрешаем ему использовать модем.# nano /etc/group
dialout:x:20:zabbixИначе при отправке от этого пользователя получим что-то типа:

GNOKII Version 0.6.30 Gnokii serial_open: open: Permission denied Couldn't open ATBUS device: Permission denied Telephone interface init failed: Command failed. Quitting.

Command failed.

Еще при отправке встречал ошибку:

Cannot open logfile ./gnokii-errors
WARNING: cannot open logfile, logs will be directed to stderr

Это значит не нашлось файла по пути:~/.cache/gnokii/gnokii-errorsИзменяем разрешения для пользователя использовать sudo без пароля:# nano /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: /usr/bin/gnokiiДальше логинимся под пользователем zabbix и пишем очень простой скрипт.

nano /home/user/smsscriptТекст скрипта#!/bin/sh zabbixesmsto=$1 zabbixsubject=$2 echo “$zabbixsubject” | /usr/bin/sudo /usr/bin/gnokii –config /home/user/sms.conf –sendsms “$zabbixesmsto”Сохраняем.

Именно /usr/bin/sudo и /usr/bin/gnokii — для меня это оказалось важно! Не забываем от рута сделать:# chmod +x /home/user/smsscriptПроверяем работу скрипта:/home/user/smsscript +7XXXXXXXXXX test
Если пришла sms — все практически готово! Осталось прикрутить к Zabbix-у. Если не пришла, то проверяем, все ли сделали так как написано выше.

Я создавал скрипт для заббикса в /home/user/ потому что в конфиге zabbix_server.conf написно: AlertScriptsPath=/home/user/ Если у вас не так, то либо меняем расположение скрипта, либо изменяем в конфиге путь на /home/user/ — не забыть рестаратнуть zabbix server! В интерфейсе заббикса идем в Администрирование — Способы оповещений.

Создать способ оповещения.Затем настраиваем оповещение для вашего пользователя в заббиксе. Администрирование — Пользователи.И Настройка — Действия.Действие я сделал отдельное, чтобы sms приходили не по каждому поводу, а только при срабатывании определеных триггеров.

Так как при отпавке в sms пишется только тема, то в само сообщение нет смысла что-то писать. А в условие добавил:Вот и все! Дернул из разетки ИПБ и через несколько минут получил гневное sms от заббикса! Теперь он меня везде достанет, зараза!

P.S.: Так как электричество отключают не часто, то и расходов на sms совсем мало.

Источник: https://sohabr.net/habr/post/270497/

Настройка Zabbix для мониторинга SIP транков в Астериск

Актуальность статьи: 2017год Версия Zabbix 3.2 Версия Астериск: Asterisk 11.20.

0 built by palosanto Версия Linux: CentOS7 (дистрибутив Elastix)

  • Zabbix будет самостоятельно находить транки на сервере Астериск
  • Для каждого найденого транка будет автоматически создан Элемент данных
  • Будет автоматически созданы Триггеры для оповещения

Будем мониторить состояние транка. Триггер сработает, если состояние не Registered Будем мониторить сервер SIP провайдера. Делать ping, замерять потери (icmpping в Zabbix)

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

mkdir /etc/zabbix/scripts

Создаем скрипт asterisk_trunk_discovery.sh

touch /etc/zabbix/scripts/asterisk_trunk_discovery.sh

Содержимое скрипта

#!/bin/bash fun_error1(){ echo “Ошибка! Отсутствуют параметры (trunks или ips или registration_monitoring)” } fun_error2(){ echo “Ошибка! Отсутствуют параметры (название_транка)” } if [ $# -ne 0 ] then case $1 in trunks) /usr/bin/sudo asterisk -rx “sip show registry” | sed -e 1d -e '$d' | awk -v ORS=”” 'BEGIN { print “{“data”:[“} { print “{“{#TRUNKNAME}”:””$3″”},” } END { print “]}” }' | sed 's/,]}$/]}
/' ;; ips) /usr/bin/sudo asterisk -rx “sip show registry” | sed -e 1d -e '$d' | awk ' BEGIN { print “{“data”:[” } !seen[$1]++ { gsub(/:.+/, “”, $1); print “{“{#TRUNKIP}”:””$1″”},” } END { print “]}” }' | tr -d '
' | sed 's/,]}$/]}
/' ;; registration_monitoring) if [ $# -eq 2 ] then /usr/bin/sudo asterisk -rx “sip show registry” |grep -w $2 | awk '{print $5}' else fun_error2 fi ;; *) fun_error1 ;; esac else fun_error1 fi

Ставим права доступа

chown zabbix.zabbix /etc/zabbix/scripts/asterisk_trunk_discovery.sh chmod 500 /etc/zabbix/scripts/asterisk_trunk_discovery.sh

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

echo -ne ”
zabbix ALL = NOPASSWD: /usr/sbin/asterisk
” >> /etc/sudoers

В файл zabbix_agentd.conf добавляем строку

UserParameter=asterisk_trunk_discovery[*],/etc/zabbix/scripts/asterisk_trunk_discovery.sh $1

И перезапускаем zabbiz агент (для CentOS 7 даем такую команду)

systemctl restart zabbix-agent

3. Настройки на Zabbix сервере (в Web интерфейсе Zabbix)

Будем использовать Низкоуровневое Обнаружение. Создадим Шаблон, два Правила обнаружения, Прототипы элементов данных и Прототипы триггеров.

3.1. Создаем шаблон с именем Asterisk Trunks Discovery

3.2. Создаем первое Правило обнаружения

Шаблоны-> Asterisk Trunks Discovery->Правила Обнаружения->Создать правило обнаружения

Имя Правила обнаружения – любое. Ключ: asterisk_trunk_discovery[trunks]

Создаем Прототип элементов данных. Имя любое. Ключ: asterisk_trunk_discovery[registration_monitoring {#TRUNKNAME}]. Тип информации: Текст

Создаем Прототип триггера. Имя: Транк {#TRUNKNAME}. Выражение: {Asterisk Trunks Discovery:asterisk_trunk_discovery[registration_monitoring {#TRUNKNAME}].str(Registered)}1

3.3. Создаем второе Правило обнаружения

Имя Правила обнаружения – любое. Ключ: asterisk_trunk_discovery[ips]

Создаем три Прототипа элемента данных. Имя любое. Тип: Простая проверка. Ключи (по одному на каждый):

  • icmpping[{#TRUNKIP}]
  • icmppingsec[{#TRUNKIP}]
  • icmppingloss[{#TRUNKIP}]

Создаем Прототипы Триггеров к этим Прототипам элементов данных (по своему вкусу)

3.4. Применяем шаблон к узлу сети

3.5. Любуемся результатом 🙂

4. Заключение

В заключение статьи даю поясления к командам из скрипта

Читайте также:  Failed to start lsb: bring up/down networking

/usr/bin/sudo asterisk -rx “sip show registry” | sed -e 1d -e '$d' | awk -v ORS=”” 'BEGIN { print “{“data”:[” } { print “{“{#TRUNKNAME}”:””$3″”},” } END { print “]}” }' | sed 's/,]}$/]}
/'

– asterisk -rx “sip show registry” – показывает зарегистрированные на Астериске транки

– sed -e 1d -e '$d' – удаляет первую и последнюю строку

– awk -v ORS=”” 'BEGIN { print “{“data”:[” } { print “{“{#TRUNKNAME}”:””$3″”},” } END { print “]}” }' – формируем строку в JSON формате

– sed 's/,]}$/]}
/' – удаляем последнюю запятую из строки в JSON формате и добавляем новую строку для удобства чтения. (заменяет в конце строки ,]} на ]}
)

/usr/bin/sudo asterisk -rx “sip show registry” | sed -e 1d -e '$d' | awk ' BEGIN { print “{“data”:[” } !seen[$1]++ { gsub(/:.+/, “”, $1); print “{“{#TRUNKIP}”:””$1″”},” } END { print “]}” }' | tr -d '
' | sed 's/,]}$/]}
/'

– !seen[$1] – удаляет повторяющиеся IP адреса SIP проваедера. Зачем нам по два раза пинговать один и тот же IP?!

– gsub(/:.+/, “”, $1) – отсекает порт от IP адреса (:5060)

/usr/bin/sudo asterisk -rx “sip show registry” |grep -w $2 | awk '{print $5}'

– Получает название транка и выводит 5 колонку. Как раз в ней состояние транка.

5. P.S. Ссылки, которые помогли

Официальная документация Zabbix

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

Мониторинг транков Asterisk с помощью низкоуровнего обнаружения Zabbix

Источник: http://sp-it.ru/articles/asterisk_trunk_discovery/index.html

Мониторинг состояния SIP телефонов Asterisk`a в Zabbix

Мониторинг состояния SIP телефонов Asterisk`a в Zabbix [окт. 2, 2009|05:46 pm]ChronoikProject
Участились случаи, когда телефон по какой-то причине отваливался или зависал, и до абонента нельзя было дозвониться. Если человека нужно срочно найти – это большой косяк:) Потребовалось как-то мониторить состояние и быстро реагировать, а для этого, понадобилось подружить PBX Asterisk и СЦМ Zabbix… Инфы в инете на этут ему мало, но способ был найден.Создаем файл /etc/zabbix/sip_test содержащий:#!/bin/bashsudo /usr/sbin/asterisk -rvvvvvx 'sip show peers' | egrep “Unspecified|UNREACHABLE” | grep -w $1 | wc -lЭтот скрипт возвращает “1”, если у телефона статус Unspecified или UNREACHABLE, и “0” если все хорошо.В файл /etc/sudoers добавляем строку:zabbix ALL = NOPASSWD: /usr/sbin/asteriskЭто разрешит пользователю zabbix, от которого работает мониторинг, запускать консоль asterisk`а.В файл /etc/zabbix/zabbix_agentd.conf добавляем строку:UserParameter=sip.peers[*],/etc/zabbix/sip_test $1Рестартим агент Zabbix/etc/init.d/zabbix-agent restartЛезем в мониторинг: Настройка -> Элементы данныхВ группе и узлах сети выбираем нужный сервер(на котором установлен asterisk или с которого будем мониторить подключения). Жмем – Создать элемент данныхВ описании вводим, к примеру SIP phone 111В поле “Ключ” вводим sip.peers[111]В поле “Новая группа элементов данных” я, для удобства, вписал название группы “SIP Phones“Жмем “Сохранить“Для создания тригера идем в Настройки – > ТригерыВ группе и узлах сети выбираем нужный сервер(на котором установлен asterisk или с которого будем мониторить подключения). Жмем – Создать тригерВ имени указываем “SIP phone 111 UNREACHABLE“.В поле “Выражение”: {Sochi:sip.peers[228].last(0)}=1Срабатывать, если значение элемента данных = 1.Выбираем важность по вкусу и сохраняем.Для уведомления идем в Настройки -> Действия -> Создать действиеВ поле “Имя” пишем: Phone is downСоздаем такое условие:(А) Описание триггера содержит “SIP phone”(B) Описание триггера содержит “UNREACHABLE”(A and B)Если описание тригера содержит “SIP phone” и “UNREACHABLE” – делаем действие:) В действии указываем тип уведомления и все.Косяк такого способа: если нужно мониторить 2000 телефонов, придеться создать 2000 элементов данных и 2000 тригеров + 1 действие:)Есть предложения по оптимизации? 🙂
Comments:
From: fuck_with2009-10-04 02:39 pm (Link)

есть вапрос:имеется чайникимеется видео примерно 1 миннужно както отредактировать (кадрировать, вырезать, яркость увеличить, формат поменять, музло наложить)собственно вопрос: какаю програмку посоветуешь (естесно что существует премьер я в курсе, но лучше чтонить по проще)

а?

From: chronoikproject2009-10-04 08:40 pm (Link)

Из совсем простого Pinnacle Studio

Я использую Sony Vegas(для обработки avchd видео оно самое лучшее ибо родное) + Audacity для звука:)

From: fuck_with2009-10-05 03:36 am (Link)

пасиб

From: indlg02009-10-06 06:51 pm (Link)

Вопрос в тему ) А о заббикесе очень позновательно. Спасибо!
Кстати говоря об оптимизации, подумываю, что бы заббикс самостоятельно получал задание с сервера забирать обновление конфига по команде или расписанию с центрального узла. Как думаешь будет работать?

From: chronoikproject2009-10-15 01:27 pm (Link)

идея интересная

как раз сейчас длинки 3100 к мониторингу прикручиваю и те-же петли нужно выцеплять, почитаю тред:)

From: yurys5552013-02-26 07:11 am (Link)

Заббикс почему-то все время получает занчение элемента данных 0, хотя если вручную запускать скрипт (/usr/local/etc/zabbix/sip_test 4501), то получается 1. Нет никаких мыслей с чем это может быть связано?

Источник: https://chronoikproject.livejournal.com/550785.html

Zabbix и asterisk по snmp

awsswa

Источник знаний – http://habrahabr.ru/sandbox/33568/

yum install net-snmp net-snmp-utils net-snmp-libs net-snmp-devel

Тестирование asterisk что он собран с поддержкой snmp

CLI> module show like snmp

res_snmp.so                    SNMP SubAgent for Asterisk             0

1 modules loade

В /etc/asterisk/res_snmp.conf

[general]

subagent = yes

enabled = yes

в /etc/snmp/snmpd.conf вносим (в конец)

# Asterisk use

createUser asteriskZabbix MD5 asterzabbix DES

rwuser asteriskZabbix priv

# Asterisk configuratio

master agentx

agentXSocket /var/agentx/master

agentXPerms 0660 0550 nobody asteriskЕсли на тестовое подключение нет ответа – значит asterisk запущен не под рутом

помогает добавление в /etc/snmp/snmpd.conf вносим (в конец)

agentuser asterisk

agentgroup asterisk

Проверяем запуск сервиса

chkconfig snmpd on

chkconfig snmptrapd on

service snmpd start

service snmptrapd start

chmod 755 /var/agentx

Шаблоны asterisk-mib.txt digium-mib.txt грузим от сюд

https://wiki.asterisk.org/wiki/display/AST/Asterisk+MIB+Definitionshttps://wiki.asterisk.org/wiki/display/AST/Digium+MIB+Definitions

и сюда /usr/share/snmp/mibs/

Тестирование подключения с паролем по 3 версии SNMP

snmpwalk -v 3 -u asteriskZabbix -n “” -l authPriv -a MD5 -A asterzabbix -X asterzabbix localhost ASTERISK-MIB::astConfigUpTime

ответ

ASTERISK-MIB::astConfigUpTime.0 = Timeticks: (6745740) 18:44:17.40

Тестирование по 2 версии SNMP

snmpwalk -On -v2c -c public localhost ASTERISK-MIB::astConfigUpTime
(Что бы работала вторая версия протокола надо переписывать snmpd.conf добавлая туда коммунити public и давая разрешения для его чтения)
Под катом только изменения относительно стандартного содержания – работает и 2 и 3 версия SNMP

#com2sec notConfigUser  default       public

com2sec local         localhost      public

com2sec mynetwork     192.168.0.0/16 public

group   notConfigGroup v1           notConfigUser

group   notConfigGroup v2c          notConfigUser

group   myrwgroup     v1           local

group   myrwgroup     v2c          local

group   myrwgroup     usm          local

group   myrogroup     v1           mynetwork

group   myrogroup     v2c          mynetwork

group   myrogroup     usm          mynetwork

#view    systemview    included   .1.3.6.1.2.1.1#view    systemview    included   .1.3.6.1.2.1.25.1.1

view    all           included   .1

#access  notConfigGroup “”      any       noauth    exact  systemview none none

access  myrwgroup     “”      any       noauth    exact  all        all  none

access  myrogroup     “”      any       noauth    exact  all        none none

# Asterisk use

createUser asteriskZabbix MD5 asterzabbix DES

rwuser asteriskZabbix priv

# Asterisk configuratio

master agentx

agentXSocket /var/agentx/master

agentXPerms 0660 0550 nobody asterisk

agentuser asterisk

agentgroup asterisk

У вас появляется ругательства вида (1.3.6.1.4.1.22736.1.5.4.1.2)Проверяем наличиеsnmptranslate 1.3.6.1.4.1.22736.1.5.4.1.2Достаточно в zabbix теперь загрузить шаблон и подключить к нужному серверуШаблон брать от сюда и менять все PASSWORD на asterzabbix (наш пароль)

http://www.mzintegration.com/downloads/Template_Asterisk.xml

В zabbix он грузиться в Configuration – Tempaltes – ImportТеперь в настройках Host у zabbix надо к стандартному Agent interfaces включить SNMP interfacesУстановка zabbix

http://www.zabbix.com/wiki/howto/monitor/os/linux/agentinstallonlinux

Порты открывать 161 и 162 по udp, и 10050 и 10051 по tcp (пример показан для vpn (tun0))iptables -A INPUT -i tun0 -p udp -m udp –dport 161:162 -j ACCEPTiptables -A INPUT -i tun0 -p tcp -m tcp –dport 10050:10051 -j ACCEPTПо просьбам трудящихся фото.

Параметры мониторинга зависят от шаблона загруженного в zabbix, шаблон легко редактируется, если вам хочется что-то добавить – смотрите asterisk-mib.txt – читаете описание к параметру и редактируете шаблон.На первом фото – канал завис и провисел всю ночь.

Показывается параметры из шаблонаНастройка клиентаСуществует еще один способ мониторинга через запуск прописанных в zabbix_agentd.conf правил в видеUserParameter=sip.

peersonline,sudo /usr/sbin/asterisk -rx 'sip show peers'|grep –text -i 'sip peers'|awk '{print $5}'Волшебная строка, показывающея падение регистрации (при любых вариантах кроме строки Registered будет показана цифра отличная от нуля)UserParameter=sip.

unreachable,sudo /usr/sbin/asterisk -rx 'sip show registry' | grep -v 'Host' | grep -v 'SIP registration' | grep -v 'Registered' | wc -lЕще интересные строкиПинг до определенного ip адреса, на выходе 1 или 0 в зависимости от пингуется или нетUserParameter=ping.lost,sudo /bin/ping -c1 -W3 192.168.134.133 | grep -o '[0-9]* received' | tr -cd '[0-9]' | awk '{print $1}'

Проверка определенного sip пира на регистрацию, на выходе 1 или 0 в зависимости от статуса “ОК”

UserParameter=sip.reglost,sudo /usr/sbin/asterisk -rx 'sip show peer 422' | grep –text -i 'Status' | grep –text -i 'OK' | wc -l

Для работоспособности сего решения необходимо:yum install sudoНаличие пользователя с именем zabbix в системеИ в /etc/sudoers надо добавить строку вида

zabbix ALL = NOPASSWD: /usr/sbin/asterisk

Проверка:

su zabbixsudo /usr/sbin/asterisk -rx 'sip show registry'или вот так

sudo -u zabbix /usr/sbin/asterisk -rx 'sip show registry'

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

Напрягся и переписал шаблон Template_Asterisk, за место Zap стало показывать DAHDI каналы

Шаблон кроме имени DAHDI Channels, от Zap отличается строчкамиastChanTypeChannels.DAHDI.1.3.6.1.4.1.22736.1.5.4.1.7[“index”, 1.3.6.1.4.1.22736.1.5.4.1.2, “DAHDI”]ну и не забудьте в этом же Tempate поменять графический вывод, выкинуть Zap и добавить DAHDIКак найти нужный параметр мониториться ли канал? Делаете звонок и потом в консоле делаете вот это

snmpwalk -v 3 -u asteriskZabbix -n “” -l authPriv -a MD5 -A asterzabbix -X asterzabbix localhost ASTERISK-MIB::astChanTypeChannels

ASTERISK-MIB::astChanTypeChannels.1 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.2 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.3 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.4 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.5 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.6 = Gauge32: 1  < это SIP

ASTERISK-MIB::astChanTypeChannels.7 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.8 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.9 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.10 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.11 = Gauge32: 0 < это DAHDI

ASTERISK-MIB::astChanTypeChannels.12 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.13 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.14 = Gauge32: 0

ASTERISK-MIB::astChanTypeChannels.15 = Gauge32: 0=====================================================================================Дополнения:Как мониторить с помощью zabbix 2.2 mysql сервера через Template App MySQL

Хорошая документация была вся в иероглифах ( http://qiita.com/iwaim@github/items/8443acf4a4917e5b21fb )

Фокус с этой документацие не прокатил ( http://blog.themilkyway.org/2013/11/how-to-monitor-mysql-using-the-new-zabbix-template-app-mysql/ )1.Создаете еще одного пользователя для мониторингаmysql> GRANT PROCESS ON *.* TO 'zabagent'@'127.0.0.1' IDENTIFIED BY '123pass';

mysql> flush privileges;

2.Создаете папку /var/lib/zabbix и помещаете туда файл .my.cnf с содержанием

mkdir /var/lib/zabbix

touch .my.cnf

chmod 400 /var/lib/zabbix/.my.cnf

chown -R zabbix:zabbix /var/lib/zabbix
cat .my.cnf

[client]

user = zabagent

password = 123pass

host =127.0.0.1

3.Перезапускает агента
service zabbix-agent restart

Источник: https://awsswa.livejournal.com/9764.html

Ссылка на основную публикацию