zabbix监视器自定义脚本值

时间:2016-09-05 16:52:08

标签: linux bash 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。

请帮忙, 谢谢!

3 个答案:

答案 0 :(得分:1)

虽然找出为什么会出现如此糟糕的输出会很有趣,但我建议将整个脚本更改为:

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

请注意,它只会输出HTTP响应代码,因此必须修改您的触发器以检查Zabbix 2.2及更早版本的值不是200 - #200,而对于2.4和<>200后面。

答案 1 :(得分:0)

虽然错误消息很奇怪(“"~:D"”使得它看起来像脚本输出一些奇怪的东西,即使它确实不应该),但我发现Received value [200true]的使用存在问题。

Zabbix不评估外部脚本/二进制文件的退出代码,它只读取标准输出。 将其更改为exit 0以使脚本将值打印到stdout,从而使其对zabbix可见,例如:

echo 0

答案 2 :(得分:0)

此脚本发送到服务器的输出值具有数据类型冲突。

您需要更改下面的脚本,echo 0echo 1exit 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