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

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

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

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

Изначально Веб сценарии были настроены в каждом Узле телефон, так как у некоторых отличался порт, пароль.
Об этом я уже писал тут Мониторинг IP Телефонов в zabbix
Пример Шаблон Веб проверок Сайта АИС 5 Шагов этапов zabbix

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

Изначально я думал шаблон тут не подойдет ведь нужно указать все одинаковое, а как такое возможно если где то входя прямой по IP через 80 порт , а где то через проброс IP прокси и порт которые разные!

Но все же удалось создать шаблон с помощью Макросов.
На и более одинаковые данные заносим в шаблон по умолчанию, в дальнейшем где данные будут отличатся указываем макросы в узле и прописываем там правильные данные ( в моем случае это пароль и порт) IP брался с Узла там задаем реальный или прокси как по умолчанию а ниже реальный.

СКАЧАТЬ
Проверка Телефонов.zip
Проверка Телефонов.zip
(1.5 КБ) 71 скачивание
31.03.2023 Проверка телефонов.zip
31.03.2023 Проверка телефонов.zip
(9.2 КБ) 13 скачиваний
09.04.2023 Проверка Телефонов.zip
09.04.2023 Проверка Телефонов.zip
(13.32 КБ) 25 скачиваний
Какие использовались Макросы:
{$TELLOGIN} - Логин
{$TELPASS} - Пароль
{$TELPORT} - Порт
{HOST.CONN} - IP или DNS Узла по умолчанию
Изменения
Показать
09.04.2023
1. Некоторые телефоны Escene ES205 не выполняли перезагрузку, хотя прошивка была один в один.
Как оказалось нужно было выполнять повторную авторизацию и следовать перенаправлением
изменение строки перезагрузки
echo -e $(curl -s -S -k -L --max-time 8 -u "${loginpass}" "${URLP}"/goform/Reboot) >/dev/null|exit &

2. Добавлено Время работы Телефона
shell.sh["curl -s -S -k -L http://{$TELLOGIN}:{$TELPASS}@{HOST.CONN}:{$TELPORT}/SysStatus.asp"]
Предобработка регулярное выражение
<span id="System Run Time"><\/span> <\/td>([^.*]+)<span id="Day" \1
.*?([0-9]+).* \1

shell.sh["curl -s -S -k -L http://{HOST.CONN}:{$TELPORT}/goform/SavewebLogin?username={$TELLOGIN}&password={$TELPASS}&Login=Login"]
Предобработка регулярное выражение
([0-9]+).*Day.*([0-9]+).*Hour.*([0-9]+).*Minute.*([0-9]+).*Second \1


31.03.2023
Добавлен Элемент данных перезагрузки телефона ночью
Перезагрузка телефона external-nowait.sh[kill-links-telephone.sh,"http://{$TELLOGIN}:{$TELPASS}@{HOST.CONN}:{$TELPORT}"] 0 0d Внешняя проверка
Проверка телефонов Элемент данных Перезагрузка телефона
Проверка телефонов Элемент данных Перезагрузка телефона
Скрипт external-nowait.sh

Код: Выделить всё

#!/bin/bash

# Скрипт переадресации, для внешней проверки когда время выполнения больше 30 секунд.(Timeout while executing a shell script. попадает в статус: Не поддерживается)
# Запустим другой скрипт с аргументами и не дожидаясь его завершения отправим статус что текущий скрипт выполнен.

# Получим текущий путь откуда запущен скрипт
#currentpath=$(readlink -f $0)
#currentpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
currentpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
#currentpath=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)

#bash "${currentpath}/${1}" "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" "${8}" "${9}" "${10}" "${11}" "${12}" "${13}" "${14}" "${15}" >/dev/null & echo "Запущен скрипт: $1"
# Через заббикс агент (на самом заббикс сервере) не дожидаясь выполнения
zabbix_get -s 127.0.0.1 -p 10050 -k system.run["'${currentpath}/${1}' '${2}' '${3}' '${4}' '${5}' '${6}' '${7}' '${8}' '${9}' '${10}' '${11}' '${12}' '${13}' '${14}' '${15}'",nowait] >/dev/null & echo "Запущен скрипт: $1"
#script /dev/null
#screen -d -m -A -S "${currentpath}/${1}" "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" "${8}" "${9}" "${10}" "${11}" "${12}" "${13}" "${14}" "${15}" >/dev/null & echo "Запущен скрипт: $1"
# Тест переменных в файл
#echo "bash "${currentpath}/${1}" \"${2}\" \"${3}\" \"${4}\" \"${5}\" \"${6}\" \"${7}\" \"${8}\" \"${9}\" \"${10}\" \"${11}\" \"${12}\" \"${13}\" \"${14}\" \"${15}\"" >> /tmp/nowait.txt
Перезагрузка телефонов через скрипт и крон
Пример
reboot-telephone.sh

