Об этом я уже писал тут Мониторинг IP Телефонов в zabbix
Пример Шаблон Веб проверок Сайта АИС 5 Шагов этапов zabbix
Создавать новые или изменять какие то параметры старые вручную как то муторно и нудно веб сценарий и триггер.
Изначально я думал шаблон тут не подойдет ведь нужно указать все одинаковое, а как такое возможно если где то входя прямой по IP через 80 порт , а где то через проброс IP прокси и порт которые разные!
Но все же удалось создать шаблон с помощью Макросов.
На и более одинаковые данные заносим в шаблон по умолчанию, в дальнейшем где данные будут отличатся указываем макросы в узле и прописываем там правильные данные ( в моем случае это пароль и порт) IP брался с Узла там задаем реальный или прокси как по умолчанию а ниже реальный.
СКАЧАТЬ Какие использовались Макросы:
{$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
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}
Скрипт для 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}"