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

由于网络的问题,zabbix自带web模块用不了,后台研发2b,老是更新正式环境安装包,导致一直出问题,老是给他们擦屁股,早说过这事,他们不配合,现在出问题了,挺爽,这锅我表示不背,就找了pycurl这个模块写个监控。


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

c = pycurl.Curl()    #创建一个curl对象 

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

c.setopt(pycurl.TIMEOUT, 5)           #请求超时时间  

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

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

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

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

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

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

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

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

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

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

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

c.getinfo(pycurl.HTTP_CODE)         #返回的HTTP状态码

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

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

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

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

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

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

c.getinfo(pycurl.SIZE_UPLOAD)       #上传数据包大小

c.getinfo(pycurl.SIZE_DOWNLOAD)     #下载数据包大小 

c.getinfo(pycurl.SPEED_DOWNLOAD)    #平均下载速度

c.getinfo(pycurl.SPEED_UPLOAD)      #平均上传速度

c.getinfo(pycurl.HEADER_SIZE)       #HTTP头部大小

代码如下:


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

#!/usr/bin/env python

# __*__coding:utf8__*__

#Author:wangpengtai

#Blog:http://wangpengtai.blog.51cto.com/

import pycurl

import sys

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

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

class WebStatus(object):

    def __init__(self, url):

        self.url = url

        self.curl = pycurl.Curl()

        self.string = StringIO.StringIO()

        # 连接等待时间,0则不等待

        self.curl.setopt(pycurl.CONNECTTIMEOUT, 5)

        # 超时时间

        self.curl.setopt(pycurl.TIMEOUT, 5)

        # 下载进度条,非0则屏蔽

        self.curl.setopt(pycurl.NOPROGRESS, 1)

        # 指定HTTP重定向最大次数

        self.curl.setopt(pycurl.MAXREDIRS, 5)

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

        self.curl.setopt(pycurl.FORBID_REUSE, 1)

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

        self.curl.setopt(pycurl.DNS_CACHE_TIMEOUT, 60)

        # 设置请求的Url

        self.curl.setopt(pycurl.URL, self.url)

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

        self.curl.perform()

    def request_value(self):

        data = {

            "Http_code"self.curl.getinfo(pycurl.HTTP_CODE),

            "Speed_download"self.curl.getinfo(pycurl.SPEED_DOWNLOAD),

            "Connect_time"self.curl.getinfo(pycurl.CONNECT_TIME),

            "Total_time"self.curl.getinfo(pycurl.TOTAL_TIME),

            "Dnslookup_time"self.curl.getinfo(pycurl.NAMELOOKUP_TIME),

            "Redirect_time"self.curl.getinfo(pycurl.REDIRECT_TIME),

            "Redirect_count"self.curl.getinfo(pycurl.REDIRECT_COUNT)

        }

        return data

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

        self.string.close()

        self.curl.close()

if __name__ == "__main__":

    Usage = """

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

    """

    try:

        url = sys.argv[1]

        request = sys.argv[2]

        try:

            = WebStatus(url)

            try:

                print s.request_value()[request]

            except KeyError:

                print "Make sure 2nd argument is right!"

        except pycurl.error:

            print "Make sure the url is right or reachable!"

    except IndexError:

        print "Must be 2 arguments given!%s" % Usage

验证:www.baidu.com一直是我测(攻)试(击)的对象板面的做法和配料

二、配置zabbix自定义监控

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

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

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


1

2

3

4

[[email protected] scripts]# pwd

/etc/zabbix/scripts

[[email protected] scripts]# vim web_monitor.py 

[[email protected] scripts]# chmod +x web_monitor.py

2、配置zabbix_agentd.conf


1

2

[[email protected] scripts]# cat /etc/zabbix_agentd.conf

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

3、重启zabbix-agentd


1

[[email protected] scripts]# service zabbix-agentd restart

三、配置zabbix监控

直接上图了,后续的添加就自由发挥了,好多返回值可以出图,可以做触发器告警等。不多叙述了

时间: 2024-10-12 18:46:44

Zabbix使用Pycurl模块监控web页面状态的相关文章

pycurl 模块监控web服务质量应用

