天天看点

Zabbix使用Pycurl模块监控web页面状态

Zabbix使用Pycurl模块监控web页面状态

pycurl模块用法:

Zabbix使用Pycurl模块监控web页面状态

<code>c = pycurl.Curl()    </code><code>#创建一个curl对象 </code>

<code>c.setopt(pycurl.CONNECTTIMEOUT, 5)    </code><code>#连接的等待时间,设置为0则不等待  </code>

<code>c.setopt(pycurl.TIMEOUT, 5)           </code><code>#请求超时时间  </code>

<code>c.setopt(pycurl.NOPROGRESS, 0)        </code><code>#是否屏蔽下载进度条,非0则屏蔽  </code>

<code>c.setopt(pycurl.MAXREDIRS, 5)         </code><code>#指定HTTP重定向的最大数  </code>

<code>c.setopt(pycurl.FORBID_REUSE, 1)      </code><code>#完成交互后强制断开连接,不重用  </code>

<code>c.setopt(pycurl.FRESH_CONNECT,1)      </code><code>#强制获取新的连接,即替代缓存中的连接  </code>

<code>c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) </code><code>#设置保存DNS信息的时间,默认为120秒  </code>

<code>c.setopt(pycurl.URL,</code><code>"http://www.baidu.com"</code><code>)      </code><code>#指定请求的URL  </code>

<code>c.setopt(pycurl.USERAGENT,</code><code>"Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)"</code><code>)    </code><code>#配置请求HTTP头的User-Agent</code>

<code>c.setopt(pycurl.HEADERFUNCTION, getheader)   </code><code>#将返回的HTTP HEADER定向到回调函数getheader</code>

<code>c.setopt(pycurl.WRITEFUNCTION, getbody)      </code><code>#将返回的内容定向到回调函数getbody</code>

<code>c.setopt(pycurl.WRITEHEADER, fileobj)        </code><code>#将返回的HTTP HEADER定向到fileobj文件对象</code>

<code>c.setopt(pycurl.WRITEDATA, fileobj)          </code><code>#将返回的HTML内容定向到fileobj文件对象</code>

<code>c.getinfo(pycurl.HTTP_CODE)         </code><code>#返回的HTTP状态码</code>

<code>c.getinfo(pycurl.TOTAL_TIME)        </code><code>#传输结束所消耗的总时间</code>

<code>c.getinfo(pycurl.NAMELOOKUP_TIME)   </code><code>#DNS解析所消耗的时间</code>

<code>c.getinfo(pycurl.CONNECT_TIME)      </code><code>#建立连接所消耗的时间</code>

<code>c.getinfo(pycurl.PRETRANSFER_TIME)  </code><code>#从建立连接到准备传输所消耗的时间</code>

<code>c.getinfo(pycurl.STARTTRANSFER_TIME)    </code><code>#从建立连接到传输开始消耗的时间</code>

<code>c.getinfo(pycurl.REDIRECT_TIME)     </code><code>#重定向所消耗的时间</code>

<code>c.getinfo(pycurl.SIZE_UPLOAD)       </code><code>#上传数据包大小</code>

<code>c.getinfo(pycurl.SIZE_DOWNLOAD)     </code><code>#下载数据包大小 </code>

<code>c.getinfo(pycurl.SPEED_DOWNLOAD)    </code><code>#平均下载速度</code>

<code>c.getinfo(pycurl.SPEED_UPLOAD)      </code><code>#平均上传速度</code>

<code>c.getinfo(pycurl.HEADER_SIZE)       </code><code>#HTTP头部大小</code>

代码如下:

<code>#!/usr/bin/env python</code>

<code># __*__coding:utf8__*__</code>

<code>#Author:wangpengtai</code>

<code>#Blog:http://wangpengtai.blog.51cto.com/</code>

<code>import</code> <code>pycurl</code>

<code>import</code> <code>sys</code>

<code>import</code> <code>StringIO </code><code>#引用该模块的原因是:使用pycurl后会打印出页面内容,我们不需要看到这个内容,只需要获取页面反馈信息就行了,只能将其写入缓存中,目前没找到好办法,学艺不精,不会使用重定向写到os.devnull中,无奈初次下策。。。</code>

<code>#开始使用的是写入临时文件,但是会有权限问题,导致zabbix无法获取到数据。</code>

<code>class</code> <code>WebStatus(</code><code>object</code><code>):</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>, url):</code>

<code>        </code><code>self</code><code>.url </code><code>=</code> <code>url</code>

<code>        </code><code>self</code><code>.curl </code><code>=</code> <code>pycurl.Curl()</code>

<code>        </code><code>self</code><code>.string </code><code>=</code> <code>StringIO.StringIO()</code>

<code>        </code><code># 连接等待时间,0则不等待</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.CONNECTTIMEOUT, </code><code>5</code><code>)</code>

<code>        </code><code># 超时时间</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.TIMEOUT, </code><code>5</code><code>)</code>

<code>        </code><code># 下载进度条,非0则屏蔽</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.NOPROGRESS, </code><code>1</code><code>)</code>

<code>        </code><code># 指定HTTP重定向最大次数</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.MAXREDIRS, </code><code>5</code><code>)</code>

