Edited обратиться комментарии
Чтобы использовать питон скрипт в качестве пользовательского Nagios плагин, ваш сценарий просто нужно следовать Nagios Plugin API. Важно, чтобы ваш скрипт вышел с правильным кодом возврата для состояния, о котором сообщается, что означает, что ваш скрипт python должен выйти с код возврата 0, если проверка сообщает, что все OK. Выход с Код возврата 2 для указания CRITICAL состояние. Вы также должны отформатировать вывод своего сценария в соответствии с Plugin Output Spec
Ниже приведен пример. Обратите внимание, что это только для ПРИМЕР целей и, возможно, не будет работать на вашем сайте, если только на вашем сайте не было такого же идентификатора div, что и stackoverflow.com;) (Обновлен, чтобы включить настраиваемый параметр URL.)
check_version.py
#!/usr/bin/env python
import re, sys, subprocess, shlex
from bs4 import BeautifulSoup
from optparse import OptionParser
def main():
usage = "usage: %prog [options]"
parser = OptionParser(usage)
parser.add_option("-u", "--url",
action="store", dest="url",
help="URL of host to check version number of.")
(options, args) = parser.parse_args()
# Make warning and critical command line arguments mandatory.
if options.url is None:
print "Incorrect usage. URL is mandatory."
parser.print_help()
sys.exit(3)
try:
url = options.url
curl_command = '/usr/bin/curl {url}'.format(url=url)
args = shlex.split(curl_command)
curl = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
(html_doc, err) = curl.communicate()
if err:
print "CRITICAL - ERROR connecting to url: %s | 'rev'='NA';;;;" % (str(err))
sys.exit(2)
soup = BeautifulSoup(html_doc, 'html.parser')
soup_svnrev = soup.find(id='svnrev')
if soup_svnrev is None:
print "CRITICAL - ERROR - Revision number could not be found on site! | 'rev'='NA';;;;"
sys.exit(2)
svnrev = soup_svnrev.get_text().strip()
rev_num = svnrev.split()[1]
print "OK. revision number = {rev_num} | 'rev_num'={rev_num};;;;".format(rev_num=rev_num)
sys.exit(0)
except Exception, e:
print "CRITICAL - Unexpected error: %s | 'rev'='NA';;;;" % (str(e))
sys.exit(2)
if __name__ == '__main__':
main()
с рабочего плагина сценарий Nagios, вам просто нужно добавить его как Nagios Command и, наконец, планировать его выполнение, определяя Nagios Service для него.
Edit с примером конфигурации
Конечно, вы должны настроить Nagios со всем Nagios будет необходимо выполнить проверку. Это означает, что вам необходимо определить хоста, службы, и определения команд в файле конфигурации Nagios, о котором знает ваша установка Nagios. Это может отличаться для каждой установки Nagios поэтому здесь я буду использовать /usr/local/nagios/etc/nagios.cfg как например, добавив следующие:
/USR/местные/Nagios/и т.д./Nagios.CFG
define host{
host_name stackoverflow
alias stackoverflow
address stackoverflow.com
check_command check-host-alive
check_interval 5
retry_interval 1
max_check_attempts 5
check_period 24x7
process_perf_data 0
retain_nonstatus_information 0
contacts nagiosadmin
notification_interval 30
notification_period 24x7
notification_options d,u,r
}
define service{
host_name stackoverflow
service_description check_version
check_command check_version!http://stackoverflow.com
max_check_attempts 5
check_interval 5
retry_interval 3
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,c,r
contacts nagiosadmin
}
define command{
command_name check_version
command_line /path/to/check_version.py -u "$ARG1$"
}
Если нет ошибок в сценарии, ваш скрипт «выполнить» разрешение, и нет никаких ошибок в конфигурации, вы должны быть в состоянии запустить проверку проверки на основной файл конфигурации Nagios :
nagios -v /usr/local/nagios/etc/nagios.cfg
Перезапустите сервер Nagios перезагрузить конфигурацию:
service nagios restart
И версию сайта должны быть видны при просмотре-услуги e для службы «check_version» узла «stackoverflow».
Мой сценарий python точно такой же, как ваш, он принимает URL-адрес в качестве ввода, потому что мне нужно проверить статус для разных приложений в разных экземплярах позади HAPROXY на основе url (например, https: //abc-prod.mydomain .com/АРР/aboutme). Сценарий возвращает информацию о версии приложения. Экземпляры в VPC (AWS) и HAPROXY - единственный способ извне, поэтому я не могу использовать прямой IP-адрес экземпляров для мониторинга с сервера nagios. Итак, что мне нужно от nagios: 1. Чтобы передать URL-адрес в качестве параметра в свой скрипт python. 2. Отобразите информацию о версии на приборной панели nagios. –
Редактированный пример скрипта для включения параметра url. –
Прекрасно объяснил, он работал так, как я хотел! Спасибо большое! –