2012-02-28 54 views
0

我有nagios警報設置通過jabber通過http鏈接到ack。是否可以從終端中檢測警報?

是否有可能有一個腳本,我可以從一個遠程工作站上的終端運行,將主機名作爲參數,並確認警報?

./ack主機名

的好處,而看似平凡,是一舉三得。首先,關閉Nagagios。其次,nagios http頁面可能需要10-20秒才能加載,所以我想在那裏節省時間。第三,避免使用較慢的鼠標+網絡界面+ Firefox /其他煩人的瀏覽器。

理想情況下,我想要一個腳本綁定到一個鍵盤快捷方式,只是簡單地提供最近的警報。最後,我想從遊戲杆,按鈕和其他任何東西取得輸入,並將一個連接到綁定到腳本的大紅色按鈕,以便我可以通過點擊按鈕來確認最近的nagios警報。 (如果按鈕的外殼上有一個屏幕,顯示警報的文字變得很快就會發出笑聲,這也可能不起作用)

盡情地嘲笑我,但這實際上是對我有用的東西。如果每次警報可以節省五秒鐘,並且每天收到200條警報,我需要確認,這樣每天可以節省15分鐘。系統管理員不能自動化可以自動化的東西嗎?

謝謝!

回答

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

您只需將主機作爲參數,腳本就會顯示破裂服務。

+0

用整個腳本編輯過的文章 – 2012-02-28 22:45:48

+0

完全沒有!我只是緩慢的哈哈。我也意識到我應該在服務器故障上發佈這個。我假設你從nagios服務器運行腳本?我希望能從遠程工作站上運行一些東西,但我應該澄清這一點。 – 2012-03-01 18:02:09

+0

是的,從nagios服務器。您可以在遠程主機上使用ssh執行相同的操作:'ssh nagios-server/path/to/executable/script.py' – 2012-03-01 21:57:41