web监控:zabbix自动发现+python之pycur模块对网站访问质量监控

一、效果图:

二、需求说明:

最近需要对节点到源站、办公环境访问业务平台网站质量和办公网络线路质量的监控,简单的ping可以检测到一些东西,但是http请求的检查也要进行,于是就研究了下pycurl。

PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。它的功能很强大,PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。

三、python脚本:

1、编写httptime.py脚本

命令vi zabbix_agentd.conf.d/httptime.py

#!/usr/bin/python

# coding: UTF-8

import pycurl

import sys

import os

import json

class Test:

def __init__(self):

self.contents = ‘‘

def body_callback(self,buf):

self.contents = self.contents + buf

def web_performance(input_url,mykey):

t = Test()

c = pycurl.Curl()

c.setopt(pycurl.WRITEFUNCTION,t.body_callback)

c.setopt(pycurl.ENCODING, ‘gzip‘)

c.setopt(pycurl.URL,input_url)

c.perform()

if mykey == "NAMELOOKUP_TIME":

#DNS解析时间ms

NAMELOOKUP_TIME =  c.getinfo(c.NAMELOOKUP_TIME)

print "%.2f"%(NAMELOOKUP_TIME*1000)

#return mykey

elif mykey == "CONNECT_TIME":

#建立连接时间ms

CONNECT_TIME =  c.getinfo(c.CONNECT_TIME)

print "%.2f" %(CONNECT_TIME*1000)

#return mykey

elif mykey == "PRETRANSFER_TIME":

#准备传输时间ms

PRETRANSFER_TIME =   c.getinfo(c.PRETRANSFER_TIME)

print "%.2f" %(PRETRANSFER_TIME*1000)

#return mykey

elif mykey == "STARTTRANSFER_TIME":

#传输开始时间ms

STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)

print "%.2f" %(STARTTRANSFER_TIME*1000)

#return mykey

elif mykey == "TOTAL_TIME":

#传输结束总时间ms

TOTAL_TIME = c.getinfo(c.TOTAL_TIME)

print "%.2f" %(TOTAL_TIME*1000)

#return mykey

elif mykey == "SIZE_DOWNLOAD":

#下载数据包大小bytes/s

SIZE_DOWNLOAD =  c.getinfo(c.SIZE_DOWNLOAD)

print "%d" %(SIZE_DOWNLOAD)

#return mykey

elif mykey == "HEADER_SIZE":

#HTTP头部大小bytes

HEADER_SIZE = c.getinfo(c.HEADER_SIZE)

print "%d" %(HEADER_SIZE)

#return mykey

elif mykey == "SPEED_DOWNLOAD":

#平均下载速度bytes/s

SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD)

print "%d" %(SPEED_DOWNLOAD)

#return mykey

def web_discovery():

website = [‘www.qq.com‘,‘www.sina.com‘,‘sunday208.blog.51cto.com‘];

devices = []

for devpath in  website:

device = os.path.basename(devpath)

