我正在尝试为 nagios 创建一个插件(使用 python),它将从远程服务器获取 json 文件,然后根据该文件的内容生成警报。
该特定文件实际上是从单独的监控系统生成的警报,因此我的目标是通过轮询来自其他系统的警报来生成 nagios 通知。
假设 json 文件可以包含三个警报,我希望我的脚本生成三个不同的警报条目。
到目前为止,我的脚本中有一个循环,用于检查脚本中是否至少有一个警报,如果有,它将打印警报名称并以状态代码二 (2) 退出,因此它可以向 nagios 指示 CRITICAL。
data = urllib2.urlopen("http://127.0.0.1:880").read()
alerts = json.loads(data)
if len(alerts["data"]) == 0:
exit(0)
else:
print "Alerts: "
for alert in alerts["data"]:
print " " + alert["labels"]["alertname"]
exit(2)
是否可以使用单个脚本在 nagios 上生成多个警报?
我的意思是,如果您只能有一个退出代码,那么您怎么能生成多个不同的警报呢?
答案1
Nagios 服务检查将仅生成单个警报。如您所知,除了打印的文本消息外,您还可以通过退出代码来控制这一点。
如果您想使用单个脚本生成多个不同的警报,您可以修改脚本以采用附加参数来指定警报名称/ID 或可用于匹配警报的任何字段。然后,您可以定义多个服务以使用相同的检查脚本/命令,但使用不同的参数。
答案2
您不能使用单个主动服务检查来生成多个警报/通知。
但是:你可以通过将被动检查设置为易失性来伪造这一点。这样,你提交的每个不合格检查结果都会生成警报。
然后,您将使用 NSCA/NRDP/equivalent 让您的脚本一次提交一个被动结果。