Скрипты API Zabbix для Hardware Monitor

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 523
Стаж: 3 года 7 месяцев
Откуда: Вологодская область
Поблагодарили: 23 раза
Контактная информация:

Скрипты API Zabbix для Hardware Monitor

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

ОФОРМИТЬ
Дополнение к Скрипт + Шаблон для Windows LLD Open Hardware Monitor и
Скрипт + Шаблон для Windows LLD Hardware Monitor

СКАЧАТЬ
API -Скрипты.zip
API -Скрипты.zip
(37.22 КБ) 0 скачиваний
hmitemapi.sh

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

#!/bin/bash

#***********************************************************************
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111' # Или localhost 127.0.0.1
zabbixUsername='Admin'
zabbixPassword='zabbix'
#Конец пользовательских переменных
#***********************************************************************
# Объявим входные переменные(variable) и если входная переменная пустая задаем дефолтные настройки для некоторых переменных
IP=$1
# Имя узла сети
HOSTHOST=$2
# Видимое имя
HOSTNAME=$3
# Порт
PORT=${4:-10050}
# Имя ПО для поиска Элемента данных (по ключу)
PUT="${5:-root\OpenHardwareMonitor}"
# Фильтр Отобразить
FILTR=${6:-.*}
# Фильтр Скрыть
HIDE=${7:-^$}

# Получим текущий путь откуда запущен скрипт
#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 )"

TRS='\\'
# Проверка нескольких путей ПО на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo "${PUT}")
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
# Для создания ключа нам надо название ПО
shopt -s nocasematch #shopt - приводим к одному регистру
if [[ ${puti} == *Open* ]]; then trput="root"${TRS}"OpenHardwareMonitor"
elif [[ ${puti} == *Libre* ]]; then trput="root"${TRS}"LibreHardwareMonitor"
elif [[ ${puti} == *HWM* ]]; then trput=Emkey="root"${TRS}"HMMonitor"
shopt -u nocasematch
else Emkey="${puti}"; fi
# Получаем Искомый ключ в узле
key="wmi.get["${trput}",SELECT Value FROM Sensor WHERE InstanceId="


header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"

function exit_with_error() {
  echo '**********************************'
  echo "$errorMessage"
  echo '----------------------------------'
  echo 'Сформированная Команда выполнения'
  echo '----------------------------------'
  echo  curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl
  echo '----------------------------------'
  echo 'Выходные данные'
  echo '----------------------------------'
  echo "$result"
  echo '**********************************'
  zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTHOST}" -k apitriggercreateerror -o "ERROR $errorMessage Команда выполнения: curl --silent --show-error --insecure --header $header --data $json $zabbixApiUrl Результат $result"
}


