Linux zabbix监视器自定义脚本值

Linux zabbix监视器自定义脚本值,linux,bash,zabbix,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 [

我试图将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

请帮忙,
谢谢

尽管错误消息很奇怪(
接收值[200true]
“使脚本看起来像输出了奇怪的东西,尽管它确实不应该输出),但我发现
退出0的使用中存在问题

Zabbix不计算外部脚本/二进制文件的退出代码,它只读取标准输出。 将其更改为
echo 0
,使脚本将值打印到stdout,从而使其对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

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

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

请注意,它将仅输出HTTP响应代码,因此必须修改触发器,以检查Zabbix 2.2及更早版本的值是否为200-
#200
,以及2.4及更高版本的值是否为
200

此脚本发送到服务器的输出值存在数据类型冲突

您需要按以下方式更改脚本,
echo 0
echo 1
,而不是
退出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

问题系统的回报是什么<代码>curl-Ihttps://example.com/health_check.jsp 2> /dev/null | head-n1
-另外,您正在混合
echo
退出
。虽然您可能指的是
echo
,但在本例中,只输出HTTP响应代码会更简单。