devices += [{‘{#SITENAME}‘:device}]

print json.dumps({‘data‘:devices},sort_keys=True,indent=7,separators=(‘,‘,‘:‘))

if __name__ == ‘__main__‘:

if sys.argv[1] == "web_discovery":

web_discovery()

if sys.argv[1] == "web_performance":

input_url = sys.argv[2]

mykey = sys.argv[3]

web_performance(input_url,mykey)

2、加上执行权限:

命令chmod +x zabbix_agentd.conf.d/httptime.py

3、应用到zabbix客户端配置:

命令tail -1 zabbix_agentd.conf

UserParameter=HTTP_CURL[*],python /opt/soft/zabbix/etc/zabbix_agentd.conf.d/httptime.py $1 $2 $3

4、重启zabbix客户端:

/etc/init.d/zabbix_agentd  restart

5、服务端测试:

命令如下:

zabbix_get   -s  192.168.2.32 -p 10050 -k "HTTP_CURL[web_discovery]"

zabbix_get   -s  192.168.2.32 -p 10050 -k "HTTP_CURL[web_performance,www.qq.com,TOTAL_TIME]"

四、WEB界面配置:

1、下载附件模板文件(web访问质量监控.xml)后,导入到zabbix里。

2、模板中相关配置项展示:

3、创建主机并链接模板

4、数据展示

懒人使用懒方法。

第一次编写python,如果有问题,请大家及时更正。

时间: 2024-10-14 10:47:41

web监控:zabbix自动发现+python之pycur模块对网站访问质量监控的相关文章

zabbix自动发现与监控内存和CPU使用率最高的进程

监控需求 某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈. 监控方式 利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控.(本文监控的进程为Linux服务器中资源使用率最高的10个进程.) 缺点 不适用于监控固定的进程 首先使用top命令查看进程状态

zabbix自动发现规则之磁盘IO监控

本文章介绍zabbix自动发现规则之磁盘IO监控的案例实践. 主机名:mysql-slave 首先在zabbix_agent下定义一个获取磁盘IO信息的脚本: cat /etc/zabbix/scripts/disk_io.sh #!/bin/bash Disk=$1 Option=$2 case $Option in rrqm) iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $2}' ;; wrqm) iostat -dx

zabbix模板的自动发现规则(ldd)实现被监控项自动发现

zabbix模板的自动发现规则(ldd)实现被监控项自动发现 自动发现规则(ldd)用途说明 在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem discovery自动发现规则,可以根据每个服务器磁盘梳理不同,自动生成相应的磁盘监控数据. 这就是自动注册的用途,根据不同服务器上同一个监控项不同的数量,自动生成对应数量的监控 例如5个服务器都分别启动了tomcat多实例,但启动的tomcat数量不相同,端口也不同,我想要监控这些端口是否down掉: 用普

zabbix自动发现oracle表空间并监控其使用率

监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创建表空间时可以根据应用需求指定是否开启表空间自动扩展.那么在这里我们需要分析一个监控策略,就是当zabbix监控到某个表空间使用率达到95%,那么就让触发器触发警告(Warning)信息,并发送邮件给DBA或管理者.当检测到表空间没有开启自动扩展时,则触发Information信息.说明一下:ora

zabbix自动发现监控tomcat健康页面

一.背景 公司系统平台有10几个tomcat服务,由于需要服务保持全年无间断服务,特在tomcat中嵌入专门的监控页面,在curl 专用页面返回值为200时,则认定服务正常运行,否则报警发送专门的监控运维的邮箱. 二.原理 正常的tomcat健康状态监控页面如下图 我们利用如下命令判断返回值是否为200 shell>/usr/bin/curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' http://10.0.0.107:9100/

zabbix自动发现结合shell实现自动发现占用内存最大top10进程并监控其资源

最近在想一个问题,线上服务器跑的服务五花八门,可能这台跑的是nginx,另一台跑的是mysql,其他的跑的是nfs或者其他服务等等,通过某一个脚本中固定的写入一些服务来实现监控所有的服务器的进程占用资源情况占用zabbix服务器资源不说,假如该服务器跑的服务不在固定列表中,监控服务获取不到相应数据. 为了解决这个问题,最近在想通过zabbix的自动发现功能能不能实现自动发现占用服务器内存最大的N个进程,然后对这些进程占用内存和CPU的资源情况进行监控获取数据呢?于是就有了本篇文章的诞生. 首先,

zabbix自动发现监控mongo

1: zabbix自动发现mongo监控的端口,并返回zabbix_server需要的格式,脚本部署在zabbix_agent上,路径为/usr/local/zabbix/zabbix_discover_mongo.sh,脚本内容如下: #!/bin/sh #zhuangweihong 20160419 zabbix discover mysql res=`sudo ss -tulnp|grep mongo|grep -v 28107|awk '{print $(NF-2)}'|awk -F':

zabbix自动发现监控多台mysql

1: 前言 由于前面写的博客,zabbix自动发现监控redis.zabbix自动发现监控mongo这两篇博客虽然都能自动发现并监控,但是由于每个zabbix_agentd都得配置,监控起来非常不方便,因此,再做了个模板,能够自动发现并监控多台mysql.这个方法在监控mongo.redis或者mysql主从等时候也都适用. 2: 在zabbix_agentd下编写自动发现并监控多台mysql的脚本,脚本如下: #!/bin/sh #zhuangweihong 20160512 zabbix d

zabbix自动发现window(阿里云),去除多余的监控项

1.问题点: 由于使用zabbix 自动发现去批量添加500台阿里云主机, 导致监控项多大120多项, 其中有大量的报警信息, 都是我不想要的,前期由于量太多, 不敢轻易的去删除,只做个在模板里面删除, 但是发现不管用.2.在模板里面删除不要监控项是多的,想法是对的, 但是操作过程有点问题3.正确的方式是:模板 4.将自动发现服务这个去掉, 应该他会自动发现windows(阿里云) 主机多余的监控项5.刚才我们已经禁用了多余监控项了, 现在需要把之前就已经加好的监控项都去掉(关键)6.批量去掉当