是否可以从终端确认nagios警报



我已经设置了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"))

您只需将主机作为参数,脚本就会显示中断的服务。

最新更新