witre nagios plugin with python
2013-02-15 15:39
274 查看
Our Solarwinds Network Performance Monitor has a problem rendering custom reports on occasion. For something like that, there isn't an existing plugin for Nagios. Writing these plugins is easy. All there is to it is exit statuses. After reading this, you should
have an idea of how to write a Nagios plugin for a variety of web applications.
To use our plugin, we need to do a bit of Nagios configuration. First, we need to define a command.
After that, we define a service.
have an idea of how to write a Nagios plugin for a variety of web applications.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!/usr/bin/env python from mechanize import Browser from optparse import OptionParser # Exit statuses recognized by Nagios UNKNOWN = -1 OK = 0 WARNING = 1 CRITICAL = 2 def open_url(br, url): """Use a given mechanize.Browser to open url. If an exception is raised, then exit with CRITICAL status for Nagios. """ try: response = br.open(url) except Exception, e: # Catching all exceptions is usually a bad idea. We want to catch # them all to report to Nagios here. print 'CRITICAL - Could not reach page at %s: %s' % (url, e) raise SystemExit, CRITICAL return response # I'm going to be using optparse.OptionParser from now on. It makes # command-line args a breeze. parser = OptionParser() parser.add_option('-H', '--hostname', dest='hostname') parser.add_option('-u', '--username', dest='username') parser.add_option('-p', '--password', dest='password') parser.add_option('-r', '--report_url', dest='url', help="""Path to report relative to root, like /NetPerfMon/Report.asp?Report=Hostname+__+IPs""") parser.add_option('-v', '--verbose', dest='verbose', action='store_true', default=False) parser.add_option('-q', '--quiet', dest='verbose', action='store_false') options, args = parser.parse_args() # Check for required options for option in ('hostname', 'username', 'password', 'url'): if not getattr(options, option): print 'CRITICAL - %s not specified' % option.capitalize() raise SystemExit, CRITICAL # Go to the report and get a login page br = Browser() report_url = 'https://%s%s' % (options.hostname, options.url) open_url(br, report_url) br.select_form('aspnetForm') # Solarwinds has interesting field names # Maybe something with asp.net br['ctl00$ContentPlaceHolder1$Username'] = options.username br['ctl00$ContentPlaceHolder1$Password'] = options.password # Attempt to login. If we can't, tell Nagios. try: report = br.submit() except Exception, e: print 'CRITICAL - Error logging in: e' % e raise SystemExit, CRITICAL report_html = report.read() # class=Property occurs in every cell in a Solarwinds report. If it's not # there, something is wrong. if 'class=Property' not in report_html: print 'CRITICAL - Report at %s is down' % report_url raise SystemExit, CRITICAL # If we got this far, let's tell Nagios the report is okay. print 'OK - Report at %s is up' % report_url raise SystemExit, OK |
define command{ command_name check_npm_reports command_line /usr/local/bin/reportmonitor.py -H $HOSTADDRESS$ $ARG1$ }
After that, we define a service.
define service{ use generic-service host_name solarwinds-server service_description Solarwinds reports check_command check_npm_reports!-u nagios -p some_password -r '/NetPerfMon/Report.asp?Report=Hostname+__+IPs' }
相关文章推荐
- nagios通过python获取ESXi硬盘SMART信息
- How I Made Porn 20x More Efficient with Python
- python的with用法
- [翻译]Python with 语句
- python with..as
- 机器学习: Python with Recurrent Neural Network
- Python programming with goto
- pip install mysql-python fails with EnvironmentError: mysql_config not found
- [zz]python with语句的注解
- 【LeetCode with Python】 Candy
- 【LeetCode with Python】 Simplify Path
- python operate excel with pywin com
- <Test-Driven Development with Python>学习笔记 第一部分 测试驱动开发基础
- python with 语句研究
- 出现Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build*解决办法
- 检查resin的gc相关log的脚本(nagios插件版)-python
- MapReduce with MongoDB and Python
- Make Games with Python & Pygame (4)
- 关于Plugin with id 'com.github.dcendents.android-maven' not found.问题解决
- Make Games with Python & Pygame (5)