<code>        </code><code># 完成交互后强制断开连接,不重用</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.FORBID_REUSE, </code><code>1</code><code>)</code>

<code>        </code><code># 设置DNS信息保存时间,默认为120秒</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.DNS_CACHE_TIMEOUT, </code><code>60</code><code>)</code>

<code>        </code><code># 设置请求的Url</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.URL, </code><code>self</code><code>.url)</code>

<code>        </code><code>self</code><code>.curl.setopt(pycurl.WRITEFUNCTION, </code><code>self</code><code>.string.write)</code><code>#将页面内容写入缓存</code>

<code>        </code><code>self</code><code>.curl.perform()</code>

<code>    </code><code>def</code> <code>request_value(</code><code>self</code><code>):</code>

<code>        </code><code>data </code><code>=</code> <code>{</code>

<code>            </code><code>"Http_code"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.HTTP_CODE),</code>

<code>            </code><code>"Speed_download"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.SPEED_DOWNLOAD),</code>

<code>            </code><code>"Connect_time"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.CONNECT_TIME),</code>

<code>            </code><code>"Total_time"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.TOTAL_TIME),</code>

<code>            </code><code>"Dnslookup_time"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.NAMELOOKUP_TIME),</code>

<code>            </code><code>"Redirect_time"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.REDIRECT_TIME),</code>

<code>            </code><code>"Redirect_count"</code><code>: </code><code>self</code><code>.curl.getinfo(pycurl.REDIRECT_COUNT)</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>data</code>

<code>    </code><code>def</code> <code>__end__(</code><code>self</code><code>):  </code><code>#释放内存和连接,做一个有始有终,有责任心的运维狗</code>

<code>        </code><code>self</code><code>.string.close()</code>

<code>        </code><code>self</code><code>.curl.close()</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>"__main__"</code><code>:</code>

<code>    </code><code>Usage </code><code>=</code> <code>"""</code>

<code>Usage: python web_monitor.py url [Http_code|Speed_download|Connect_time|Total_time|Dnslookup_time|Redirect_time|Redirect_count]</code>

<code>    </code><code>"""</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>url </code><code>=</code> <code>sys.argv[</code><code>1</code><code>]</code>

<code>        </code><code>request </code><code>=</code> <code>sys.argv[</code><code>2</code><code>]</code>

<code>        </code><code>try</code><code>:</code>

<code>            </code><code>s </code><code>=</code> <code>WebStatus(url)</code>

<code>            </code><code>try</code><code>:</code>

<code>                </code><code>print</code> <code>s.request_value()[request]</code>

<code>            </code><code>except</code> <code>KeyError:</code>

<code>                </code><code>print</code> <code>"Make sure 2nd argument is right!"</code>

<code>        </code><code>except</code> <code>pycurl.error:</code>

<code>            </code><code>print</code> <code>"Make sure the url is right or reachable!"</code>

<code>    </code><code>except</code> <code>IndexError:</code>

<code>        </code><code>print</code> <code>"Must be 2 arguments given!%s"</code> <code>%</code> <code>Usage</code>

Zabbix使用Pycurl模块监控web页面状态

<a href="https://s1.51cto.com/wyfs02/M02/9E/CF/wKioL1mWn16C1FgLAADAVUbD328649.jpg-wh_500x0-wm_3-wmp_4-s_275613802.jpg" target="_blank"></a>

二、配置zabbix自定义监控

这个相对来说比较灵活,可以找一台机器专门用来做监控,只需要在这台机器上配置以下内容就可以监控多个URL了。

zabbix界面中可以配置一个模版,将其挂在该机器上就行了。

1、将代码写到下面目录下并加上可执行权限

<code>[root@zabbix-12-195 scripts]</code><code># pwd</code>

<code>/etc/zabbix/scripts</code>

<code>[root@zabbix-12-195 scripts]</code><code># vim web_monitor.py </code>

<code>[root@zabbix-12-195 scripts]</code><code># chmod +x web_monitor.py</code>

2、配置zabbix_agentd.conf

<code>[root@zabbix-12-195 scripts]</code><code># cat /etc/zabbix_agentd.conf</code>

<code>UserParameter=web[*],</code><code>/etc/zabbix/scripts/web_monitor</code><code>.py $1 $2</code>

3、重启zabbix-agentd

<code>[root@zabbix-12-195 scripts]</code><code># service zabbix-agentd restart</code>

三、配置zabbix监控

Zabbix使用Pycurl模块监控web页面状态

<a href="https://s2.51cto.com/wyfs02/M02/00/04/wKiom1mU-YaDpLH8AAC9-gHCOUU707.jpg-wh_500x0-wm_3-wmp_4-s_2189949298.jpg" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/9E/B4/wKioL1mU-daCJY3HAACk3ML1kVk955.jpg-wh_500x0-wm_3-wmp_4-s_4016537963.jpg" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M00/9E/B4/wKioL1mU-iCynOqwAABiF67TeWU417.jpg-wh_500x0-wm_3-wmp_4-s_1483484018.jpg" target="_blank"></a>

本文转自 wangpengtai  51CTO博客,原文链接:http://blog.51cto.com/wangpengtai/1956973,如需转载请自行联系原作者

继续阅读