自动发现实现url+响应时间监控

url自动发现脚本:

[[email protected] scripts]# cat  urlDiscovery.py

#!/usr/bin/env python
#coding:utf-8

import os
import sys
import json

#这个函数主要是构造出一个特定格式的字典,用于zabbix
def web_site_discovery():
    web_list=[]
    web_dict={"data":None}
    with open("/etc/zabbix/server_list","r") as f:
        for url in f:
            dict={}
            dict["{#SERVICENAME}"]=url.strip().split()[0]
            dict["{#SITENAME}"]=url.strip().split()[1]
            web_list.append(dict)

    web_dict["data"]=web_list
    jsonStr = json.dumps(web_dict, sort_keys=True, indent=4)
    return jsonStr

if __name__ == "__main__":
    print web_site_discovery() 

url响应时间监控脚本:

[[email protected] scripts]# cat urlResponse.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os,sys
import pycurl
from subprocess import Popen,PIPE
class Http_Test:
    def __init__(self):
        self.contents = ‘‘
    def body_callback(self,buf):
        self.contents = self.contents + buf
def getUrlInfo(url):
    c = pycurl.Curl()
    t = Http_Test()
    c.setopt(pycurl.URL,url)  #指定请求的url
    c.setopt(pycurl.MAXREDIRS,5)  #设置最大重定向次数
    c.setopt(pycurl.CONNECTTIMEOUT,10)  #定义请求的等待连接时间
    c.setopt(pycurl.TIMEOUT,300)  #定义请求的超时时间
    c.setopt(pycurl.USERAGENT,‘Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)‘) #配置请求HTTP头的User-Agent
    c.setopt(pycurl.ENCODING, ‘gzip‘)#采用gzip传输
    c.setopt(pycurl.DNS_CACHE_TIMEOUT,600) #设置保存DNS的时间
    c.setopt(pycurl.WRITEFUNCTION,t.body_callback)
    try:
        c.perform()                     #提交请求,返回生成内容
        code = c.getinfo(pycurl.HTTP_CODE) #获取 HTTP 状态码
        conn_time = round((c.getinfo(pycurl.CONNECT_TIME)*1000),2) #获取连接建立的时间
        pre_tran = round((c.getinfo(pycurl.PRETRANSFER_TIME)*1000),2) #准备传输时间
        start_tran = round((c.getinfo(pycurl.STARTTRANSFER_TIME)*1000),2) #开始传输时间
        total_time = round((c.getinfo(pycurl.TOTAL_TIME)*1000),2) #获取传输的总时间
        size = c.getinfo(pycurl.SIZE_DOWNLOAD) #获取下载数据包大小
        namelookup = round((c.getinfo(pycurl.NAMELOOKUP_TIME)*1000),2) #获取DNS解析时间
        headerSize = c.getinfo(c.HEADER_SIZE) #HTTP头大小
        downloadSpeed = c.getinfo(c.SPEED_DOWNLOAD) #获取下载速度
    except Exception as e:
        #print(‘connection error:‘+str(e))
        c.close()
        code = 0
        conn_time = 0
        pre_tran = 0
        start_tran = 0
        total_time = 0
        size = 0
        namelookup = 0
        headerSize = 0
        downloadSpeed = 0
    ‘‘‘info="""
         响应状态码:%s
         Dns解析时间:%.3f ms
         连接建立时间:%.3f ms
         准备传输时间:%.3f ms
         传输开始时间:%.3f ms
         总共传输时间:%.3f ms
         数据包大小:%s bytes
         http头大小:%s bytes
         平均下载速度:%s bytes/s
         """%(code, namelookup, conn_time, pre_tran, start_tran, total_time, size, headerSize, downloadSpeed)
    ‘‘‘
    info={"httpCode":code,"connTime":conn_time,"preTran":pre_tran,"startTran":start_tran,
         "totalTime":total_time,"size":size,"namelookup":namelookup,"headerSize":headerSize,"downloadSpeed":downloadSpeed}
    return info
def getUrlList(urlfile):
    urlList=[]
    with open(urlfile,‘r‘) as fd:
        for i in fd:
            urlList.append(i.split())
    return urlList
def sendData(zabbixConf,tmpfile):
    args="/usr/bin/zabbix_sender -c {0} -i {1} -vv"
    process=Popen(args.format(zabbixConf,tmpfile),shell=True,stdout=PIPE,stderr=PIPE)
    stdout,stderr=process.communicate()
    #os.unlink(tmpfile)
if __name__==‘__main__‘:
    urlList=getUrlList("/etc/zabbix/server_list")
    tmpfile="/tmp/tmpfile"
    zabbixConf="/etc/zabbix/zabbix_agentd.conf"
    f=open(tmpfile,‘w‘)
    for i,j in urlList:
        urlinfo=getUrlInfo(j)
        for k,v in urlinfo.items():
            key=‘url.info[{0},{1},{2}]‘.format(i,j,k)
            f.write("- %s %s\n" % (key, v))
    f.close()
    sendData(zabbixConf,tmpfile)