做过运维的应该都做过http服务了.像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去监控服务之类,今天学习了pycurl模块,这里记录一下: 模块相关说明: c = pycurl.Curl()    #创建一个curl对象   c.setopt(pycurl.CONNECTTIMEOUT, 5)    #连接的等待时间,设置为0则不等待   c.setopt(pycurl.TIMEOUT, 5)    #请求超时时间  

自动化运维工具之Zabbixzabbix发现_自动注册及web页面状态监控(四)

网络发现(Network Discovery) **网络发现是zabbix最具有特色的功能之一,它能根据用户实现定义好的规则自动添加监控主机和服务等 -->speed up Zabbix deployment -->simplify administration -->use Zabbix in rapidly changing environments without excessive administration **Zabbix的网络发现功能可基于如下信息进行: -->IP

Zabbix监控(十五):自动批量监控WEB页面

参考官方文档: https://www.zabbix.com/documentation/2.0/manual/discovery/low_level_discovery 参考自动监控Linux端口文档: http://ywzhou.blog.51cto.com/2785388/1580160 说明:本节将使用脚本形式批量监控WEB页面,再多的URL都可以写在weblist文件中进行自动监控:由于监控网页不需要依赖某台监控主机,因此直接在Zabbix Server上配置即可. 1.新建脚本文件

shell 实现监控Web服务状态

使用shell 实现监控Web服务状态 原理:下载网站,并把输出写入 /dev/null,如果该命令执行结果成功(返回0)打印成功提示,如果下       载失败,这再下载一次,如果还是失败,就打印失败 脚本如下 [[email protected] ~]# cat checkurl.sh  #!/bin/bash CheckUrl(){ timeout=5 fails=0 success=0 while true   do     wget --timeout=$timeout --tries

zabbix 通过status模块监控nginx

1.编辑nginx的配置文件,在server下添加如下内容: location /status {stub_status on;access_log off;allow 127.0.0.1;deny all;} 保存退出并重启nginx 2.创建监控nginx的脚本目录 mkdir /usr/local/zabbix/libexec 3.vim /usr/local/zabbix/libexec/nginx.sh && chmod +x /usr/local/zabbix/libexec/

zabbix监控WEB页面及告警 实战

网站对一个公司来说非常重要,里边包含了公司的业务,介绍和订单等相关信息,网站的宕掉了对公司的影响非常重大,所以要很好的对网站的页面进行监控,zabbix提供了对web页面的监控,具体步骤如下. 一,配置web页面的检测: 1,选择一台能上外网的被监控主机,依次执行:配置---主机---zabbix server---web监测. 2,单击web场景---创建web场景. 3,在场景选项卡中添加名称,应用集.然后调到步骤选项卡来添加监控页面. 4,在步骤选项卡中单击添加按钮,依次添加名称,URL超

zabbix监控web页面,以及告警配置

背景: 今天研发线上的配置配错了,导致公司网站访问不了,结果又甩锅给我们运维,华丽地再次背锅.但是没有做web网页的监控也的确是我们的锅,没办法,含泪接下-- 为了不再次背锅,故把公司的线上网站全部做了监控.这里来说说在zabbix上做web页面监控的具体步骤. 注: 我这里的zabbix是3.2.1版本,中文配置.虽然和其他版本的页面可能不同,但是配置步骤应该是一样的. 这里的例子为监控百度首页. 配置web页面检测: 在zabbix上选择一台能上外网的主机,配置web检测场景. "配置&qu

python 使用pycurl模块检测web状态质量

pycurl模块安装 pip install pycurl 源码安装方法: wget https://curl.haxx.se/download/curl-7.29.0.tar.gz tar zxf curl-7.29.0.tar.gz cd curl-7.29.0/ ./configure make && make install export LD_LIBRARY_PATH=/usr/local/lib wget https://pypi.python.org/packages/sou

按照zabbix客户端及自定义监控nginx连接状态

一.下载客户端按照包,这里用rpm包安装 [[email protected] ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.4-1.el7.x86_64.rpm 修改客户端配置文件 Server=127.0.0.1 ServerActive=127.0.0.1 改为zabbix server实际的IP地址(比如zabbix server的IP地址为10.0.0.100) Server=