我已经设置了nagios警报,通过jabber发送,并带有指向ack的http链接。
有没有可能有一个脚本我可以从远程工作站上的终端运行,它将主机名作为参数并确认警报?
/ack主机名
好处虽然看似平凡,却有三重。首先,从nagios中删除http负载。其次,nagios http页面可能需要10-20秒的加载时间,所以我想在那里节省时间。第三,避免使用鼠标+网络界面+firefox/其他速度较慢的浏览器。
理想情况下,我想要一个绑定到键盘快捷键的脚本,只需确认最近的警报。最后,我想从操纵杆、按钮等获取输入,并将其中一个连接到绑定到脚本的红色大按钮上,这样我就可以通过点击按钮lol来确认最新的nagios警报
你想怎么取笑我就怎么取笑我,但这实际上对我很有用。如果我每次提醒能节省5秒,每天能收到200个需要确认的提醒,那我每天就能节省15分钟。系统管理员的全部目的不是自动化可以自动化的东西吗?
谢谢!
是的,可以通过解析/var/lib/nagios3/retention.dat
文件来确认nagios。
参见:
#!/usr/bin/env python
# -*- coding: utf8 -*-
# vim:ts=4:sw=4
import sys
file = "/var/lib/nagios3/retention.dat"
try:
sys.argv[1]
except:
print("Usage:n"+sys.argv[0]+" <HOST>n")
sys.exit(1)
f = open(file, "r")
line = f.readline()
c=0
name = {}
state = {}
host = {}
while line:
if "service_description=" in line:
name[c] = line.split("=", 2)[1]
elif "current_state=" in line:
state[c] = line.split("=", 2)[1]
elif "host_name=" in line:
host[c] = line.split("=", 2)[1]
elif "}" in line:
c+=1
line = f.readline()
for i in name:
num = int(state[i])
if num > 0 and sys.argv[1] == host[i].strip():
print(name[i].strip("n"))
您只需将主机作为参数,脚本就会显示中断的服务。