我在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
请问任何想法?
提前感谢您的帮助!
答案 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
的第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个令牌:
,50
"Receipt count in last 24 hours with status [Pending]
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"
以封闭"
,因为我认为如果没有它,我会得到意想不到的结果。尝试两种方式来确定。