Я понимаю, как работает Nagios, он периодически опрашивает состояние системы. Например, он может каждую минуту проверять наличие некоторых файлов или доступность какой-либо веб-страницы.
Но как насчет того, чтобы создавать предупреждения прямо из кода моего приложения? Допустим, пользователь пытается выполнить некоторую незаконную операцию, и я хочу получить от нее предупреждение.
Я мог бы, например, записать это событие в файл и настроить Nagios на периодический опрос этого файла. Это просто кажется косвенным способом сделать это. Зачем писать, опрашивать и анализировать файл в файловой системе, если я могу просто вызвать какой-либо интерфейс (REST, SOAP) с деталями предупреждения?
Есть ли что-нибудь, что позволяет мое приложение вызывает Nagios напрямую (или по какой-то причине это будет плохой дизайн)?
То, что вы ищете, - это концепция NAGIOS пассивные услуги, в сочетании с использованием NSCA
для статусных инъекций.
Сервис пассивный, то есть NAGIOS никогда не будет его опрашивать. Вы запускаете демон NSCA на сервере NAGIOS и вводите информацию о статусе от клиента, вызывая ваше приложение send_nsca
. Когда NAGIOS получит эту информацию о состоянии, он выдаст предупреждение в соответствии с определениями службы.
Если вы настраиваете такую службу, рекомендуется включить для нее проверку актуальности, чтобы она запускалась примерно с удвоенной максимальной задержкой, которую вы когда-либо ожидали между последовательными инъекциями статуса, и чтобы средство проверки свежести сразу переходило к CRITICAL при вызове. Это будет означать, что если когда-либо внедрение статуса прервется, NAGIOS сообщит вам, что обновления перестали поступать.
Вы можете реализовать свой гипотетический пример с помощью комбинации пассивные проверки и нестабильные услуги.
Кроме того, как сказал Мэд Хэттер, обсуждение нестабильных сервисов не будет полным без проверка свежести.
Если вы настаиваете на использовании веб-API, возможно, в Категория API Nagios Exchange.