#------------------------------------------------------
# Аутентификация пользователя. https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/login
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить токен авторизации Zabbix'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\"},\"id\": 1 }`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
auth=$(echo "${result}" |sed -e 's|.*result":"||' -e 's/","id.*//g')
check=$(echo "${auth}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&exit 1 ; fi
echo "Вход в систему выполнен успешно - Идентификатор авторизации: $auth"
errorMessage="";json="";result="";check="" # Очистка переменных


function outapi(){
#------------------------------------------------------
# Выход из zabbix https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/logout
#------------------------------------------------------
# Выполнение выхода из API.
errorMessage='*ERROR* - Не удалось выйти из системы'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.logout\",\"params\": [],\"id\": 1, \"auth\": \"$auth\"}`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
logout=$(echo "${result}" |sed -e 's|.*result":||' -e 's/,"id.*//g')
check=$(echo "${logout}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo 'Успешно вышел из Zabbix' "${logout}"
errorMessage="";json="";result="";check="" # Очистка переменных
exit 1
}


# Запрос информации об авторизовавшемся пользователе
#usinfo=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\",\"userData\": true},\"id\": 1 }`
#infouser=`curl --silent --show-error --insecure --header $header --data "$usinfo" $zabbixApiUrl`
#echo "${infouser}"


#------------------------------------------------------
# Получение узлов сети в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/host/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается проверить узел сети'
json="{\"jsonrpc\": \"2.0\",\"method\":\"host.get\",\"params\": {\"output\": [\"hostid\"],\"filter\": {\"host\": [\"$HOSTHOST\"]}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
# Поиск Узла сети
#echo -e "Найденые Узлы сети:" "${result}"
idhost=$(echo "${result}"|sed 's|.*hostid":"||'|sed 's|"}.*||')
#echo "ID Узла:"$idhost
errorMessage="";json="";result="";check="" # Очистка переменных


#------------------------------------------------------
# Получение элементов в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/item/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить Элемент(ы) данных'
json="{\"jsonrpc\": \"2.0\",\"method\":\"item.get\",\"params\": {\"selectApplications\": [\"name\"],\"filter\": {\"status\": 0,\"type\": 0},\"host\": \""${HOSTHOST}"\",\"search\": {\"key_\": \"$key\"},\"output\": [\"key_\",\"units\",\"name\",\"applications\"]},\"auth\":\"$auth\", \"id\": 1 }"
#json="{\"jsonrpc\": \"2.0\",\"method\":\"item.get\",\"params\": {\"filter\": {\"status\": 0,\"type\": 0,\"units\": \"°C\"},\"host\": \""${HOSTHOST}"\",\"application\": \"OHM Temperature\",\"search\": {\"key_\": \"$key\",\"name\": \"CPU\",\"application\": \"Temperature\"},\"output\": [\"key_\"]},\"auth\":\"$auth\", \"id\": 1 }"
#json="{\"jsonrpc\": \"2.0\",\"method\":\"item.get\",\"params\": {\"filter\": {\"status\": 0,\"type\": 0,\"units\": \"°C\"},\"host\": \""${HOSTHOST}"\",\"application\": \"OHM Temperature\",\"search\": {\"key_\": \"wmi.get\",\"name\": \"CPU\",\"application\": \"Temperature\"},\"output\": [\"key_\"], \"selectApplications\": [\"name\"]},\"auth\":\"$auth\", \"id\": 1 }"
#json="{\"jsonrpc\": \"2.0\",\"method\":\"item.get\",\"params\": {\"output\": [\"key_\"], \"filter\": {\"status\": 0,\"type\": 0}, \"host\": \""${HOSTHOST}"\", \"group\": \"Сервера ЭСРН\"},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
# Элементы данных
PO=$(echo $trput|sed 's/.*\\//g')
item=$(echo -e $result|egrep -i 'itemid":"[0-9]+"'|sed 's|.*result":||'|sed 's/,"id.*//g'|sed 's/","key_"://g'|sed 's/}]},{/\n/g'|sed 's/\[{"applicationid":"[0-9]\+","name":"'$PO'"},{"applicationid":"[0-9]\+","name"://g'|sed 's/^\[{\|}\]}\]$//g')
#echo "Найденые элементы данных:" $result
#echo "Ключи Элементов данных" "${item}"
FR=$FR"${item}"
errorMessage="";json="";result="";check="" # Очистка переменных

# Если не было зависимости от нет пинга к процессу проставим
namepo=$(echo Процесс $trput |sed 's|root\\\\||')
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "${namepo}" "NoPingAgent {HOST.NAME}"
#echo "Зависимость" "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "${namepo}" "NoPingAgent {HOST.NAME}"
#"${HOSTNAME}""

# Зависимость от процесса, для Нет Данных
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "Нет Данных HM-LLD-JSON-data" "${namepo}"

done

# Построчно
IFS=$'\n'
for element in $(echo "${FR}" 2>/dev/null);
do
#echo "${element}"
# Уберем вначале ID элемента для выражения
#element=$(echo $element |sed 's/"itemid":"[0-9]\+//g')
# Получаем key |Убираем ID элемента|убираем все оствшееся
keydefault=$(echo $element |sed 's/"itemid":"[0-9]\+//g'|sed 's/^"\|","units".*//g'|sed 's/\\/\\\\/g')
# Получаем key |Убираем ID элемента|Элементы без CPU|убираем все оствшееся
keynocpu=$(echo $element |sed 's/"itemid":"[0-9]\+//g'|grep -iv "CPU"|sed 's/^"\|","units".*//g'|sed 's/\\/\\\\/g')
# Получаем key |Убираем ID элемента|Элементы с CPU|убираем все оствшееся
keyscpu=$(echo $element |sed 's/"itemid":"[0-9]\+//g'|grep -i "CPU"|sed 's/^"\|","units".*//g'|sed 's/\\/\\\\/g')
# Имя Элемента
nameitem=$(echo "${element}"|sed 's/.*name":"\|","applications.*//g')
# Оставим только ID элемента для графиков
itemidgraph=$(echo $element |sed 's/"itemid":"//g'|sed 's/"wmi.get.*//g')
# Имя ПО для зависимости триггеров
namehw=$(echo Процесс $element |sed 's/"itemid":"[0-9]\+//g' |sed 's/"wmi.get\[root\\\|,SELECT.*//g')
#namehw=$(echo Процесс $namepo)
# Рассортируем по типам
case $element in
    *MHz*Clock*)
    triggermhz="{"${HOSTHOST}":$keydefault"
    #echo $triggermhz
    ;;
    *%*Load*)
    triggerload="{"${HOSTHOST}":$keydefault"
    ;;
    *%*Control*)
    
    ;;
    *°C*Temperature*)
    # Для Температуры CPU
    triggertempcpu="{"${HOSTHOST}":$keyscpu"
    #echo $triggertempcpu
    
    # Формируем триггеры:
    if [[ "$keyscpu" != "" ]]; then
    extrtemptrigexpcpu=$extrtemptrigexpcpu"$ilitempcpu$triggertempcpu.avg(#3)}>70" # Условие: Для 70 градусов
    hightemptrigexpcpu=$hightemptrigexpcpu"$ilitempcpu$triggertempcpu.avg(#3)}>60" # Условие: Для 60 градусов
    ilitempcpu=' or\n'
    doptrigtempcpu="$triggertempcpu" # Для общего условия
    # Название Элемента в описание триггера (из каких эл-ов состоит триггер)
    destrigtempcpu=$destrigtempcpu$(echo "${nameitem}")\\n
    # Формируем список ID элементов для Графика
    tempgraphcpuid=$tempgraphcpuid"$gpaphtempcpu$itemidgraph"
    gpaphtempcpu=';'
    fi # присваиваем переменные если есть данные данного блока.
    
    # Для Температуры Кроме CPU
    triggertemp="{"${HOSTHOST}":$keynocpu"
    #echo $triggertemp
    
    # Формируем триггеры:
    if [[ "$keynocpu" != "" ]]; then
    extrtemptrigexp=$extrtemptrigexp"$ilitemp$triggertemp.avg(#3)}>70" # Условие: Для 70 градусов
    hightemptrigexp=$hightemptrigexp"$ilitemp$triggertemp.avg(#3)}>60" # Условие: Для 60 градусов
    ilitemp=' or\n'
    doptrigtemp="$triggertemp" # Для общего условия
    # Название Элемента в описание триггера (из каких эл-ов состоит триггер)
    destrigtemp=$destrigtemp$(echo "${nameitem}")\\n
    # Формируем список ID элементов для Графика
    tempgraphnocpuid=$tempgraphnocpuid"$gpaphtempnocpu$itemidgraph"
    gpaphtempnocpu=';'
    fi # присваиваем переменные если есть данные данного блока.
    
    ;;
    *GB*Data*)
    
    ;;
    *RPM*Fan*)
    # Кулера CPU
    triggerfancpu="{"${HOSTHOST}":$keyscpu"
    #echo $triggerfancpu
    if [[ "$keyscpu" != "" ]]; then
    fantrigcpu=$fantrigcpu"$ilifancpu$triggerfancpu.avg(#3)}=0 or\n$triggerfancpu.avg(#3)}>2500" # Условие: Кулер неработает 0 или обороты выше 2500
    ilifancpu=' or\n'
    doptrigfancpu="$triggerfancpu" # Для общего условия
    # Название Элемента в описание триггера (из каких эл-ов состоит триггер)
    destrigfancpu=$destrigfancpu$(echo "${nameitem}")\\n
    # Формируем список ID элементов для Графика
    fancpugraphid=$fancpugraphid"$gpaphfancpu$itemidgraph"
    gpaphfancpu=';'
    fi # присваиваем переменные если есть данные данного блока.
    
    # Для Кулеров Кроме CPU
    triggerfan="{"${HOSTHOST}":$keynocpu"
    #echo $triggerfan
    if [[ "$keynocpu" != "" ]]; then
    fantrig=$fantrig"$ilifan$triggerfan.avg(#3)}=0 or\n$triggerfan.avg(#3)}>2500" # Условие: Кулер неработает 0 или обороты выше 2500
    ilifan=' or\n'
    doptrigfan="$triggerfan" # Для общего условия
    # Название Элемента в описание триггера (из каких эл-ов состоит триггер)
    destrigfan=$destrigfan$(echo "${nameitem}")\\n
    # Формируем список ID элементов для Графика
    fangraphid=$fangraphid"$gpaphfan$itemidgraph"
    gpaphfan=';'
    fi # присваиваем переменные если есть данные данного блока.
    
    ;;
    *V*Voltage*)
    
    ;;
    *KB/s*Throughput*)
    
    ;;
esac
keydefault=""
keyscpu=""
keynocpu=""
done


function getgrap(){
# После создания графика запросим его ID и в момент создания триггера добавим URL на график
#------------------------------------------------------
# Получение  графики  в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/graph/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается проверить график'
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.get\",\"params\": {\"output\": [\"graphids\",\"name\"],\"filter\": {\"host\": \"$HOSTHOST\",\"name\": \"$namegraph\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
idgrap=$(echo "${result}"|sed 's|.*graphid":"||'|sed 's|".*||')
#echo "Найденый график ID для триггера" $idgrap
urlgrap=$(echo "http://$zabbixServer/zabbix/charts.php?hostid=$idhost&graphid=$idgrap") # IP-заббикс, ID-Хоста ID-графика
#echo "URL На График" $urlgrap
errorMessage="";json="";result="";check="";idgrap="" # Очистка переменных
}

