Остался наверное последний шаг — и это эта заметка прежде чем я покажу, каким образом я настраиваю получение уведомления звонком при событиях с узлами. Т.е. реализуется вот такая вот схема:
Значение — Триггер на значение — Уведомление как на внутренний/внешний номер.
Такую задачу я хочу к уже существующим средствам:
- Настройка оповещения через Email в Zabbix Server 4.4
- Настройка Telegram для уведомления в Zabbix Server 4.4
Но все будет. Сегодня же настройка, как связать SIP
-клиент linphonec + Zabbix Server 4.4.
Что потребуется:
- Какой консольный SIP-клиент можно использовать
- Разбор установки Zabbix 4.4 на Ubuntu 18.04 Server
- Как установить Asterisk 16 Current Version on Ubuntu 18.04
Итого:
srv-zabbix (172.33.33.117)
srv-asterisk (172.33.33.2)
Начну свою пошаговую инструкцию:
Шаг №1: На сервер с ролью Zabbix 4.4
устанавливаю утилиту expect
и беру из заметки скрипт №2:
ekzorchik@srv-asterisk:~$ sudo rm /tmp/a.log ekzorchik@srv-zabbix:~$ sudo apt-get install expect -y ekzorchik@srv-zabbix:~$ sudo nano /usr/lib/zabbix/externalscripts/call #!/bin/bash kill -9 `pidof linphonec` export PATH=$PATH:`pwd` /usr/bin/expect - <<EOD set timeout 10 spawn linphonec sleep 2 expect "linphonec>*" sleep 2 send "register sip:2005@172.33.33.2 172.33.33.2 pbx2005\r" expect "linphonec>*" send "call 2006\r" sleep 2 send "quit\n" sleep 4 EOD
Шаг №2: Изменяем атрибуты для скрипта с именем call:
ekzorchik@srv-zabbix:~$ sudo chmod +x /usr/lib/zabbix/externalscripts/call
Шаг №3: Проверяю, что от имени учетной записи zabbix
данный скрипт с именем call
отработает, т.е. зарегистрируется sip
аккаунт, инициализируется вызов номера, а номер в свою очередь запустит действие:
ekzorchik@srv-zabbix:~$ sudo su zabbix /usr/lib/zabbix/externalscripts/call This account is currently not available.
ekzorchik@srv-zabbix:~$ sudo nano /etc/passwd
было:
zabbix:x:108:116::/var/lib/zabbix/:/usr/sbin/nologin
стало:
zabbix:x:108:116::/var/lib/zabbix/:/bin/bash
ekzorchik@srv-zabbix:~$ sudo chown -R zabbix:zabbix /var/lib/zabbix/ ekzorchik@srv-zabbix:~$ sudo su zabbix /usr/lib/zabbix/externalscripts/call ekzorchik@srv-asterisk:~$ sudo asterisk -rvvvv Connected to Asterisk 16.6.2 currently running on srv-asterisk (pid = 809) Running as user 'asterisk' Running under group 'asterisk' Connected to Asterisk 16.6.2 currently running on srv-asterisk (pid = 809) -- Registered SIP '2005' at 172.33.33.117:5060 [Dec 3 10:42:19] NOTICE[869]: chan_sip.c:24889 handle_response_peerpoke: Peer '2005' is now Reachable. (9ms / 2000ms) == Using SIP RTP CoS mark 5 > 0x7fa9500370f0 -- Strict RTP learning after remote address set to: 172.33.33.117:7078 -- Executing [2006@phones:1] Wait("SIP/2005-00000008", "1") in new stack -- Unregistered SIP '2005' -- Registered SIP '2005' at 172.33.33.117:5060 -- Executing [2006@phones:2] NoOp("SIP/2005-00000008", "{DATETIME}}") in new stack (тут я понял, что нужно в extensions.conf перед переменной с фигурными скобками также поставить символ доллара.) -- Executing [2006@phones:3] System("SIP/2005-00000008", "echo "1" > /tmp/a.log") in new stack -- Executing [2006@phones:4] Hangup("SIP/2005-00000008", "") in new stack == Spawn extension (phones, 2006, 4) exited non-zero on 'SIP/2005-00000008' -- Unregistered SIP '2005' srv-asterisk*CLI> srv-asterisk*CLI> !bash root@srv-asterisk:~# ls -l /tmp/ | grep a.log -rw-r--r-- 1 asterisk asterisk 2 Dec 3 10:42 a.log root@srv-asterisk:~# root@srv-asterisk:~# exit exit srv-asterisk*CLI> quit Asterisk cleanly ending (0). Executing last minute cleanups ekzorchik@srv-asterisk:~$
Скрипт успешно отработал.
Шаг №4: Но не правильно разрешать доступ к консоли учетной записи zabbix
, а потому сделаем через Zabbix agent:
ekzorchik@srv-zabbix:~$ sudo nano /etc/passwd
было:
zabbix:x:108:116::/var/lib/zabbix/:/bin/bash
стало:
zabbix:x:108:116::/var/lib/zabbix/:/usr/sbin/nologin
ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_agentd.d/asterisk.conf UserParameter=call[*],/usr/lib/zabbix/externalscripts/call ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-agent.service ekzorchik@srv-zabbix:~$ sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t call call zabbix_agentd [18202]: Warning: Failed to execute command "/usr/lib/zabbix/externalscripts/call": Timeout while executing a shell script. [m|ZBX_NOTSUPPORTED] [Timeout while executing a shell script.] ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_agentd.conf #max 30 Timeout=5
не помогло.
Проанализировал скрипт выполняется более 10
секунд:
ekzorchik@srv-zabbix:~$ time /usr/lib/zabbix/externalscripts/call real 0m10.021s user 0m0.002s sys 0m0.010s ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_agentd.conf Timeout=15 ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-agent.service
На заметку: Кстати анализ времени выполнения скрипта это очень важный нюанс и я поначалу застопорился почему скрипт не отрабатывал из под учетной записи zabbix, а потом вдумчивое чтение логов, документации натолкнуло мне правильное решение. Впредь буду тестировать свои скрипты на максимальное быстродействие.
ekzorchik@srv-zabbix:~$ sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t call
и скрипт успешно отработал
ekzorchik@srv-asterisk:~$ sudo asterisk -rvvvv Asterisk 16.6.2, Copyright (C) 1999 - 2018, Digium, Inc. and others. Running as user 'asterisk' Running under group 'asterisk' Connected to Asterisk 16.6.2 currently running on srv-asterisk (pid = 809) -- Registered SIP '2005' at 172.33.33.117:5060 == Using SIP RTP CoS mark 5 > 0x7fa9500370f0 -- Strict RTP learning after remote address set to: 172.33.33.117:7078 -- Executing [2006@phones:1] Wait("SIP/2005-00000012", "1") in new stack -- Unregistered SIP '2005' -- Registered SIP '2005' at 172.33.33.117:5060 -- Executing [2006@phones:2] NoOp("SIP/2005-00000012", "{DATETIME}}") in new stack -- Executing [2006@phones:3] System("SIP/2005-00000012", "echo "1" > /tmp/a.log") in new stack -- Executing [2006@phones:4] Hangup("SIP/2005-00000012", "") in new stack == Spawn extension (phones, 2006, 4) exited non-zero on 'SIP/2005-00000012' -- Unregistered SIP '2005' srv-asterisk*CLI>
Шаг №5: Задача: Хочу чтобы когда срабатывает триггер запускалось определенное действие:
Шаг №6: Создаю глобальный скрипт запуска SIP
—клиента, точнее скрипта в котором запускается SIP
—клиент.
http://IP&DNS/zabbix - user&pass - Администрирование - Скрипты - Создать скрипт
Имя: Call
Тип: Скрипт
Выполнять на: Zabbix сервер
Команды: /usr/lib/zabbix/externalscripts/call
Описание: Звонок на 2006@172.33.33.2 - echo "1" > /tmp/a.log
Группа пользователей: Все
Группа узлов сети: Все
Требуемые права доступа к узлам сети: Чтение
и нажимаю «Добавить
«.
Шаг №7: Создаю «Действие
» посредством которого, если сработал указанный триггер выполнится скрипт «Шаг №1«:
http://IP&DNS/zabbix - user&pass - Настройка - Действия - Создать действие -
вкладка «Действие
»
Имя: Report Asterisk
Условия: Триггер равно raspberry:"Температура с Датчика 1 более 25"
вкладка «Операции
»
(операции) Новый
—
Тип операции: Удаленная команда
Списк целей: Узел сети: raspberry
Тип: Глобальный скрипт
Имя скрипта: Call
Шаг №8: Проверяю, зажимаю пальцами датчик DHT 11
и через некоторое время температура повышается:
pi@raspberrypi:~ $ sudo /usr/lib/zabbix/externalscripts/dht.py 11 4 Temp=22.0* Humidity=50.0% pi@raspberrypi:~ $ sudo /usr/lib/zabbix/externalscripts/dht.py 11 4 Temp=23.0* Humidity=87.0% pi@raspberrypi:~ $ sudo /usr/lib/zabbix/externalscripts/dht.py 11 4 Temp=25.0* Humidity=88.0% pi@raspberrypi:~ $ sudo /usr/lib/zabbix/externalscripts/dht.py 11 4 Temp=26.0* Humidity=90.0% pi@raspberrypi:~ $ sudo /usr/lib/zabbix/externalscripts/dht.py 11 4 Temp=27.0* Humidity=89.0%
и срабатывает «Действие
»
ekzorchik@srv-asterisk:~$ sudo asterisk -rvvvv Asterisk 16.6.2, Copyright (C) 1999 - 2018, Digium, Inc. and others. Running as user 'asterisk' Running under group 'asterisk' Connected to Asterisk 16.6.2 currently running on srv-asterisk (pid = 809) == Using SIP RTP CoS mark 5 > 0x7fa9500370f0 -- Strict RTP learning after remote address set to: 172.33.33.117:7078 -- Executing [2006@phones:1] Wait("SIP/2005-00000015", "1") in new stack -- Registered SIP '2005' at 172.33.33.117:5060 [Dec 3 12:20:21] NOTICE[869]: chan_sip.c:24889 handle_response_peerpoke: Peer '2005' is now Reachable. (10ms / 2000ms) -- Executing [2006@phones:2] NoOp("SIP/2005-00000015", "{DATETIME}}") in new stack -- Executing [2006@phones:3] System("SIP/2005-00000015", "echo "1" > /tmp/a.log") in new stack -- Executing [2006@phones:4] Hangup("SIP/2005-00000015", "") in new stack == Spawn extension (phones, 2006, 4) exited non-zero on 'SIP/2005-00000015' -- Unregistered SIP '2005' srv-asterisk*CLI>
Итого действиями выше я проработал практическое сопряжение sip
-клиента который устанавливаю на сам Zabbix Server 4.4 on Ubuntu 18.04
и выполняемое действие на триггер. В последующей заметке уже будет инициализация звонка с предопределенным голосовым сообщением, а может и IVR
меню. Пока заметку считаю выполненной и прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.