【问题标题】:zabbix monitor custom script valuezabbix监控自定义脚本值
【发布时间】:2016-09-05 16:52:08
【问题描述】:

我试图配置 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。

请帮忙, 谢谢!

【问题讨论】:

  • 这会在有问题的系统上返回什么? curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 - 另外,你正在混合 echoexit。虽然您可能指的是echo,但在这种情况下,只输出 HTTP 响应代码会更简单。

标签: linux bash zabbix


【解决方案1】:

虽然错误消息很奇怪(“Received value [200true]”使脚本看起来输出了一些奇怪的东西,尽管它确实不应该),但我发现exit 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      您需要将脚本更改为echo 0echo 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-07
        • 1970-01-01
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多