function getlatestdata(){
# URL для триггера "Ошибки API для HM" последние данные
#------------------------------------------------------
# Получение элементов в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/item/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить Элемент(ы) данных: Ошибки API'
json="{\"jsonrpc\": \"2.0\",\"method\":\"item.get\",\"params\": {\"filter\": {\"status\": 0,\"type\": 2},\"host\": \""${HOSTHOST}"\",\"search\": {\"key_\": \"$elementkey\"},\"output\": [\"itemid\"]},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
# Элементы данных
#echo "Найденые элементы данных:" $result
iditem=$(echo $result|egrep -i 'itemid":"[0-9]+"'|sed 's|.*itemid":"||'|sed 's|".*||')
#echo "ИД Элемента данных Ошибки API для HM:" "${iditem}"
urllatest=$(echo "http://$zabbixServer//zabbix/history.php?action=showvalues&itemids[]=$iditem") # IP-заббикс, ID-Элемента
#echo "URL На Последние данные Элемента:" $urllatest
errorMessage="";json="";result="";check="";iditem="" # Очистка переменных
}

# Для Температуры CPU
if [[ "$extrtemptrigexpcpu" != "" ]]; then
# Создание графика
bash "${currentpath}"/graphcreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "CPU Temperature" "900" "200" "0" "1" "1" "1" "0" "0" "0" "0" "0" "" "0" "100" "" "$tempgraphcpuid" "7" "0" "0"
namegraph="CPU Temperature" &&getgrap
#echo "${extrtemptrigexpcpu}" # Тестовый вывод формирования триггера
EXTRTEMPTRIGGERCPU="$extrtemptrigexpcpu" #or\n$doptrigtempcpu.avg(#3)}=0 or\n$doptrigtempcpu.nodata(1h)}=1" # К последнему элементу добавим условие 0 или нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEEXTREMHIGHTEMPCPU="ExtremHighTemp CPU {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 70 градусов
prioritextrtempcpu="5" # Важность Черезвычайная
commentsextremcpu="Слишком высокая температура\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigtempcpu" #\n\nОшибка Если температура 0\nОшибка Если нет данных более 1 часа" # Описание триггерра для 70 градусов
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEEXTREMHIGHTEMPCPU}" $prioritextrtempcpu "${EXTRTEMPTRIGGERCPU}" "${commentsextremcpu}" "${namehw}"  "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEEXTREMHIGHTEMPCPU}" $prioritextrtempcpu "${EXTRTEMPTRIGGERCPU}" "${commentsextremcpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
# Создадим отдельный триггер на проверку что Значение не 0 и не пустое на любой элемент по температуре CPU
valuecputemp="$doptrigtempcpu.avg(#3)}=0 or\n$doptrigtempcpu.nodata(1h)}=1"
commentsvaluecpu="Ошибка Если температура 0\nОшибка Если нет данных более 1 часа\n\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "Нет Данных HM-Temp-CPU (api)" "3" "${valuecputemp}" "${commentsvaluecpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
# Зависимость от Нет Данных HM-LLD-JSON-data, для Нет Данных HM-Temp-CPU (api)
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "Нет Данных HM-Temp-CPU (api)" "Нет Данных HM-LLD-JSON-data"
# Добавим в триггер "Ошибки API для HM" URL последних данных по элементу
elementkey="apitriggercreateerror" &&getlatestdata
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "Ошибки API для HM" "" "" "" "" "" "${urllatest}" "1"
fi
if [[ "$hightemptrigexpcpu" != "" ]]; then
#echo "${hightemptrigexpcpu}" # Тестовый вывод формирования триггера
HIGHTEMPTRIGGERCPU="$hightemptrigexpcpu" #or\n$doptrigtempcpu.avg(#3)}=0 or\n$doptrigtempcpu.nodata(1h)}=1" # К последнему элементу добавим условие 0 или нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEHIGHTEMPCPU="HighTemp CPU {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 60 градусов
priorithightempcpu="4" # Важность высокая
commentshighcpu="Высокая температура\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigtempcpu" #\n\nОшибка Если температура 0\nОшибка Если нет данных более 1 часа" # Описание триггерра для 60 градусов
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEHIGHTEMPCPU}" $priorithightempcpu "${HIGHTEMPTRIGGERCPU}" "${commentshighcpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEHIGHTEMPCPU}" $priorithightempcpu "${HIGHTEMPTRIGGERCPU}" "${commentshighcpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
# Зависимость HighTemp CPU {HOST.NAME}=({ITEM.VALUE}) от ExtremHighTemp CPU {HOST.NAME}=({ITEM.VALUE})
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "HighTemp CPU {HOST.NAME}=({ITEM.VALUE})" "ExtremHighTemp CPU {HOST.NAME}=({ITEM.VALUE})"
fi

# Для Температуры кроме CPU
if [[ "$extrtemptrigexp" != "" ]]; then
# Создание графика
bash "${currentpath}"/graphcreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "Temperature" "900" "200" "0" "1" "1" "1" "0" "0" "0" "0" "0" "" "0" "100" "" "$tempgraphnocpuid" "7" "0" "0"
namegraph="Temperature" &&getgrap
#echo "${extrtemptrigexp}" # Тестовый вывод формирования триггера
EXTRTEMPTRIGGER="$extrtemptrigexp" #or\n$doptrigtemp.avg(#3)}=0 or\n$doptrigtemp.nodata(1h)}=1" # К последнему элементу добавим условие 0 или нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEEXTREMHIGHTEMP="ExtremHighTemp {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 70 градусов
prioritextrtemp="5" # Важность Черезвычайная
commentsextrem="Слишком высокая температура\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigtemp" #\n\nОшибка Если температура 0\nОшибка Если нет данных более 1 часа" # Описание триггерра для 70 градусов
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEEXTREMHIGHTEMP}" $prioritextrtemp "${EXTRTEMPTRIGGER}" "${commentsextrem}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEEXTREMHIGHTEMP}" $prioritextrtemp "${EXTRTEMPTRIGGER}" "${commentsextrem}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
fi
if [[ "$hightemptrigexp" != "" ]]; then
#echo "${hightemptrigexp}" # Тестовый вывод формирования триггера
HIGHTEMPTRIGGER="$hightemptrigexp" #or\n$doptrigtemp.avg(#3)}=0 or\n$doptrigtemp.nodata(1h)}=1" # К последнему элементу добавим условие 0 или нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEHIGHTEMP="HighTemp {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 60 градусов
priorithightemp="4" # Важность высокая
commentshigh="Высокая температура\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigtemp" #\n\nОшибка Если температура 0\nОшибка Если нет данных более 1 часа" # Описание триггерра для 60 градусов
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEHIGHTEMP}" $priorithightemp "${HIGHTEMPTRIGGER}" "${commentshigh}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEHIGHTEMP}" $priorithightemp "${HIGHTEMPTRIGGER}" "${commentshigh}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
# Зависимость HighTemp {HOST.NAME}=({ITEM.VALUE}) от ExtremHighTemp {HOST.NAME}=({ITEM.VALUE})
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "" "" "" "" "HighTemp {HOST.NAME}=({ITEM.VALUE})" "ExtremHighTemp {HOST.NAME}=({ITEM.VALUE})"
fi

