Мониторинг IP Телефонов в zabbix

Веб Проверки, Веб-сценарии,
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Мониторинг IP Телефонов в zabbix

Сообщение Артём Мамзиков »

Мониторинг IP Телефонов в zabbix




Смотреть с IP Телефоны 3:49 - 13:51

Телефоны марки Escene ES205
Обзор компактного IP телефона Escene ES205
Escene ES205
Escene ES205
Escene ES205
Escene ES205
Авторизация на данном телефоне basic authentication
basic authentication
basic authentication
Веб интерфейс Escene ES205
Веб интерфейс Escene ES205
Веб интерфейс Escene ES205


В виде шаблона Шаблон Веб проверок IP телефонов zabbix

Проверяем данные ip телефоны на доступность проверка Web-интерфейса код состояния 200, а так же то что он в статусе зарегистрирован ищем строку Registered1
Если хотя бы одна проверка недоступна определенное время отправляем команду на перезапуск телефона.

Оф. Веб-мониторинг

Создаем Узел телефона в заббиксе
Переходим на вкладку Веб-сценарии > Жмем Создать веб сценарий
Веб сценарий
Веб сценарий
Указываем
Имя
Интервал обновления
Попыток
Агент
Активировано


Переходим на вкладку
Шаги Жмем Добавить
Шаги веб сценария
Шаги веб сценария
Указываем
Имя Dostupnost Telephone Имя телефона
URL http://Логин:Пароль@IP:Порт/SysStatus.asp
Следовать перенаправлениям V
Время ожидания 40s
Требуемая строка Registered1
Требуемые коды состояния 200

И жмем добавить
Вкладку Аунтификацию в данном случае настраивать не нужно так как мы авторизуемся автоматом по ссылке http://Логин:Пароль@IP:Порт/SysStatus.asp

Жмем добавить сценарий

Идем создавать Триггер
Указываем
Имя NoTel.Имя телефона
Важность Средняя
Выражение Выбираем нашу веб-проверку
{Dostupnost Telephone Имя телефона:web.test.fail[Dostupnost Telephone Имя телефона].min(5m)}>0
Если идет 0 все Хорошо, если летит 1 больше 5 минут, а мы запрашиваем раз в 1 минуту 5 раз выходит и все 5 у нас 1 то это ошибка.
URL http://Логин:Пароль@IP:Порт -будет использоваться макрос {TRIGGER.URL} для автоматического перезапуска!
Описание Телефон недоступен Чей телефон более подробно
Активировано

При необходимости задаем зависимости от других узлов

Добавить
Триггер NoTel.
Триггер NoTel.
Все Мониторинг телефона настроен!)

Далее делаем полный клон узла и редактируем его под другой телефон проще чем с 0 создавать.
Сделать шаблон не выйдет так как у каждого телефона свой IP ну это еще ладно можно взять макросом но еще у каждого свой порт для веб-интерфейса его надо вручную прописывать. так же не удобство редактировать например время проверки или имя триггера приходилось вручную проходя все узлы.
Если у вас чётко по IP или DNS можно пробовать шаблон сделать.
Можно попробовать сделать веб обнаружение и применять действия.

Ставим браузер командной строки apt-get install links

Переходим к Действиям
Оф. Действия
Настройка > Действия > Триггеры > Создать действия

Имя Телефон перезагрузка bash
Новое условие Имя триггера содержит NoTel (Все триггера по телефонам у нас начинаются с NoTel)
Активировано V

Вкладка Операции
Длительность шага операции по умолчанию 10m
Тема по умолчанию Проблема: {TRIGGER.NAME}
Сообщение по умолчанию
Проблема началась с {EVENT.DATE} в {EVENT.TIME}
Имя проблемы: {TRIGGER.NAME}
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Выражение: {TRIGGER.EXPRESSION}
Хост IP (DNS): {HOST.NAME} {HOST.CONN} {IPADDRESS}
Серьезность: {TRIGGER.SEVERITY}
Состояние: {TRIGGER.STATE}
{TRIGGER.URL}

Приостановить операции для подавленных проблем V

Операции Шаги Детали
Жмем Новый
Детали операции Шаги 2 - 2 (0 - бесконечно) 2 значит мы будем использовать ожидание Длительность шага 10м
Длительность шага 0 (0 - использовать умолчание действия)
Тип операции Удаленная команда
Список целей Цель Новый выбираем Узел сети: Zabbix server
Тип SSH
Метод аутентификации Пароль
Имя пользователя задаем ваш логин
Пароль задаем ваш пароль
Порт 22
Команды links {TRIGGER.URL}/RebootHandle.asp
Добавить

Я разделил на 2 операции
Создаем 2 операцию
Жмем Новый
Детали операции Шаги 2 - 2 (0 - бесконечно) 2 значит мы будем использовать ожидание Длительность шага 10м
Длительность шага 0 (0 - использовать умолчание действия)
Тип операции Удаленная команда
Список целей Цель Новый выбираем Узел сети: Zabbix server
Тип Пользовательский скрипт
Выполнять на Zabbix агент
Команды
sleep 5
killall -9 links
exit
Добавить
Добавить

Можно проверять как работает данное правило при срабатывании триггера
Действия заббикс NoTel
Действия заббикс NoTel
Действия заббикс команды NoTel
Действия заббикс команды NoTel

