значение настраиваемого скрипта монитора zabbix

Я попытался настроить zabbix для отслеживания значения из моего скрипта,

Но zabbix возвращает ошибку:

Received value [200true] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

сценарий:

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2);
if [ $status = "200" ]; then
    exit 0
else
    echo 1
fi

Конфигурация Zabbix:

key - system.run[/zabbix_scripts/myscript.sh]
key type of information - numeric (unsigned)
key data type - decimal
trigger - {sso:system.run[/zabbix_scripts/myscript.sh].last()}=1

Я делал это раньше, но как-то этот скрипт не работает с zabbix.

Пожалуйста, помогите, спасибо!


person Community    schedule 05.09.2016    source источник
comment
Что это дает проблемной системе? curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 - также вы смешиваете echo и exit. Хотя вы, вероятно, имели в виду echo, в этом случае было бы проще вывести только код ответа HTTP.   -  person Richlv    schedule 05.09.2016


Ответы (3)


Хотя было бы интересно узнать, почему у вас такой неработающий вывод, я бы предложил изменить весь ваш скрипт на это:

curl -s -I -o /dev/null -w "%{http_code}" https://example.com/health_check.jsp

Обратите внимание, что он будет выводить только код ответа HTTP, поэтому ваш триггер нужно будет изменить, чтобы проверить, не является ли значение 200 - #200 для Zabbix 2.2 и ранее, <>200 для 2.4 и новее.

person Richlv    schedule 05.09.2016

Хотя сообщение об ошибке выглядит странно ("Received value [200true]" выглядит так, как будто сценарий выводит что-то странное, хотя на самом деле этого не должно быть), я вижу проблему в использовании exit 0.

Zabbix не оценивает коды выхода внешних скриптов / двоичных файлов, он только читает стандартный вывод. Измените его на echo 0, чтобы сценарий выводил значение на стандартный вывод, таким образом делая его видимым для zabbix, например:

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2)
if [[ $status = "200" ]]; then
    echo 0
else
    echo 1
fi
person Jiri Valenta    schedule 05.09.2016

Выходные значения, отправленные этим сценарием на сервер, имеют конфликты типов данных.

Вам необходимо изменить сценарий, как показано ниже, echo 0 или echo 1, вместо exit 0.

Если статус 200, на выходе будет 0, если 1, вы можете вызвать предупреждение.

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2);
if [ $status = "200" ]; then
    echo 0
else
    echo 1
fi
person kranthi.kumar    schedule 07.11.2016