我尝试配置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。
请帮忙, 谢谢!
答案 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 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