А мне нужно отключать некоторые действия например 1 четверг месяца или 7 число.
Скрипт можно запускать командой, кроном или еще чем-нибудь я решил сделать запуск из узла через шаблон.
ID - Действия можно скопировать из ссылки при открытия нужного действия, либо получить список через скрипт.
Авто-Включение Отключение Действий
Шаблон Макросы
{HOST.CONN} - IP-Узла
{HOST.HOST} - Имя-Узла
{HOST.NAME} - Имя-видимое
{$HOST.PORTS} - Порт (10050)
{$ACTIONSTATUS} - Действия: 0-Активация 1-Деактивация
{$ACTIONID} - ИД Действия можно несколько через ; перечислить.
Проверка скрипта
Код: Выделить всё
cd /usr/local/share/zabbix/externalscripts/
Код: Выделить всё
./action-trigger-off-on.sh 192.168.XXX.XXX "hostname" "" "10050" 1 "12;15"
Элементы данных
Ошибки API Авто-Включение Отключение Действий Триггеры 1 erroractionapi 90d Zabbix траппер Авто-Включение Отключение Действий Активировано
Ошибки API Не удалось изменить статус действия Триггеры 1 errorupdateactionapi 90d Zabbix траппер Авто-Включение Отключение Действий Активировано
Test Включения действий 12 и 15 action-trigger-off-on.sh[{HOST.CONN},{HOST.HOST},{HOST.NAME},{$HOST.PORTS},0,12;15] 10s 0d Внешняя проверка Авто-Включение Отключение Действий Деактивировано
Триггеры
Внимание/Предупреждение Ошибки API для Авто-Включение Отключение Действий {action-trigger-on-off:erroractionapi.str(ERROR)}=1 or {action-trigger-on-off:erroractionapi.iregexp(error)}=1 or {action-trigger-on-off:erroractionapi.diff(0)}=1 Активировано
Внимание/Предупреждение Ошибки API Не удалось изменить статус действия {action-trigger-on-off:errorupdateactionapi.iregexp(no id)}=1 Активировано
action-trigger-off-on.sh
Код: Выделить всё
#!/bin/bash
#***********************************************************************
# Автор: Артём Андреевич Мамзиков URL: https://diyit.ru/viewtopic.php?t=2242
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111' # Или localhost 127.0.0.1
zabbixUsername='Логин'
zabbixPassword='Пароль'
#Конец пользовательских переменных
#***********************************************************************
# Объявим входные переменные(variable) и если входная переменная пустая задаем дефолтные настройки для некоторых переменных
IP=$1
# Имя узла сети
HOSTHOST=$2
# Видимое имя
HOSTNAME=$3
# Порт
PORT=${4:-10050}
# 0-Активация 1-Деактивация Действия
ACTIONSTATUS=${5:-0}
# ИД Действия
ACTIONID=$6
#Пример команды: action-trigger-off-on.sh 192.168.175.111 test test 10050 1 "12;15"
#echo $IP $HOSTHOST $HOSTNAME $PORT $ACTIONSTATUS $ACTIONID >> actoins.log
# В определенное время по ID Действия, отключение и включение действий.
header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"
function exit_with_error() {
echo '**********************************'
echo -e "\033[1;31m""$errorMessage""\033[0m"
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 erroractionapi -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 -e "\033[1;42m""Вход в систему выполнен успешно - Идентификатор авторизации: $auth""\033[0m"
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 -e "\033[1;42m"'Успешно вышел из Zabbix' "${logout}""\033[0m"
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}"
function get_action(){
#------------------------------------------------------
# Получение Действий https://www.zabbix.com/documentation/4.2/ru/manual/api/reference/action/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается проверить Действия'
# json="{\"jsonrpc\": \"2.0\",\"method\":\"action.get\",\"params\": {\"output\": \"extend\",\"selectOperations\": \"extend\",\"selectFilter\": \"extend\",\"filter\": {\"eventsource\": 0},\"sortfield\": [\"actionid\"],\"auth\":\"$auth\", \"id\": 1 }"
json="{\"jsonrpc\": \"2.0\",\"method\":\"action.get\",\"params\": \
{\"output\": [\"actionid\",\"name\",\"status\"],\
\"filter\": {\"eventsource\": 0}},\
\"sortfield\": [\"actionid\"],\
\"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
# Собираем данные
actiontriggers=$(echo -e $result| sed 's/^{"jsonrpc":"2.0","result":\[//; s/\],"id":1}$//'| sed 's/{"actionid/\\n{"actionid/g')
# Получаем список действий (триггер) строками: ID Название Статус
#echo -e $actiontriggers
errorMessage="";json="";result="";check="" # Очистка переменных
}
function get_update(){
#------------------------------------------------------
# Обновление Действий https://www.zabbix.com/documentation/4.2/ru/manual/api/reference/action/update
#------------------------------------------------------
# Статус 0 - Активировано, 1 - Деактивировано
errorMessage='*ERROR* - Не удается Обновить Действие'
json="{\"jsonrpc\": \"2.0\",\"method\":\"action.update\",\"params\": \
{\"actionid\": $1,\
\"status\": $ACTIONSTATUS},\
\"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
# Собираем данные
actiontriggersupdate=$(echo -e $result| sed 's/^{"jsonrpc":"2.0","result"://; s/,"id":1}$//')
#echo -e $actiontriggersupdate
errorMessage="";json="";result="";check="" # Очистка переменных
}
# Цикл ID-действий
IFS=";"
for idact in $ACTIONID; do
# Обновление статуса Действия
get_update $idact
done
# Проверим соответствие обновления Действия
get_action
# Цикл ID-действий
IFS=";"
for check in $ACTIONID; do
# Проверяем наличие строки с использованием grep
if echo -e "$actiontriggers" | grep -q -i "\"actionid\":\"$check\".*\"status\":\"$ACTIONSTATUS\""; then
echo "Действие соответствует id: $check status: $ACTIONSTATUS"
else
zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTHOST}" -k errorupdateactionapi -o "no id:$check status:$ACTIONSTATUS"
fi
done
outapi