# Для кулеров CPU
if [[ "$fantrigcpu" != "" ]]; then
# Создание графика
bash "${currentpath}"/graphcreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "FAN CPU" "900" "200" "0" "1" "1" "1" "0" "0" "0" "0" "0" "" "0" "100" "" "$fancpugraphid" "7" "0" "0"
namegraph="FAN CPU" &&getgrap
#echo "${fantrigcpu}" # Тестовый вывод формирования триггера
FANTRIGGERCPU="$fantrigcpu" #or\n$doptrigfancpu.nodata(1h)}=1" # К последнему элементу добавим условие нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEFANCPU="RPM FAN CPU {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 60 градусов
prioritfancpu="2" # Важность предупреждение
commentsfancpu="Большие Обороты Кулера\n\nОшибка Если Обороты 0\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigfancpu" #\nОшибка Если нет данных более 1 часа"
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEFANCPU}" $prioritfancpu "${FANTRIGGERCPU}" "${commentsfancpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEFANCPU}" $prioritfancpu "${FANTRIGGERCPU}" "${commentsfancpu}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
fi

# Для кулеров Кроме CPU
if [[ "$fantrig" != "" ]]; then
# Создание графика
bash "${currentpath}"/graphcreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "FAN" "900" "200" "0" "1" "1" "1" "0" "0" "0" "0" "0" "" "0" "100" "" "$fangraphid" "7" "0" "0"
namegraph="FAN" &&getgrap
#echo "${fantrig}" # Тестовый вывод формирования триггера
FANTRIGGER="$fantrig" #or\n$doptrigfan.nodata(1h)}=1" # К последнему элементу добавим условие нет данных более 1 часа
# Формирование триггеров для создания в узлах через API
NAMEFAN="RPM FAN {HOST.NAME}=({ITEM.VALUE})" # Имя триггера для 60 градусов
prioritfan="2" # Важность предупреждение
commentsfan="Большие Обороты Кулера\n\nОшибка Если Обороты 0\nПоследнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})\n\n\nИспользуемые элементы:\n$destrigfan" #\nОшибка Если нет данных более 1 часа" # Описание триггерра
echo -e $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEFAN}" $prioritfan "${FANTRIGGER}" "${commentsfan}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
bash "${currentpath}"/triggercreatezbxapi.sh $IP "${HOSTHOST}" "${HOSTNAME}" "${NAMEFAN}" $prioritfan "${FANTRIGGER}" "${commentsfan}" "${namehw}" "NoPingAgent {HOST.NAME}" "${urlgrap}"
fi

urlgrap=""

outapi

количество слов: 2022
Партнёрская ссылка на Хостинг Beget https://beget.com/p937243
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 523
Стаж: 3 года 7 месяцев
Откуда: Вологодская область
Поблагодарили: 23 раза
Контактная информация:

Скрипты API Zabbix для Hardware Monitor

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

triggercreatezbxapi.sh

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

#!/bin/bash

#2022/06/14 v2.3 test
# Автор Мамзиков Артём Андреевич Описание по скрипту https://diyit.ru/viewtopic.php?t=1946

# Входные атрибуты для отправки информации об ошибке
# IP или DNS узла по умолчанию
HOSTCONN=$1
# Имя узла сети
HOSTHOST=$2
# Видимое имя
HOSTNAME=$3

#Входные данные для триггеров:
# Имя
description=$4
# Важность
priority=$5
# Выражение
expression=$6
# Разрешить закрывать вручную
manual_close="1"
# URL если есть ссылка пропишем
linku=${10}
if [[ "$linku" != "" ]]; then url="\"url\": \"$linku\",";else url=""; fi
# Описание
comments=$7
# Активировано
status="0"
# Зависимость для триггера Имя (зависимый триггер)
nametriggerslave=$8
# Триггер для зависимости Имя (от кого зависимость)
nametriggermaster=$9
# Обновить триггер 1
obn=${11}


#***********************************************************************
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111' # Или localhost 127.0.0.1
zabbixUsername='Admin'
zabbixPassword='zabbix'
#Конец пользовательских переменных
#***********************************************************************

header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"

function exit_with_error() {
  echo '**********************************'
  echo "$errorMessage"
  echo '----------------------------------'
  echo 'Сформированная Команда выполнения'
  echo '----------------------------------'
  echo  curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl
  echo '----------------------------------'
  echo 'Выходные данные'
  echo '----------------------------------'
  echo "$result"
  echo '**********************************'
  zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTHOST}" -k apitriggercreateerror -o "ERROR $errorMessage Команда выполнения: curl --silent --show-error --insecure --header $header --data $json $zabbixApiUrl Результат $result"
}