Код: Выделить всё

#!/bin/bash

# Цикл перебора и перезагрузки телефонов
function telr (){
IFS=';'
for iptel in $iptelephone
do
/usr/local/share/zabbix/externalscripts/kill-links-telephone.sh "http://"${login}":"${password}"@"${iptel}":"${port}""
echo  "http://"${login}":"${password}"@"${iptel}":"${port}""
sleep 4
done
}

function telrport (){
IFS=';'
for iptel in $iptelport
do
#/usr/local/share/zabbix/externalscripts/kill-links-telephone.sh "http://"${login}":"${password}"@"${iptel}""
echo  "http://"${login}":"${password}"@"${iptel}""
sleep 4
done
}


# Список IP телефонов на перезагрузку ES205
login="root"
password="Пароль4321"
iptelephone="192.168.80.59;192.168.80.69;192.168.80.96;192.168.80.36;192.168.80.39;192.168.80.45"
port="80"
telr

login="root"
password="Пароль1234"
iptelephone="192.168.326.40;192.168.326.41;192.168.326.42;192.168.326.43;192.168.326.44;192.168.326.45;192.168.326.46"
port="80"
telr


# Через порт прокси
login="root"
password="Пароль"
iptelport="172.16.77.5:3701;172.16.77.5:3702;172.16.77.5:3703;172.16.77.5:3704;172.16.77.5:3705"
telrport


function telrnew (){
IFS=';'
for iptel in $iptelephone
do
/usr/local/share/zabbix/externalscripts/kill-links-telephone-new.sh "http://"${iptel}":"${port}"/goform/SavewebLogin?username="${login}"&password="${password}"&Login=Login"
echo "http://"${iptel}":"${port}"/goform/SavewebLogin?username="${login}"&password="${password}"&Login=Login"
sleep 4
done
}

# Новые телефоны ES205-S
login="root"
password="Пароль"
iptelephone="192.168.175.74;192.168.175.63;192.168.175.23;192.168.175.82"
port="80"
telrnew


Авторизация на данном телефоне basic authentication

Получаем имя Шага Веб-проверка Телефона {HOST.CONN}:{$TELPORT}
И ссылку проверки http://{$TELLOGIN}:{$TELPASS}@{HOST.CONN}:{$TELPORT}/SysStatus.asp
Проверяем что статус страницы 200
И телефон зарегистрирован Registered1

Триггеры
Имя:
NoTel. {HOST.CONN}:{$TELPORT} завершился ошибкой: {ITEM.VALUE}
Выражение:
{Telephone:web.test.error[Веб проверка Телефона {HOST.CONN}:{$TELPORT}].strlen()}>0 and
{Telephone:web.test.fail[Веб проверка Телефона {HOST.CONN}:{$TELPORT}].min(5m)}>0
URL:
http://{$TELLOGIN}:{$TELPASS}@{HOST.CONN}:{$TELPORT}
Описание:
Ошибка в веб-сценарии Доступности
Описание:
{HOST.DESCRIPTION}

Заполняется В описании узла телефона
Полный номер
Короткий номер
Район\Отдел

В триггер была попытка вывести описание узла, но не получилось
Описание: {HOST.DESCRIPTION}

Имя:
Медленно отвечает Веб {HOST.CONN}:{$TELPORT}
Выражение:
{Telephone:web.test.in[Веб проверка Телефона {HOST.CONN}:{$TELPORT},,bps].last()}<10000
URL:
http://{$TELLOGIN}:{$TELPASS}@{HOST.CONN}:{$TELPORT}
Описание:
Веб приложение медленно отвечает

Зависимость от:
Проверка Телефонов: NoTel. {HOST.CONN}:{$TELPORT} завершился ошибкой: {ITEM.VALUE}
Шаблон zabbix веб-проверки IP телефонов
Шаблон zabbix веб-проверки IP телефонов
Шаблон zabbix веб-проверки IP телефонов Веб-проверка
Шаблон zabbix веб-проверки IP телефонов Веб-проверка
Шаблон zabbix веб-проверки IP телефонов Шаги
Шаблон zabbix веб-проверки IP телефонов Шаги
Шаблон zabbix веб-проверки IP телефонов Триггеры
Шаблон zabbix веб-проверки IP телефонов Триггеры

