Можно ли подтверждать оповещения nagios из терминала? - PullRequest
0 голосов
/ 29 февраля 2012

У меня настроены оповещения nagios для прохождения через jabber с http-ссылкой на ack.

Возможно, существует сценарий, который я могу запустить с терминала на удаленной рабочей станции, который принимает имя хоста в качестве параметра и подтверждает предупреждение?

. / Ack имя_хоста

Преимущества, хотя и кажутся обыденными, в три раза.Во-первых, снимите http с nagios.Во-вторых, http-страницы nagios могут загружаться до 10-20 секунд, поэтому я хочу сэкономить там время.В-третьих, избегая медленного использования мыши + веб-интерфейса + firefox / другого раздражающе медленного браузера.

В идеале, я бы хотел, чтобы скрипт был привязан к сочетанию клавиш, который просто подтверждает последнее предупреждение.Наконец, я хочу взять входные данные с джойстика, кнопок и еще чего-нибудь, и подключить их к большой красной кнопке, привязанной к сценарию, чтобы я мог просто подтвердить последнее предупреждение nagios, нажав кнопку lol.(Было бы неплохо, если бы у кнопки был экран на корпусе, на котором отображался текст оповещения о том, что он получил подтверждение, смеется)

Высмеивайте меня сколько хотите, но на самом деле это то, что было бы полезномне.Если я могу сэкономить пять секунд на каждое предупреждение и получать 200 предупреждений в день, мне нужно подтверждать, это экономит мне 15 минут в день.И разве не в этом смысл сисадмина автоматизировать то, что можно автоматизировать?

Спасибо!

1 Ответ

1 голос
/ 29 февраля 2012

Да, можно проверить nagios, проанализировав файл /var/lib/nagios3/retention.dat.

См .:

#!/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"))

Вы просто должны указать хост как параметр, и скрипт отобразит сломанные сервисы.

...