Так же было создано действие Ожидание отправки Ошибки телефонов
Условие Тип вычисления И/ИЛИ A and B
A Группа узлов сети равно Telephone/Телефон
B Важность триггеров равно Средняя
Активировано V

Операции
Длительность шага операции по умолчанию 30m
Тема по умолчанию Проблема: {TRIGGER.NAME}
Сообщение по умолчанию
Проблема началась с {EVENT.DATE} в {EVENT.TIME}
Имя проблемы: {TRIGGER.NAME}
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Выражение: {TRIGGER.EXPRESSION}
Хост IP (DNS): {HOST.NAME} {HOST.CONN} {IPADDRESS}
Серьезность: {TRIGGER.SEVERITY}
Состояние: {TRIGGER.STATE}
Оригинальный номер ID: {EVENT.ID}
{TRIGGER.URL}

Приостановить операции для подавленных проблем V

Операции Отправить сообщение пользователям: Выбираем кому


Операции восстановления

Тема по умолчанию Решенный: {TRIGGER.NAME}

Сообщение по умолчанию
Проблема была решена на {EVENT.RECOVERY.DATE} в {EVENT.RECOVERY.TIME}
Имя триггера: {TRIGGER.NAME}
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Выражение: {TRIGGER.EXPRESSION}
Хост IP (DNS): {HOST.NAME} {HOST.CONN} {IPADDRESS}
Серьезность: {TRIGGER.SEVERITY}
Состояние: {TRIGGER.STATE}

Операции Отправить сообщение пользователям: Выбираем кому

Операции Обновления

Тема по умолчанию Подтвержденный: {TRIGGER.NAME}
Сообщение по умолчанию
{USER.FULLNAME} признанная проблема {ACK.DATE} {ACK.TIME} со следующим сообщением:
{ACK.MESSAGE}
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Хост IP (DNS): {HOST.NAME} {HOST.CONN} {IPADDRESS}

Текущее состояние проблемы {EVENT.STATUS}

Операции Отправить сообщение пользователям: Выбираем кому

В почте создано отдельное правило приема писем связанных с телефонами в отдельную входящую папку Телефоны
Так же отправка данных писем указанна с 8.00 - 17.00 ч Пн-Пт так как некоторые телефоны выключали при уходе домой
Настраивается это Администрирование > Пользователи
Открываем пользователя переходим на вкладку Оповещения
Тип Почта
Отправлять на адрес почты
Когда активен 1-5,8:00-17:00
Использовать, если важность Средняя (все триггеры на телефонах средней важности)
Активировано V
Оповещение Пользователи NoTel
Оповещение Пользователи NoTel
Для всего остального
Тип Почта
Отправлять на адрес почты
Когда активен1-7,00:00-24:00
Использовать, если важность Неклассифицируема Высокая Черезвычайная Аварийная
Активировано V

Так же настроено тут же SMSUSB

Нужно понимать что на почту не придут сообщение в нерабочее время средней важности если есть другие триггеры в этом статусе. так мы отделили сообщения о телефонах в нерабочее время.
Скрипты различные попытки для перезагрузки
Показать
apt-get install links
chmod 777 /usr/bin/links
chmod 777 /usr/share/lintian/overrides/links
# chmod 777 /usr/bin/xlinks2
# chmod 777 /usr/share/lintian/overrides/links2

#!/bin/sh
links "$1"
./urlopener "{TRIGGER.URL}/RebootHandle.asp"

#!/bin/sh
links http://Логин:Пароль@IP:Порт/RebootHandle.asp &
sleep 3
killall -9 links
exit

#!/bin/bash
firefox http://Логин:Пароль@IP:Порт/SysStatus.asp &
declare -i PID=$!
kill ${PID}

#!/usr/bin/python
import webbrowser
import time
p =webbrowser.get('links').open("http://Логин:Пароль@IP:Порт/RebootHandle.asp")
time.sleep(3)
killall -9 ('links')


#!/usr/bin/python3.4
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options

opts = Options()
opts.set_headless()
assert opts.headless # без графического интерфейса.

browser = Firefox(options=opts)
browser.get('http://Логин:Пароль@IP:Порт/RebootHandle.asp')

browser.close()


#!/usr/bin/python3.4
import psutil
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options

opts = Options()
opts.set_headless()
assert opts.headless # без графического интерфейса.

browser = Firefox(options=opts)
browser.get('http://Логин:Пароль@IP:Порт/RebootHandle.asp')

#browser.close()

PROCNAME = "firefox-esr"

for proc in psutil.process_iter():
if proc.name() == PROCNAME:
proc.kill()


Пользовательский скрипт
'links {TRIGGER.URL}/RebootHandle.asp'
sh -c $(links http://Логин:Пароль@IP:Порт/RebootHandle.asp)
sh -c 'links "http://Логин:Пароль@IP:Порт/RebootHandle.asp'"

экранировали строку sh
Насколько я понял крон по умолчанию запускает команды так /bin/sh -c ' команда ' И кавычки здесь обязательно. Лучше одинарные, чтоб экранировали строку полностью от всех спецсимволов.
Можно вместо `........` использовать $(..........), тогда будет работать

killall -9 firefox-esr

apt-get install curl libcurl3 libcurl3-dev php-curl php-mcrypt
/etc/init.d/apache2 restart или так service apache2 restart
количество слов: 509

Вернуться в «Веб Проверки»