#------------------------------------------------------
# Аутентификация пользователя. https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/login
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить токен авторизации Zabbix'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\"},\"id\": 1 }`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
auth=$(echo "${result}" |sed -e 's|.*result":"||' -e 's/","id.*//g')
check=$(echo "${auth}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&exit 1 ; fi
echo "Вход в систему выполнен успешно - Идентификатор авторизации: $auth"
errorMessage="";json="";result="";check="" # Очистка переменных


function outapi(){
#------------------------------------------------------
# Выход из zabbix https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/logout
#------------------------------------------------------
# Выполнение выхода из API.
errorMessage='*ERROR* - Не удалось выйти из системы'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.logout\",\"params\": [],\"id\": 1, \"auth\": \"$auth\"}`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
logout=$(echo "${result}" |sed -e 's|.*result":||' -e 's/,"id.*//g')
check=$(echo "${logout}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo 'Успешно вышел из Zabbix' "${logout}"
errorMessage="";json="";result="";check="" # Очистка переменных
exit 1
}


# Запрос информации об авторизовавшемся пользователе
#usinfo=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\",\"userData\": true},\"id\": 1 }`
#infouser=`curl --silent --show-error --insecure --header $header --data "$usinfo" $zabbixApiUrl`
#echo "${infouser}"


# Зависимость для триггера (зависимый триггер), получаем ID
#------------------------------------------------------
# Получение триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get
#------------------------------------------------------
if [[ "$nametriggerslave" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить триггер'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.get\",\"params\": {\"selectTriggerDiscovery\": [\"parent_triggerid\"],\"active\": true, \"output\": [\"triggerid\",\"description\",\"priority\",\"status\"], \"expandComment\": \"True\", \"expandDescription\": \"True\", \"expandExpression\": \"True\", \"filter\": {\"host\": \"$HOSTHOST\",\"description\": \"$nametriggerslave\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
# Поиск триггера и получение его ID
triggeridslave=$(echo $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*"triggerid":"||'|sed 's/","description.*//g')
# Если триггер создан из прототипа, получаем ID прототипа триггера в узле
prototypetrigidslave=$(echo $result|egrep -i '"parent_triggerid":"[0-9]+"'|sed 's|.*"parent_triggerid":"||'|sed 's/"}.*//g')
#echo "Найденые триггеры (зависимый):" $result
echo "Получаем ID триггера (зависимый):" $triggeridslave
echo "Получаем ID прототипа триггера (зависимый):" $prototypetrigidslave
errorMessage="";json="";result="";check="" # Очистка переменных
fi


# Триггер для зависимости (от кого зависимость), получаем ID
#------------------------------------------------------
# Получение триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get
#------------------------------------------------------
if [[ "$nametriggermaster" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить триггер'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.get\",\"params\": {\"active\": true, \"output\": [\"triggerid\",\"description\",\"priority\",\"status\"], \"expandComment\": \"True\", \"expandDescription\": \"True\", \"expandExpression\": \"True\", \"filter\": {\"host\": \"$HOSTHOST\",\"description\": \"$nametriggermaster\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
# Поиск триггера и получение его ID
triggeridmaster=$(echo $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*triggerid":"||'|sed 's/","description.*//g')
#echo "Найденые триггеры (зависимость от):" $result
echo "Получаем ID триггера (зависимость от):" $triggeridmaster
errorMessage="";json="";result="";check="" # Очистка переменных
fi


# Получение уже существующих зависимостей триггера
#------------------------------------------------------
# Получение триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get
#------------------------------------------------------
if [[ "$triggeridslave$nametriggerslave" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить зависимости  триггера'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.get\",\"params\": {\"triggerids\": \"$triggeridslave\",\"active\": true,\"selectDependencies\": [\"triggerid_up\"],\"output\": [\"triggerid\",\"description\",\"priority\",\"status\"],\"filter\": {\"host\": \"$HOSTHOST\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
# Поиск триггера и получение его ID
triggerzavid=$(echo $result|egrep -i 'dependencies":\[{"triggerid":"[0-9]+"'|sed 's|.*dependencies":\[{"triggerid":"||'|sed 's|"}\]}\].*||'|sed 's/"},{"triggerid":"/;/g')
#echo -e "Найденые зависимости:" $result
echo -e "Получаем ID триггеров от которых уже есть зависимость:" $triggerzavid
errorMessage="";json="";result="";check="";masstrigupdat="" # Очистка переменных
# Проверка существует уже зависимость или нет, если несколько по очередно через ;
chekzavisimtrig="no" # Изначальное значение переменной нет зависимостей
masstrigupdat="" # Нет массива зависимостей
if [[ "$triggerzavid" != "" ]]; then # Если зависимостей нет пропускаем блок
IFS=';' read -ra razbivkatrigid < <(echo "${triggerzavid}")
for zavtrigid in "${razbivkatrigid[@]}"
do
if [[ ${zavtrigid} == ${triggeridmaster} ]]; then chekzavisimtrig="yes"
echo "Зависимость существует ${zavtrigid} == ${triggeridmaster}"
else
# Если делаем через обновление: Формируем массив Текущие зависимости +(новая для обновления в самом блоке обновления)
masstrigupdat=$masstrigupdat"{\"triggerid\": \"$zavtrigid\"},"
fi
done
fi
fi
echo $chekzavisimtrig "Массив текущих зависимостей:" $masstrigupdat


# Добавляем зависимость
#------------------------------------------------------
# Создавать новые зависимости триггеров https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/adddependencies
#------------------------------------------------------
if [[ "$chekzavisimtrig" == "no" ]]; then # если зависимости нет идем дальше, если есть пропускаем данный блок
if [[ "$nametriggerslave$nametriggermaster" != "" ]]; then # проверяем что переменные не пустые, есть id триггеров для создания зависимостей
errorMessage='*ERROR* - Не удается Создать зависимости триггера $nametriggerslave от $nametriggermaster'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.adddependencies\",\"params\": {\"triggerid\": \"$triggeridslave\",\"dependsOnTriggerid\": \"$triggeridmaster\"},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
checkr=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
duplicate=$(echo "${result}"|tr -d '\r\n'|grep -Eci "Duplicate dependencies in trigger") # Проверка на дубль что уже есть зависимость, чтоб не высылало ошибку по дублю
if [[ "$duplicate" == "0" ]]; then


# БЛОК ДЛЯ ПРОТОТИПОВ ТРИГГЕРОВ ---------------------------
# Проверка на прототип триггера, если есть прототип триггера в узле добавляем к нему зависимость (проставится после повторного обнаружения)
prototypetrig=$(echo "${result}"|tr -d '\r\n'|grep -Eci "No permissions to referred object or it does not exist|for a discovered trigger")
if [[ "$prototypetrig" == "1" ]]; then
# Проверяем получен ли ID прототипа триггера, если нет пробуем найти по имени триггера (макросы не раскрываются! при поиске по имени учитывать)
if [[ "$prototypetrigidslave" == "" ]]; then
# Зависимость для прототипа триггера (зависимый прототип триггер), получаем ID
#------------------------------------------------------
# Получение прототипов триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/triggerprototype/get
#------------------------------------------------------
if [[ "$nametriggerslave" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить прототип триггера $nametriggerslave'
json="{\"jsonrpc\": \"2.0\",\"method\":\"triggerprototype.get\",\"params\": {\"active\": true, \"output\": [\"triggerid\",\"description\",\"priority\",\"status\"],\"filter\": {\"host\": \"$HOSTHOST\",\"description\": \"$nametriggerslave\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
# Поиск прототипа триггера и получение его ID
prototypetrigidslave=$(echo $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*triggerid":"||'|sed 's/","description.*//g')
#echo "Найденые прототипы триггеры:" $result
echo "Получаем ID прототипа триггера:" $prototypetrigidslave
errorMessage="";json="";result="";check="" # Очистка переменных
fi
fi

# Получение уже существующих зависимостей прототипа триггера
#------------------------------------------------------
# Получение прототипы триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/triggerprototype/get
#------------------------------------------------------
if [[ "$prototypetrigidslave" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить зависимости  триггера'
json="{\"jsonrpc\": \"2.0\",\"method\":\"triggerprototype.get\",\"params\": {\"triggerids\": \"$prototypetrigidslave\",\"active\": true,\"selectDependencies\": [\"triggerid_up\"],\"output\": [\"triggerid\",\"description\",\"priority\",\"status\"],\"filter\": {\"host\": \"$HOSTHOST\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
# Поиск прототипа триггера в узле и получение его ID
triggerzavid=$(echo $result|egrep -i 'dependencies":\[{"triggerid":"[0-9]+"'|sed 's|.*dependencies":\[{"triggerid":"||'|sed 's|"}\]}\].*||'|sed 's/"},{"triggerid":"/;/g')
#echo "Найденые зависимости у прототипа в узле:" $result
echo "Получаем ID триггеров от которых уже есть зависимость:" $triggerzavid
errorMessage="";json="";result="";check="" # Очистка переменных
# Проверка существует уже зависимость или нет, если несколько по очередно через ;
chekzavisimtrig="no" # Изначальное значение переменной нет зависимостей
masstrigupdat="" # Нет массива зависимостей
if [[ "$triggerzavid" != "" ]]; then # Если зависимостей нет пропускаем блок
IFS=';' read -ra razbivkatrigid < <(echo "${triggerzavid}")
for zavtrigid in "${razbivkatrigid[@]}"
do
if [[ ${zavtrigid} == ${triggeridmaster} ]]; then chekzavisimtrig="yes"
echo "Прототип Зависимость существует ${zavtrigid} == ${triggeridmaster}"
else
# Если делаем через обновление: Формируем массив Текущие зависимости +(новая для обновления в самом блоке обновления)
masstrigupdat=$masstrigupdat"{\"triggerid\": \"$zavtrigid\"},"
fi
done
fi
echo $chekzavisimtrig "массив уже существующих зависимостей:" $masstrigupdat

if [[ "$chekzavisimtrig" == "no" ]]; then # если зависимости нет идем дальше, если есть пропускаем данный блок
#------------------------------------------------------
# Обновить существующие прототипы триггеров https://www.zabbix.com/documentation/current/ru/manual/api/reference/triggerprototype/update
#------------------------------------------------------
errorMessage='*ERROR* - Не удается Обновление зависимости прототипа триггера $nametriggerslave $prototypetrigidslave от $nametriggermaster $triggeridmaster'
json="{\"jsonrpc\": \"2.0\",\"method\":\"triggerprototype.update\",\"params\": {\"triggerid\": \"$prototypetrigidslave\", \"dependencies\":[$masstrigupdat{\"triggerid\": \"$triggeridmaster\"}]},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
echo "Создание/Обновление зависимости прототипа триггера $nametriggerslave $prototypetrigidslave от $nametriggermaster $triggeridmaster:"
#echo "Сформированая команда:" $json
errorMessage="";json="";result="";check="" # Очистка переменных
fi
errorMessage="";json="";result="";check="";duplicate="" # Очистка переменных
fi # Закрытие 2 попытка получить id прототипа триггера из имени тригера
else
if [[ ${checkr} == *ERROR* ]]; then exit_with_error ; fi # Ошибка, если это не дубль или прототип
fi # Закрытие проверки на прототип триггера
fi # Закрытие еще одной проверки существует уже зависимость или нет
fi # Закрытие проверки id триггеров не пустые
fi # Закрытие проверки существует уже зависимость или нет


# Обновляем данные триггера, добавляем зависимость (если есть зависимость другая она заменяется)
#------------------------------------------------------
# Обновление существующих триггеров https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/update
#------------------------------------------------------
#if [[ "$nametriggerslave$nametriggermaster" != "" ]]; then
#errorMessage='*ERROR* - Не удается Обновление зависимости триггера $nametriggerslave от $nametriggermaster'
#json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.update\",\"params\": {\"triggerid\": \"$triggeridslave\", \"dependencies\":[$masstrigupdat{\"triggerid\": \"$triggeridmaster\"}]},\"auth\":\"$auth\", \"id\": 1 }"
#result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
#check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
#if [[ ${check} == *ERROR* ]]; then exit_with_error ; fi
#echo "Обновление зависимости триггера $nametriggerslave от $nametriggermaster:" $result
#errorMessage="";json="";result="";check="" # Очистка переменных
#fi


function updtrig(){
# Добавим URL в уже созданный триггер
#------------------------------------------------------
# Обновление существующих триггеров https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/update
#------------------------------------------------------
if [[ "$linku" == "$urlsrav" ]]; then obn="0" &&echo "Одинаковый URL" ;fi # Если url одинаковый выходим
if [[ "$obn" == "1" ]]; then
errorMessage='*ERROR* - Не удается Обновить URL триггера'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.update\",\"params\": {$url\"triggerid\": \"$idtriggers\"},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi; fi
#echo "Обновление триггера:" $result
errorMessage="";json="";result="";check="" # Очистка переменных
else outapi ;fi
}

# Проверка Перед Созданием существует триггер или нет (по имени), если да выходим
#------------------------------------------------------
# Получение триггеров в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get
#------------------------------------------------------
if [[ "$description" != "" ]]; then
errorMessage='*ERROR* - Не удается проверить триггер'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.get\",\"params\": {\"active\": true, \"output\": [\"triggerid\",\"description\",\"priority\",\"status\",\"url\"],\"filter\": {\"host\": \"$HOSTHOST\",\"description\": \"$description\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
# Поиск триггера
echo -e "Найденые триггеры:" $result
checktriggers=$(echo -e $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*result":||'|sed 's/,"id.*//g'|sed 's|.*description":"||'|sed 's/","priority":"'$priority'.*//g')
idtriggers=$(echo $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*triggerid":"||'|sed 's|".*||')
urlsrav=$(echo $result|egrep -i '"triggerid":"[0-9]+"'|sed 's|.*url":"||'|sed 's|".*||')
#echo "Находим строку по соответствию:" $checktriggers
echo "Сравнение триггеров" "$description" == "$checktriggers"
#if [[ "$description" == "$checktriggers" ]]; then echo "Триггер существует:" $checktriggers &&outapi ; fi # Если триггер существует завершаем цикл скрипта
if [[ "$description" == "$checktriggers" ]]; then echo "Триггер существует:" $checktriggers &&updtrig ; fi # Если триггер существует передаем в блок обновления
errorMessage="";json="";result="";check="" # Очистка переменных
fi


#------------------------------------------------------
# Создание триггера https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/create
#------------------------------------------------------
if [[ "$expression" != "" ]]; then
errorMessage='*ERROR* - Не удается создать триггер'
json="{\"jsonrpc\": \"2.0\",\"method\":\"trigger.create\",\"params\":\
[{\"description\": \"$description\",\
\"expression\": \"$expression\",\
\"priority\": $priority ,\
\"status\": $status ,\
\"manual_close\": $manual_close ,\
$url
\"comments\": \"$comments\",\
\"dependencies\":[{\"triggerid\": \"$triggeridslave\"}]}],\
\"auth\":\"$auth\", \"id\": 1 }"

result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
triggerids=$(echo "${result}" |sed -e 's|.*result":{"triggerids":\["||' -e 's/\"]},"id.*//g')
repeat=$(echo "${result}"|tr -d '\r\n'| sed -n 's/.*already exists on.*/double/Ip')
if [[ ${repeat} == *double* ]]; then outapi ; fi
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
echo "Создание триггера: $triggeridslaves"
errorMessage="";json="";result="";check="" # Очистка переменных
fi

outapi # Запустим блок Выхода


graphcreatezbxapi.sh

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

#!/bin/bash

#2022/01/18 v1.0 test
# Автор Мамзиков Артём Андреевич Описание по скрипту https://diyit.ru/viewtopic.php?t=1946

# Входные атрибуты
# IP или DNS узла по умолчанию
HOSTCONN=$1
# Имя узла сети
HOSTHOST=$2
# Видимое имя
HOSTNAME=$3

# График > Объект графика https://www.zabbix.com/documentation/6.0/ru/manual/api/reference/graph/object
# Данные по умолчанию отмечены *
# Входные данные для графиков:
# Имя Графика
namegraph=$4
# Ширина 900*
widthgraph=${5:-900}
# Высота 200*
heightgraph=${6:-200}
# Тип графика (0*-нормальный; 1-стэкируемый; 2-круговой; 3-расширенный)
graphtypegraph=${7:-0}
# Отображать легенду (0-скрыть, 1*-показать)
show_legendgraph=${8:-1}
# Отображать рабочее время (0-скрыть, 1*-показать)
show_work_periodgraph=${9:-1}
# Отображать триггеры (0-скрыть; 1*-показать)
show_triggersgraph=${10:-1}
# Процентная линия (слева) 0* (только для нормального графика)
percent_leftgraph=${11:-0}
# Процентная линия (справа) 0* (только для нормального графика)
percent_rightgraph=${12:-0}
# 3D для Кругового (0*-2D, 1-3D)
show_3dgraph=${13:-0}
# Метод вычисления минимального значения оси Y (0*-вычисляемое; 1-фиксированное; 2-элемент данных)
ymin_typegraph=${14:-0}
# МИН значение оси Y 0*
yaxismingraph=${15:-0}
# ID элемента данных, который используется как минимальное значение оси Y.
ymin_itemidgraph=${16}
# Метод вычисления максимального значения оси Y (0*-вычисляемое; 1-фиксированное; 2-элемент данных)
ymax_typegraph=${17:-0}
# МАКС значение оси Y фиксированое 100*
yaxismaxgraph=${18:-100}
# ID элемента данных, который используется как максимальное значение оси Y.
ymax_itemidgraph=${19}
# Для запросов:
# graphid - ID графика,
# flags - Происхождение графика 0*-простой график 4-обнаруженный график,
# templateid - ID родительского графика из шаблона

# Элемент графика > Объект элемента графика https://www.zabbix.com/documentation/6.0/ru/manual/api/reference/graphitem/object
# Элементы данных:
# Имя Элемента данных
# ID элемента данных
itemidgraph=${20}
# Функция (7-все; 1-мин; 2*-сред; 4-макс; 9-последнее значение для круговых и расширенных)
calc_fncgraph=${21:-2}
# Стиль отрисовки (0*-Линия; 1-Заполнение; 2-Жирная линия; 3-Точечная линия; 4-Пунктирная линия; 5-Градиентная линия)
drawtypegraph=${22:-0}
# Расположение оси (0*-По левой стороне; 1-По правой стороне)
yaxissidegraph=${23:-0}
# Цвет (шестнадцатеричного кода цвета пример: 6C59DC)
colorgraph=${24}
# Позиция (порядок) элемента(ов) в графике с 0 и увеличиывается на один с каждым элементом.
sortordergraph=${25}
# Тип элемента графика 0*-простой; 2-сумма графика, для круговых и расширенных.
typegraph=${26:-0}
# ID графика, которому принадлежит элемент графика
graphidgraph=${27}
# Для запроса: gitemid - ID элемента графика

#***********************************************************************
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111' # Или localhost 127.0.0.1
zabbixUsername='Admin'
zabbixPassword='zabbix'
#Конец пользовательских переменных
#***********************************************************************

header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"

function exit_with_error() {
  echo '**********************************'
  echo -e "\033[31m $errorMessage "
  echo '----------------------------------'
  echo -e "\033[32m" 'Сформированная Команда выполнения:'
  echo '----------------------------------'
  echo  curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl
  echo '----------------------------------'
  echo -e "\033[33m" 'Выходные данные'
  echo '----------------------------------'
  echo "$result"
  echo -e "\033[0m" '**********************************'"\n"
  zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTHOST}" -k apitriggercreateerror -o "ERROR $errorMessage Команда выполнения: curl --silent --show-error --insecure --header $header --data $json $zabbixApiUrl Результат $result"
}


#------------------------------------------------------
# Аутентификация пользователя. https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/login
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить токен авторизации Zabbix'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\"},\"id\": 1 }`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
auth=$(echo "${result}" |sed -e 's|.*result":"||' -e 's/","id.*//g')
check=$(echo "${auth}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&exit 1 ; fi
echo "Вход в систему выполнен успешно - Идентификатор авторизации: $auth"
errorMessage="";json="";result="";check="" # Очистка переменных


function outapi(){
#------------------------------------------------------
# Выход из zabbix https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/logout
#------------------------------------------------------
# Выполнение выхода из API.
errorMessage='*ERROR* - Не удалось выйти из системы'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.logout\",\"params\": [],\"id\": 1, \"auth\": \"$auth\"}`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
logout=$(echo "${result}" |sed -e 's|.*result":||' -e 's/,"id.*//g')
check=$(echo "${logout}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo 'Успешно вышел из Zabbix' "${logout}"
errorMessage="";json="";result="";check="" # Очистка переменных
exit 1
}


# Запрос информации об авторизовавшемся пользователе
#usinfo=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\",\"userData\": true},\"id\": 1 }`
#infouser=`curl --silent --show-error --insecure --header $header --data "$usinfo" $zabbixApiUrl`
#echo "${infouser}"


#------------------------------------------------------
# Получение  графики  в соответствии с заданными параметрами https://www.zabbix.com/documentation/current/ru/manual/api/reference/graph/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается проверить график'
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.get\",\"params\": {\"output\": [\"graphids\",\"name\"],\"filter\": {\"host\": \"$HOSTHOST\",\"name\": \"$namegraph\"}},\"auth\":\"$auth\", \"id\": 1 }"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
# Поиск графика
checkgraphids=$(echo -e "${result}"|
egrep -i 'graphid":"[0-9]+"'|sed 's|.*result":||'|sed 's/,"id.*//g'|sed 's|.*name":"||'|sed 's/"}].*//g')
echo -e "Найденые графики:" "${result}"
#echo "Находим строку по соответствию" $checkgraphids
if [[ "$namegraph" == "$checkgraphids" ]]; then echo "График существует:" $namegraph &&outapi ; fi # Если график существует завершаем цикл скрипта
errorMessage="";json="";result="";check="" # Очистка переменных

#Если график уже есть с таким именем?
#	Сравнить тип:
#		Если одинаковый:
#			1.Обновить: старые элементы оставить(которые не совпадают), которые совпали обновить и добавить новые.
#			2.Обновить: старые элементы оставить(которые не совпадают), которые совпали необновлять и добавить новые.
#			3.Обновить: Удалить старые (которые не совпадают), которые совпали обновить и добавить новые.
#			4.Создать новый график с другим именем.
#		Если тип разный:
#			4.Создать новый график с другим именем.
# 5.Удалить и создать новый
# 6.Ничего не делать, просто выйти


itemnum=0 # Начало подсчета кол-ва элементов
# Получение количества элементов для графика, делим через ;
IFS=';' read -ra sumdir < <(echo "${itemidgraph}")
# Печать разделенной строки
for idelemet in "${sumdir[@]}"
do
let "stnum += 1" # Для выбора столбцов начало с 1 
# Функция (7-все; 1-мин; 2*-сред; 4-макс; 9-последнее значение для круговых и расширенных)
fncgraph=$(echo "${calc_fncgraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
if [[ "$fncgraph" == "" ]]; then fncgraph=$(echo "${calc_fncgraph}"|sed 's/[;]/\t/g'| awk '{ print $1 }'); fi # Берем первое значение или одно которое есть
if [[ "$fncgraph" == "" ]]; then fncgraph="2" ; fi # Если переменная пустая присваиваем поумолчанию 2
# Стиль отрисовки (0*-Линия; 1-Заполнение; 2-Жирная линия; 3-Точечная линия; 4-Пунктирная линия; 5-Градиентная линия)
wtypegraph=$(echo "${drawtypegraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
if [[ "$wtypegraph" == "" ]]; then wtypegraph=$(echo "${drawtypegraph}"|sed 's/[;]/\t/g'| awk '{ print $1 }'); fi # Берем первое значение или одно которое есть.
if [[ "$wtypegraph" == "" ]]; then wtypegraph="0" ; fi # Если переменная пустая присваиваем поумолчанию 0
# Расположение оси (0*-По левой стороне; 1-По правой стороне)
xissidegraph=$(echo "${yaxissidegraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
if [[ "$xissidegraph" == "" ]]; then xissidegraph=$(echo "${yaxissidegraph}"|sed 's/[;]/\t/g'| awk '{ print $1 }'); fi # Берем первое значение или одно которое есть.
if [[ "$xissidegraph" == "" ]]; then xissidegraph="0" ; fi # Если переменная пустая присваиваем поумолчанию 0
# Цвет (шестнадцатеричного кода цвета пример: 6C59DC)
colorsitem=$(echo "${colorgraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
#if [[ "$colorsitem" == "" ]]; then xissidegraph=$(echo "${colorgraph}"|sed 's/[;]/\t/g'| awk '{ print $1 }'); fi # Берем первое значение или одно которое есть и получим один цвет всех элементов.
if [[ "$colorsitem" == "" ]]; then 
# Если переменная пустая присваиваем Рандомный цвет
# Рандомные цвета для элементов Нужно получить 6 символов
count=1 # Начало диапазона
while [ $count -le 6 ] # Выполняем если меньше или равно 6
do
#echo "Цикл чисел:" $count
    randnum=$RANDOM
    let "randnum %= 16"  # Ограничение от 0 до 15 , деление по модулю и запись в переменую
    #echo "Рандомное число:" $randnum
	case $randnum in
	    10)
	    randnum="A"
	    ;;
	    11)
	    randnum="B"
	    ;;
	    12)
	    randnum="C"
	    ;;
	    13)
	    randnum="D"
	    ;;
	    14)
	    randnum="E"
	    ;;
	    15)
	    randnum="F"
	    ;;
	    *)
	    ;;
	esac
colorscod=$colorscod"$randnum"
let "count += 1"
done
#colorsitem="#"$colorscod
colorsitem=$colorscod
colorscod=""
#echo $colorsitem # Проверить https://www.rapidtables.com/web/color/RGB_Color.html
fi
# Позиция (порядок) элемента(ов) в графике с 0 и увеличиывается на один с каждым элементом.
sortedgraph=$(echo "${sortordergraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
if [[ "$sortedgraph" == "" ]]; then sortedgraph=$itemnum ;fi # Присваиваем порядковый номер элемента начиная с 0

# Формируем строку для типа нормальный, стэкируемый
listitem=$listitem"$enumeration{\"itemid\": \"$idelemet\",\"calc_fnc\": $fncgraph,\"drawtype \": $wtypegraph,\"yaxisside\": $xissidegraph,\"color\": \"$colorsitem\",\"sortorder\": \"$sortedgraph\"}"
enumeration=","

# Тип элемента графика 0*-простой; 2-сумма графика, для круговых и расширенных.
graptype=$(echo "${typegraph}"|sed 's/[;]/\t/g'| awk -v i=$stnum '{ print $i }')
if [[ "$graptype" == "" ]]; then graptype=$(echo "${typegraph}"|sed 's/[;]/\t/g'| awk '{ print $1 }'); fi # Берем первое значение или одно которое есть.
if [[ "$graptype" == "" ]]; then graptype="0" ; fi # Если переменная пустая присваиваем поумолчанию 0
# Формируем строку для типа круговых, расширенных
listitemcircleexp=$listitemcircleexp"$enumerationexp{\"itemid\": \"$idelemet\",\"type\": $graptype,\"calc_fnc\": $fncgraph,\"color\": \"$colorsitem\",\"sortorder\": \"$sortedgraph\"}"
enumerationexp=","

let "itemnum += 1" # Номер элемента подсчет
done

echo $listitem
echo $listitemcircleexp

#------------------------------------------------------
# Создание графика https://www.zabbix.com/documentation/current/ru/manual/api/reference/graph/create
#------------------------------------------------------
if [[ "${namegraph}" != "" ]]; then
errorMessage='*ERROR* - Не удается создать график'

# МИН значение оси Y (0*-вычисляемое; 1-фиксированное; 2-элемент данных)
if [[ "${ymin_typegraph}" != "" ]]; then
if [[ ${ymin_typegraph} == 2 ]]; then ymin_typegraph=2,\"yaxismin\": $yaxismingraph
elif [[ ${ymin_typegraph} == 1 ]]; then ymin_typegraph=1,\"ymin_itemid\": $ymin_itemidgraph
else ymin_typegraph=0; fi
fi
# МАКС значение оси Y
if [[ "${ymax_typegraph}" != "" ]]; then
if [[ ${ymax_typegraph} == 2 ]]; then ymax_typegraph=2,\"yaxismax\": $yaxismaxgraph
elif [[ ${ymax_typegraph} == 1 ]]; then ymax_typegraph=1,\"ymax_itemid\": $ymax_itemidgraph
else ymax_typegraph=0; fi
fi

# Тип графика Нормальный
if [[ ${graphtypegraph} == 0 ]]; then
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.create\",\"params\":\
{\"name\": \"$namegraph\",\
\"width\": $widthgraph,\
\"height\": $heightgraph,\
\"graphtype\": $graphtypegraph,\
\"show_legend\": $show_legendgraph,\
\"show_work_period\": $show_work_periodgraph,\
\"show_triggers\": $show_triggersgraph,\
\"percent_left\": $percent_leftgraph,\
\"percent_right\": $percent_rightgraph,\
\"ymin_type\": $ymin_typegraph,\
\"ymax_type\": $ymax_typegraph,\
\"gitems\": [$listitem]},\
\"auth\":\"$auth\", \"id\": 1 }"
fi

# Тип графика стэкируемый
if [[ ${graphtypegraph} == 1 ]]; then
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.create\",\"params\":\
{\"name\": \"$namegraph\",\
\"width\": $widthgraph,\
\"height\": $heightgraph,\
\"graphtype\": $graphtypegraph,\
\"show_legend\": $show_legendgraph,\
\"show_work_period\": $show_work_periodgraph,\
\"show_triggers\": $show_triggersgraph,\
\"ymin_type\": $ymin_typegraph,\
\"ymax_type\": $ymax_typegraph,\
\"gitems\": [$listitem]},\
\"auth\":\"$auth\", \"id\": 1 }"
fi

# Тип графика круговой
if [[ ${graphtypegraph} == 2 ]]; then
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.create\",\"params\":\
{\"name\": \"$namegraph\",\
\"width\": $widthgraph,\
\"height\": $heightgraph,\
\"graphtype\": $graphtypegraph,\
\"show_legend\": $show_legendgraph,\
\"show_3d\": $show_3dgraph,\
\"gitems\": [$listitemcircleexp]},\
\"auth\":\"$auth\", \"id\": 1 }"
fi

# Тип графика расширенный
if [[ ${graphtypegraph} == 3 ]]; then
json="{\"jsonrpc\": \"2.0\",\"method\":\"graph.create\",\"params\":\
{\"name\": \"$namegraph\",\
\"width\": $widthgraph,\
\"height\": $heightgraph,\
\"graphtype\": $graphtypegraph,\
\"show_legend\": $show_legendgraph,\
\"show_3d\": $show_3dgraph,\
\"gitems\": [$listitemcircleexp]},\
\"auth\":\"$auth\", \"id\": 1 }"
fi

result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
graphids=$(echo "${result}" |sed -e 's|.*result":{"graphids":\["||' -e 's/\"]},"id.*//g')
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
echo "Создание графика: $graphids"
errorMessage="";json="";result="";check="" # Очистка переменных
fi
outapi # Запустим блок Выхода
количество слов: 2866
Партнёрская ссылка на Хостинг Beget https://beget.com/p937243
Ответить Вложения 1 Пред. темаСлед. тема

Вернуться в «API Zabbix»