Скрипт для ES205 kill-links-telephone.sh

Код: Выделить всё

#!/bin/bash

# Перезагрузка телефонов Escene ES205 и закрытия процесса Links после перезгрузки
# V 1.0 2021.12.03
# Автор: Артём Андреевич Мамзиков

# Объявим входные переменные(variable)

URLTEL=$1
# Выберем логин пароль
#logintel=$(echo "${URLTEL}"|sed -e 's|^.*://||'|sed -e 's|:.*@.*||')
#passtel=$(echo "${URLTEL}"|sed -e 's|^.*://||'|sed -e 's|@.*||'|sed -e 's|.*:||')
loginpass=$(echo "${URLTEL}"|sed -e 's|^.*://||'|sed -e 's|@.*||')

# Проверим что переменная не пустая
if [ -n "${URLTEL}" ]; then URLP="${URLTEL}"; else exit; fi
# Запустим процесс перезагрузки телефона, не дожидаясь завершения выполняем скрипт дальше.
#echo -e $(links "${URLP}"/RebootHandle.asp) >/dev/null|exit &
#echo -e $(curl -s -S -k --max-time 8 "${URLP}"/RebootHandle.asp) >/dev/null|exit &
#echo -e $(curl -s -S -k -L --max-time 8 -u "${logintel}:${passtel}" "${URLP}"/goform/Reboot) >/dev/null|exit &
echo -e $(curl -s -S -k -L --max-time 8 -u "${loginpass}" "${URLP}"/goform/Reboot) >/dev/null|exit &

# Время на выполнение
sleep 9
# Найдем текущий процесс для конкретной ссылки и выведем PID процесса и завершим его.
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'| xargs kill -9 >/dev/null
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
echo OK
# Проверим еще раз что процесс завершился несколько раз)
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
# Не работает if с xargs
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|if [ -n xargs ]; then xargs  kill -9; else exit; fi

reset

#linkspid=`ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'`
# Завершим процесс
#kill "${linkspid}"
#kill -15 "${linkspid}"
#kill -9 "${linkspid}"
#kill -TERM "${linkspid}"
#kill -KILL "${linkspid}"

Скрипт для ES205-S kill-links-telephone-new.sh

Код: Выделить всё

#!/bin/bash

# Перезагрузка телефонов Escene ES205-S и закрытия процесса Links после перезгрузки
# V 1.0 2022.09.27
# Автор: Артём Андреевич Мамзиков

# Объявим входные переменные(variable)

URLTEL=$1

# Проверим что переменная не пустая
if [ -n "${URLTEL}" ]; then URLR="${URLTEL}"; else exit; fi
# Авторизация
echo -e $(curl -s -S -k -L --max-time 8 '"${URLR}"') >/dev/null|exit &
# Оставим начало ссылки для подстановки презагрузки
URLP=$(echo "${URLR}"|sed -e 's|SavewebLogin.*||')
# Проверка Авторизации если RebootHandle.asp - все хорошо, а если login.asp - авторизация не прошла
checkauthoriz=$(curl --max-time 8 "${URLP}"Reboot|egrep -oi 'RebootHandle|login')
shopt -s nocasematch #shopt - приводим к одному регистру
if [[ ${checkauthoriz} == *RebootHandle* ]]; then echo "Авторизация выполнена";fi
if [[ ${checkauthoriz} == *login* ]]; then echo "Ошибка Авторизации";fi
shopt -u nocasematch

# Запустим процесс перезагрузки телефона, не дожидаясь завершения выполняем скрипт дальше.
#echo -e $(links "${URLP}"/RebootHandle.asp) >/dev/null|exit &
echo -e $(curl -s -S -k -L --max-time 8 "${URLP}"Reboot) >/dev/null|exit &

# Время на выполнение
sleep 9
# Найдем текущий процесс для конкретной ссылки и выведем PID процесса и завершим его.
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'| xargs kill -9 >/dev/null
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
echo OK
# Проверим еще раз что процесс завершился несколько раз)
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
# Не работает if с xargs
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|if [ -n xargs ]; then xargs  kill -9; else exit; fi

reset

