0

我已将 nagios 警报设置为通过带有 http 链接的 jabber 来确认。

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

./ack 主机名

好处,虽然看似平凡,却是三重的。首先,从 nagios 中移除 http 负载。其次,nagios http 页面可能需要 10-20 秒才能加载,所以我想在那里节省时间。第三,避免使用鼠标+网络界面+火狐/其他令人讨厌的慢速浏览器。

理想情况下,我想要一个绑定到键盘快捷键的脚本,它只是简单地确认最近的警报。最后,我想从操纵杆、按钮和诸如此类的东西中获取输入,并将一个连接到绑定到脚本的一个大红色按钮,这样我就可以通过点击按钮来确认最新的 nagios 警报大声笑。(如果按钮在外壳上有一个屏幕显示警报文本得到确认,那也太棒了,哈哈)

随便取笑我,但这实际上对我有用。如果我可以为每个警报节省 5 秒,并且我每天需要 ack 收到 200 个警报,那么我每天可以节省 15 分钟。系统管理员的重点不就是自动化可以自动化的东西吗?

谢谢!

4

1 回答 1

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"))

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

于 2012-02-28T20:48:00.633 回答