Я пытаюсь создать плагин (на python) для nagios, который будет извлекать файл json с удаленного сервера, а затем в соответствии с содержимым этого файла генерировать предупреждения.
Конкретный файл на самом деле представляет собой оповещения, генерируемые отдельной системой мониторинга, поэтому моя цель - генерировать уведомления nagios путем опроса оповещений из другой системы.
Предполагая, что файл json может содержать, скажем, три предупреждения, я бы хотел, чтобы мой скрипт генерировал три разных записи предупреждений.
Пока у меня есть цикл в моем скрипте, который проверяет, есть ли в скрипте хотя бы одно предупреждение, и если да, он напечатает имя предупреждения и выйдет с кодом состояния два (2), чтобы он мог указать КРИТИЧЕСКОЕ для nagios.
data = urllib2.urlopen("http://127.0.0.1:880").read()
alerts = json.loads(data)
if len(alerts["data"]) == 0:
exit(0)
else:
print "Alerts: "
for alert in alerts["data"]:
print " " + alert["labels"]["alertname"]
exit(2)
Можно ли с помощью одного скрипта создать несколько предупреждений для nagios?
Я имею в виду, если у вас может быть только один код выхода, как вы могли бы генерировать несколько разных предупреждений?
Проверка службы Nagios будет генерировать только одно предупреждение. Как вы знаете, вы можете контролировать это с помощью кода выхода в дополнение к печатному текстовому сообщению.
Если вы хотите использовать один сценарий для создания нескольких разных предупреждений, вы можете изменить свой сценарий, чтобы он принимал дополнительный параметр, чтобы указать имя / идентификатор предупреждения или любое другое поле, которое вы можете использовать для соответствия вашему предупреждению. Затем вы можете определить несколько служб для использования одного и того же скрипта / команды проверки, но с разными параметрами.
Вы не можете сгенерировать несколько предупреждений / уведомлений с помощью одной активной проверки службы.
Но: вы можете подделать это с помощью пассивной проверки, установленной на изменчивую. Таким образом, каждый отправленный вами результат проверки, не соответствующий требованиям, будет генерировать предупреждение.
Затем вы должны использовать эквивалент NSCA / NRDP /, чтобы ваш скрипт отправлял пассивные результаты по одному.