2015-07-31 6 views
0

У меня есть написанный скрипт python, который попадает в URL-адрес моего приложения, которое находится за HAPROXY и возвращает версию приложения.Как интегрировать мой плагин python с nagios

Я хочу интегрировать этот скрипт/плагин с моим сервером nagios и отображать информацию о версии на nagios. Он решил бы две цели: проверить наличие и показать информацию о версии.

Цените любую помощь.

Спасибо, Анкит

ответ

1

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».

+0

Мой сценарий python точно такой же, как ваш, он принимает URL-адрес в качестве ввода, потому что мне нужно проверить статус для разных приложений в разных экземплярах позади HAPROXY на основе url (например, https: //abc-prod.mydomain .com/АРР/aboutme). Сценарий возвращает информацию о версии приложения. Экземпляры в VPC (AWS) и HAPROXY - единственный способ извне, поэтому я не могу использовать прямой IP-адрес экземпляров для мониторинга с сервера nagios. Итак, что мне нужно от nagios: 1. Чтобы передать URL-адрес в качестве параметра в свой скрипт python. 2. Отобразите информацию о версии на приборной панели nagios. –

+0

Редактированный пример скрипта для включения параметра url. –

+0

Прекрасно объяснил, он работал так, как я хотел! Спасибо большое! –

Смежные вопросы