阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

436次阅读
没有评论

共计 4650 个字符,预计需要花费 12 分钟才能阅读完成。

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

pycurl 模块用法:

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 头部大小

代码如下:
#!/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)
        }
        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]
    “””
    try:
        url = sys.argv[1]
        request = sys.argv[2]
        try:
            s = 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

二、配置 zabbix 自定义监控
这个相对来说比较灵活,可以找一台机器专门用来做监控,只需要在这台机器上配置以下内容就可以监控多个 URL 了。
zabbix 界面中可以配置一个模版,将其挂在该机器上就行了。

1、将代码写到下面目录下并加上可执行权限
[root@zabbix-12-195 scripts]# pwd
/etc/zabbix/scripts
[root@zabbix-12-195 scripts]# vim web_monitor.py 
[root@zabbix-12-195 scripts]# chmod +x web_monitor.py

2、配置 zabbix_agentd.conf
[root@zabbix-12-195 scripts]# cat /etc/zabbix_agentd.conf
UserParameter=web[*],/etc/zabbix/scripts/web_monitor.py $1 $2

3、重启 zabbix-agentd
[root@zabbix-12-195 scripts]# service zabbix-agentd restart

三、配置 zabbix 监控
直接上图了, 后续的添加就自由发挥了,好多返回值可以出图,可以做触发器告警等。不多叙述了 j_0042.gif

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

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

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

更多 Zabbix 相关教程集合

在 Ubuntu 16.04 服务器上安装 Zabbix 3.2  http://www.linuxidc.com/Linux/2017-07/145519.htm

CentOS 7 LNMP 环境搭建 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140134.htm

Ubuntu 16.04 安装部署监控系统 Zabbix2.4  http://www.linuxidc.com/Linux/2017-03/141436.htm

Zabbix 监控安装部署及警报配置  http://www.linuxidc.com/Linux/2017-03/141611.htm

Zabbix 触发器表达式详解 http://www.linuxidc.com/Linux/2017-03/141921.htm

Ubuntu 16.04 下安装部署 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140395.htm

CentOS 6.3 下 Zabbix 监控 apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 7 下 Zabbix 3.0 安装详解 http://www.linuxidc.com/Linux/2017-03/141716.htm

64 位 CentOS 6.2 下安装 Zabbix 2.0.6   http://www.linuxidc.com/Linux/2014-11/109541.htm

ZABBIX 的详细介绍:请点这里
ZABBIX 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146336.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4650字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7782391
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...