#linkspid=`ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'`
# Завершим процесс
#kill "${linkspid}"
#kill -15 "${linkspid}"
#kill -9 "${linkspid}"
#kill -TERM "${linkspid}"
#kill -KILL "${linkspid}"
количество слов: 1173
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 806
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 34 раза
Контактная информация:

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

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

Переделан перезапуск телефонов.

Было действие запускает браузер Link ссылкой на перезагрузку, после 5 секунд убивался процесс links причем работает только с подключением ssh как команда через агента links работать отказывается.
Минус в том что если на перезапуск уходит сразу несколько телефонов в диапазоне 10-20 секунд, не которые не успевают перезапустится так как убивается процесс.
Немного о Links
Показать
ssh видимо что то вроде графики поддерживает, так как links из терминала все команду ок , а просто команду не берет выкидывает , запуск от одного и того же пользователя.
Вывод идет в виде цветного вывода и расположения табуляции в echo -e \[\033[1;30m\][\[\033[0m\]\t\[\033[1;30m\];\

что то первый раз с таким столкнулся
пример
zabbix_get -s 192.168.xxx.xxx -p 10050 -k system.run[links]
В целом все это уходит в скрипт вида
zabbix_get -s 192.168.xxx.xxx -p 10050 -k system.run["/usr/local/share/zabbix/alertscripts/kill-links-telephone.sh "http://url""]
так же не работает

в ssh Так работает
/usr/local/share/zabbix/alertscripts/kill-links-telephone.sh "http://url"
хотя та же командная строка запускается для выполнения через заббикс агента

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

links "${URLP}"/RebootHandle.asp & - в данном случае он думает что это часть url адреса поэтому делаем так
echo -e $(links "${URLP}"/RebootHandle.asp) >/dev/null|exit &
либо `links "${URLP}"/RebootHandle.asp` &

но через заббикс он так и не захотел запускаться, сделал через curl
Будем завершать конкретный процесс, для конкретной ссылки используем для этого скрипт.
Запускаем скрипт и 1 входной аргумент будет ссылка на телефон.

kill-links-telephone.sh

Код: Выделить всё

#!/bin/bash

# Перезагрузка телефонов и закрытия процесса Links после перезагрузки
# V 1.0 2021.12.03
# Автор: Артём Андреевич Мамзиков

# Объявим входные переменные(variable)

URLTEL=$1

# Проверим что переменная не пустая
if [ -n "${URLTEL}" ]; then URLP="${URLTEL}"; else exit; fi
# Запустим процесс перезагрузки телефона, не дожидаясь завершения выполняем скрипт дальше.
#echo -e $(links "${URLP}"/RebootHandle.asp) >/dev/null|exit &
echo -e $(curl "${URLP}"/RebootHandle.asp) >/dev/null|exit &

# Время на выполнение
sleep 9
# Найдем текущий процесс для конкретной ссылки и выведем PID процесса и завершим его.
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'| xargs kill -9 >/dev/null
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
echo OK
# Проверим еще раз что процесс завершился несколько раз)
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
# Не работает if с xargs
#ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'|if [ -n xargs ]; then xargs  kill -9; else exit; fi

reset

#linkspid=`ps -ux|grep -Ei "(links|curl)[ ]"${URLP}""| awk '{print $2}'`
# Завершим процесс
#kill "${linkspid}"
#kill -15 "${linkspid}"
#kill -9 "${linkspid}"
#kill -TERM "${linkspid}"
#kill -KILL "${linkspid}"
Создаем действие , удаленная команда на zabbix servere , через агента пользовательский скрипт
/usr/local/share/zabbix/alertscripts/kill-links-telephone.sh "{TRIGGER.URL}"
Действие перезапуск телефона через скрипт
Действие перезапуск телефона через скрипт
Сделаны попытки перезапуска в течении суток каждый час, в связи с тем что телефон может быть недоступен физически, хотя зависимости и прописаны триггер может отработать и запросы на перезапуск уйдут в никуда.
Сделана проверка IP Порта через TCP , но это не помогает где идет проброс через порт прокси, так как прокси говорит что все доступно по факту телефон выключен, прямого доступа проверить пингом нет. Есть вариант отслеживать коды доступа Веб и в зависимости от состояния делать перезапуск или нет через зависимость основанного триггера.
Действие для телефонов Escene ES205-S
Действие для телефонов Escene ES205-S
количество слов: 316
Ответить Вложения 10 Пред. темаСлед. тема

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