監控思路:通過url通路某一接口檔案的具體傳回内容,正則比對某一接口存活必定含有的字元,若有則證明接口存活,若無則接口有問題。
廢話不多說,上插件:
<code>#!/usr/bin/env python</code>
<code># -*- coding: utf-8 -*-</code>
<code>import</code> <code>re</code>
<code>import</code> <code>urllib</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>getopt</code>
<code>def usage():</code>
<code> </code><code>print </code><code>""</code><code>"Usage: check_api [-h|--help] [-u|--url url] [-S|--Str String]</code>
<code>"</code>
<code>Url: the url that you want to check;</code>
<code>String: the string that you want to match;</code>
<code>For example,</code><code>#/usr/local/nagios/libexec/check_api -u 'http://xxx.com/ch1.ashx?jsoncallback=jQuery111104933076921983046_1479864376576&classid=12&systemtype=2&dataType=json&cityid=129&videoid=36065812&pageid=1&_=1479864376577' -S AdList</code>
<code>""</code><code>"</code>
<code> </code><code>sys.</code><code>exit</code><code>(3)</code>
<code>def getHtml(url):</code>
<code> </code><code>page = urllib.urlopen(url)</code>
<code> </code><code>html = page.</code><code>read</code><code>()</code>
<code> </code><code>return</code> <code>html</code>
<code>def getString(Str, html):</code>
<code> </code><code>matchObj = re.search(Str, html, re.M)</code>
<code> </code><code>if</code> <code>matchObj:</code>
<code> </code><code>print(</code><code>"GET API OK:get %s successfully!"</code> <code>% Str)</code>
<code> </code><code>sys.</code><code>exit</code><code>(0)</code>
<code> </code><code>elif</code> <code>not matchObj:</code>
<code> </code><code>print(</code><code>"GET API CRITICAL:the API was error!"</code><code>)</code>
<code> </code><code>sys.</code><code>exit</code><code>(2)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print(</code><code>"GET API UNKNOWN:the API was unknow!"</code><code>)</code>
<code> </code><code>sys.</code><code>exit</code><code>(3)</code>
<code>try:</code>
<code> </code><code>options, args = getopt.getopt(sys.argv[1:],</code>
<code> </code><code>"hu:S:"</code><code>,</code>
<code> </code><code>"--help --url= --Str="</code><code>,</code>
<code> </code><code>)</code>
<code>except getopt.GetoptError:</code>
<code> </code><code>usage()</code>
<code>for</code> <code>name, value </code><code>in</code> <code>options:</code>
<code> </code><code>if</code> <code>name </code><code>in</code> <code>(</code><code>"-h"</code><code>, </code><code>"--help"</code><code>):</code>
<code> </code><code>usage()</code>
<code> </code><code>if</code> <code>name </code><code>in</code> <code>(</code><code>"-u"</code><code>, </code><code>"--url"</code><code>):</code>
<code> </code><code>url = value</code>
<code> </code><code>if</code> <code>name </code><code>in</code> <code>(</code><code>"-S"</code><code>, </code><code>"--Str"</code><code>):</code>
<code> </code><code>Str = value</code>
<code>html = getHtml(url)</code>
<code>getString(Str, html)</code>
傳回結果:
<code>[root@M-WEB-065 ~]</code><code># /usr/local/nagios/libexec/check_api -u 'http://xxx.com/ch1.ashx?jsoncallback=jQuery111104933076921983046_1479864376576&classid=12&systemtype=2&dataType=json&cityid=129&videoid=36065812&pageid=1&_=1479864376577' -S AdList </code>
<code>GET API OK:get AdList successfully!</code>
一、上述插件在客戶機上部署,将此插件放入/usr/local/nagios/libexec/ 賦予可執行權限和屬主組,修改/usr/local/nagios/etc/nrpe.cfg配置檔案,添加
<code>command</code><code>[check_api]=</code><code>/usr/local/nagios/libexec/check_api</code> <code>-u </code><code>'http://xxx.com/ch1.ashx?jsoncallback=jQuery111104933076921983046_1479864376576&classid=12&systemtype=2&dataType=json&cityid=129&videoid=36065812&pageid=1&_=1479864376577'</code> <code>-S AdList</code>
重新開機nagios用戶端。
二、修改監控主機/usr/local/nagios/etc/objects/commands.cfg檔案,添加
<code>define </code><code>command</code><code>{</code>
<code> </code><code>command_name check_api</code>
<code> </code><code>command_line $USER1$</code><code>/check_api</code> <code>-u $ARG1$ -S $ARG2$</code>
<code> </code><code>}</code>
修改監控主機/usr/local/nagios/etc/objects/services.cfg檔案,添加
<code>##############################M-WEB-065 check_api#####################################</code>
<code>define service{</code>
<code> </code><code>host_name M-WEB-065</code>
<code> </code><code>service_description check_api</code>
<code> </code><code>check_command check_nrpe!check_api</code>
<code> </code><code>max_check_attempts 5</code>
<code> </code><code>normal_check_interval 5</code>
<code> </code><code>retry_check_interval 2</code>
<code> </code><code>check_period 24x7</code>
<code> </code><code>notification_interval 10</code>
<code> </code><code>notification_period 24x7</code>
<code> </code><code>notification_options u,c,r</code>
<code> </code><code>contact_groups yunwei</code>
<code>}</code>
最後重新開機nagios,檢視監控結果
<a href="http://s4.51cto.com/wyfs02/M02/8A/A0/wKiom1g1YHHQfSKQAAAngyVqCUQ707.png" target="_blank"></a>
本文轉自YU文武貝 51CTO部落格,原文連結:http://blog.51cto.com/linuxerxy/1875893,如需轉載請自行聯系原作者