" check_http_json.py" NAGIOS插件无效

时间:2015-10-22 15:59:33

标签: python json plugins nagios

我在Nagios服务器上安装了check_http_json.py(网址:https://github.com/drewkerrigan/nagios-http-json)来解析JSON输出&基于特定密钥设置规则。

JSON输出如下所示:

[{"key":"Key","value":"Value"},{"key":"Receipt count in last 24 hours with status [Disallowed], OCR status [Complete] and Matching status [N/A]","value":"8"},{"key":"Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]","value":"2"},{"key":"Last Execution for Notification Service ended","value":"10/21/2015 22:23:44PM"},{"key":"Last Execution for Payment Processor ended","value":"10/21/2015 22:23:45PM"},{"key":"Last Execution for Intelligent Offers ended","value":"10/21/2015 21:55:19PM"}]

在Nagios方面,当我运行以下命令检查json输出的可用性时;它起作用并返回结果:

命令:

/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local -p api/NOC/ValidateBackend

输出:

OK: Status OK

但是,当我运行以下命令检查以下密钥" Notification Service for Notification Service是否已结束"是否存在,

usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local -p api/NOC/ValidateBackend -e "Last Execution for Notification Service ended"

我得到了以下结果,尽管您在上面的JSON输出中看到密钥仍然存在:

WARNING: Status check failed, reason: Key Last Execution for Notification Service ended did not exist

当我运行以下命令验证密钥"收据是否在过去24小时内计数,状态为[待定],OCR状态[完成]和匹配状态[N / A]"值小于或等于50:

/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local:80 -p api/NOC/ValidateBackend  -l "Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]",50

我收到以下错误:

File "/usr/local/nagios/libexec/check_http_json.py", line 263, in <module>
is_alive, reason = processor.isAlive()
File "/usr/local/nagios/libexec/check_http_json.py", line 136, in isAlive
k, v = kv.split(',')
ValueError: too many values to unpack

请问任何想法?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

由于check_http_json.py的实施,这是一个限制。

您传入-l的值中有2个逗号。

"Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]",50

check_http_json.py

的第137行

它将整个字符串拆分为逗号(,)并且它期望只返回2个令牌:键(k)和值({{ 1}})。

v

然而,因为你的&#34;键&#34;有一个逗号,在逗号上拆分整个字符串(包括if self.rules.key_lte_list != None: for kv in self.rules.key_lte_list: k, v = kv.split(',') if (self.helper.lte(k, v) == False): reason += " Value %s was not less than or equal to value for key %s." % (v, k) 值部分)将返回3个令牌:

  • token1:,50
  • token2:"Receipt count in last 24 hours with status [Pending]
  • token3:OCR status [Complete] and Matching status [N/A]"

这就是您收到错误50的原因。 分手后它会期待2个代币,但它会得到3个。

一句话是,如果您想按原样使用此ValueError: too many values to unpack插件,则您的密钥中不能包含任何逗号。

编辑:(解决方法)

如果需要解决方法,可以修改check_http_json.py 使用不会出现在您的密钥中的其他分隔符来替换check_http_json.py的每个实例。例如: k, v = kv.split(',')

然后修改将参数传递给脚本的方式。不要使用逗号分隔键和值,而是使用类似k, v = kv.split('@')的内容。

@

注意:我移动了结尾双引号/usr/bin/python /usr/local/nagios/libexec/check_http_json.py -H datamgrqa.example.local:80 -p api/NOC/ValidateBackend -l "Receipt count in last 24 hours with status [Pending], OCR status [Complete] and Matching status [N/A]@50" 以封闭",因为我认为如果没有它,我会得到意想不到的结果。尝试两种方式来确定。