url监控列表:

[[email protected] scripts]# cat /etc/zabbix/server_list
api https://www.xxxxx.de/rest/v1/tags
AWScdn https://d3m2x14ac3st9e.cloudfront.net

url访问会出现不稳定的情况,需要调整/etc/zabbix/zabbix_agentd.conf 的超时时间

Timeout=30

添加url监控配置文件

[[email protected] zabbix_agentd.conf.d]# cat userparameter_url.conf
UserParameter=web_site_discovery,/usr/bin/python /etc/zabbix/scripts/urlDiscovery.py
UserParameter=url.info,/usr/bin/python /etc/zabbix/scripts/urlResponse.py >/dev/null 2>&1 && echo 0 || echo 1

zabbix的监控模板

zbx_url_templates.xml

原文地址:https://www.cnblogs.com/imcati/p/9379213.html

时间: 2024-10-13 11:06:56

自动发现实现url+响应时间监控的相关文章

zabbix自动发现mysql端口并监控

一.需求: 因为我们是游戏业务,要用到mysql,一个服务器上面跑多个mysql实例也是很正常.如果单独手动一台台修改agent.conf,添加web监控,太费时费力.所以就想的要用zabbix 的自动发现来监控 二.配置Agent 1.编写自动发现端口脚本 [[email protected] ~]# cat /etc/zabbix/alertscripts/zabbix_discovery_mysql.sh  #!/bin/bash mysql() {             port=($

zabbix自动发现端口并添加监控

说明:zabbix2.0以上之持了discovery功能,该discover并不是之前的 Actions中的discovery,zabbix官方是通过该discovery自动来发现服务的分区.网卡等,这些不固定的因素监控.写了一个自动发现服务器listening端口的discovery脚本,这样就会定期扫描服务器上监听的端口,自动增加端口.删除端口的监控 一.编写tcp监听端口的shell脚本: vim discovertcpport.sh #!/bin/bash portarray=(`net

Zabbix之(3)--自动发现服务器并添加监控

一.概述 Zabbix可以实现通过扫描IP地址来发现监控节点,只要节点满足发现条件即可,比如安装了agent或开放了snmp端口等,本实验主要是通过配置Zabbix的Discovery(自动发现)功能来实现自动扫描网络节点,并根据节点操作系统类型自动关联模板添加到监控项中,从而实现自动化监控. 二.准备模板 可以根据之前的方法自己定义模板,也可以直接用系统自带的模板,我这里分别定义了"OS linux"."OS windows"."Network Devi

zabbix的自动发现、自定义添加监控项目

1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需要修改那么,就只有到模板里面进行相关设置.   2.自定义添加监控项目,监控项目都是针对于客户机而言的,一般都是对客户机进行配制 先在客户机创建一个脚本加入以下内容:mkdir /etc/zabbix/sh; vim /etc/zabbix/sh/estab.sh #!/bin/bash##获取80

zabbix通过自动发现tomcat应用端口监控连接数

192.168.10.98上 netstat -anp | wc -l netstat -anp|grep 8094 | grep ESTABLISHED | wc -l netstat -anp|grep 8094 | wc -l 192.168.10.99或者101上 netstat -anp|grep 3306 | wc -l netstat -anp|grep 192.168.10.99 | wc -l

zabbix的主动模式和被动模式、添加监控主机、添加自定义模板、处理图形中的乱码、自动发现

主动模式和被动模式 主动或者被动是相对客户端来讲的 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可. 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力. 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式 添加监控主机 添加主机即把监控的主机加入监控中心,这样就可以监控它的一些项目了,比如监控CPU.内存.磁盘以及网络等. 1.添加主机群组

六十五、主动模式和被动模式、添加监控主机、添加自定义模板、处理图形中的乱码、自动发现

一.主动模式和被动模式 主动或者被动是相对客户端来讲的 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可. 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力. 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式 二.添加监控主机 进入zabbix的web界面里,点击"配置": 主机群组:先建立主机组,再在组里建立需要监控的主机: 模板

zabbix/自动发现规则

对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对应的value 从而省去我们一部分的重复代码 . 现需求 需要自定义一个监控脚本,目的是取各服务器三线ip地址 进行向另一端源服务器进行ping rtt和loss的请求进行判断是否存在丢包行为. 1:不同业务,对应不同的模板,我们需要现创建一个模板,用于我们这个特殊的业务 2:创建完成后,点击我们创建好

zabbix主动和被动模式、添加监控主机和自动以模板、处理图形中的乱码、自动发现

主动模式和被动模式 主动或被动都是相对于客户端来讲的 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动的接受连接,并把监控信息传递给服务端. 服务端要到所有的客户端上取数据再返回放到数据库. 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接受即可. 定义完监控项目之后,客户端就会根据设定的策略去采集相关项目的数据(cpu使用率.网卡流量.负载等),到点就把数据上传给服务端,服务端再把数据传到数据库. 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力. 服务