是否有可能从终端发出nagios警报?

时间:2012-02-28 20:18:26

标签: scripting nagios

我设置了nagios警报,通过jabber与http链接到ack。

是否有可能从远程工作站上的终端运行脚本,该终端将主机名作为参数并确认警报?

./ ack hostname

这种好处虽然看似平凡,却是三倍的。首先,关闭nagios的http加载。其次,nagios http页面最多可能需要10-20秒才能加载,因此我希望节省时间。第三,避免慢速使用鼠标+ web界面+ firefox /其他烦人的浏览器。

理想情况下,我希望一个绑定到键盘快捷键的脚本可以简单地获取最新的警报。最后,我想从操纵杆,按钮和诸如此类的东西中获取输入,并将一个连接到一个绑定到脚本的大红色按钮,这样我就可以通过点击按钮lol来获取最新的nagios警报。 (如果按钮的外壳上有一个屏幕显示警报的文字被取消了,那也会是rad)lol)

取笑你想要的一切,但这实际上对我有用。如果我每个警报可以节省五秒钟,而且我每天收到200个警报,我需要确认,这样每天可以节省15分钟。并不是系统管理员能够自动化自动化的全部内容吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,可以通过解析/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"))

您只需将主机作为参数,脚本将显示损坏的服务。