天天看點

nagios自定義監控API插件

  監控思路:通過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&amp;classid=12&amp;systemtype=2&amp;dataType=json&amp;cityid=129&amp;videoid=36065812&amp;pageid=1&amp;_=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&amp;classid=12&amp;systemtype=2&amp;dataType=json&amp;cityid=129&amp;videoid=36065812&amp;pageid=1&amp;_=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&amp;classid=12&amp;systemtype=2&amp;dataType=json&amp;cityid=129&amp;videoid=36065812&amp;pageid=1&amp;_=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,如需轉載請自行聯系原作者

繼續閱讀