zabbix 结合 pycurl 批量监控网站服务质量

zabbix 结合 pycurl 批量监控网站服务质量

前提:需要批量监控一些站点

Zabbix版本:5.2.6
zabbix-agent配置目录:/etc/zabbix/zabbix_agentd.d/

我把监控脚本放在/etc/zabbix/zabbix_agentd.d/externalscripts目录下

cd /etc/zabbix/zabbix_agentd.d/externalscripts

cat web_monitor.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-  
import os,sys  
import time  
import sys  
import pycurl 
import json
urllist=['www.baidu.com','www.hao123.com'] 
class Test:
    def __init__(self):
        self.contents = ''
    def callback(self,curl):
        self.contents = self.contents + curl
def test_gzip(url):
    data = {} 
    t = Test() 
    c = pycurl.Curl()  
    c.setopt(pycurl.WRITEFUNCTION,t.callback)
    c.setopt(pycurl.ENCODING, 'gzip')
    c.setopt(pycurl.URL,url) 
    c.perform()    
    data['HTTP_CODE']=c.getinfo(c.HTTP_CODE)
    data['NAMELOOKUP_TIME']=(c.getinfo(c.NAMELOOKUP_TIME))*1000
    data['CONNECT_TIME']=(c.getinfo(c.CONNECT_TIME))*1000
    data['PRETRANSFER_TIME']=(c.getinfo(c.PRETRANSFER_TIME))*1000
    data['SPEED_DOWNLOAD']=c.getinfo(c.SPEED_DOWNLOAD)
    return data
def web_name_discovery():
    web_list=[]
    web_dict={"data":None}
    for url in urllist:
        url_dict={}
        url_dict["{#NAME}"]=url
        web_list.append(url_dict)
    web_dict["data"]=web_list
    jsonStr = json.dumps(web_dict, sort_keys=True, indent=4)
    return jsonStr
def get_web_status():
    data=test_gzip(sys.argv[2])
    return data[sys.argv[3]]
if __name__ == '__main__':
    if sys.argv[1] == "web_name_discovery":
        print web_name_discovery()
    elif sys.argv[1] == "get_web_status":
        print get_web_status()

urllist=['www.baidu.com','www.hao123.com'] 这一行就是需要监控的站点,按这种格式把要监控的站点添加进去就好。

chmod +x web_monitor.py

执行效果如下:

# python web_monitor.py web_name_discovery

{
    "data": [
        {
            "{#NAME}": "www.baidu.com"
        }, 
        {
            "{#NAME}": "www.hao123.com"
        }
    ]
}

生成自定义的key和参数

cd /etc/zabbix/zabbix_agentd.d/

vim web_status.conf

UserParameter=get_web_name,/etc/zabbix/zabbix_agentd.d/externalscripts/web_monitor.py web_name_discovery
UserParameter=get_web_status[*],/etc/zabbix/zabbix_agentd.d/externalscripts/web_monitor.py get_web_status $1 $2

保存后,修改文件属主

chown zabbix: web_status.conf

重启 zabbix-agent

systemctl restart zabbix-agent

在 zabbix-server 上测试

zabbix_get -s 10.210.10.175 -k get_web_status[www.hao123.com,HTTP_CODE]
200

正常。

zabbix 上添加模板

zabbix 结合 pycurl 批量监控网站服务质量
zabbix 结合 pycurl 批量监控网站服务质量

添加完之后点“自动发现”——右上角“创建发现规则”——名字随便填,键值填get_web_name

zabbix 结合 pycurl 批量监控网站服务质量

这里的键值跟web_monitor.py里的自定义键值一致,可以在zabbix-server上执行下面的命令获取

zabbix_get -s 10.210.10.175 -k get_web_name
结果:
{
    "data": [
        {
            "{#NAME}": "www.baidu.com"
        }, 
        {
            "{#NAME}": "www.hao123.com"
        }
    ]
}

添加监控项原型

需要添加5个

名称:{#NAME} 准备传输时间
键值:get_web_status[{#NAME},PRETRANSFER_TIME]
信息类型:浮点数
单位:ms
名称:{#NAME} 建立连接时间 
键值:get_web_status[{#NAME},CONNECT_TIME]
信息类型:浮点数
{#NAME} 建立连接时间 
get_web_status[{#NAME},CONNECT_TIME]
信息类型:浮点数
名称:{#NAME} 平均下载速度 
键值:get_web_status[{#NAME},SPEED_DOWNLOAD]
信息类型:浮点数
名称:{#NAME} 网站状态码 
键值:get_web_status[{#NAME},HTTP_CODE]

zabbix 结合 pycurl 批量监控网站服务质量

创建图形原形

需要添加3个图形原形,选择“图形原形”——“创建图形原形”

zabbix 结合 pycurl 批量监控网站服务质量

名称:{#NAME} 平均下载速度
添加原型:Web monitor: {#NAME} 平均下载速度

zabbix 结合 pycurl 批量监控网站服务质量

名称:{#NAME} 状态码
添加原型:Web monitor: {#NAME} 网站状态码

zabbix 结合 pycurl 批量监控网站服务质量

名称:{#NAME} 网站状况
添加原形:
Web monitor: {#NAME} 准备传输时间
Web monitor: {#NAME} 域名解析时间
Web monitor: {#NAME} 建立连接时间

zabbix 结合 pycurl 批量监控网站服务质量

要使用模板必须先在zabbix-agent服务器上添加上面的脚本,然后再zabbix-server上的主机上关联这个模板就好了。

怎么在zabbix-server 5.2 上看监控图

检测——主机——图形
zabbix 结合 pycurl 批量监控网站服务质量

后记

我这里没有创建触发器原形。

上一篇:zabbix 结合 pycurl 批量监控网站服务质量


下一篇:PycURL简介