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 上添加模板
添加完之后点“自动发现”——右上角“创建发现规则”——名字随便填,键值填get_web_name
这里的键值跟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]
创建图形原形
需要添加3个图形原形,选择“图形原形”——“创建图形原形”
名称:{#NAME} 平均下载速度
添加原型:Web monitor: {#NAME} 平均下载速度
名称:{#NAME} 状态码
添加原型:Web monitor: {#NAME} 网站状态码
名称:{#NAME} 网站状况
添加原形:
Web monitor: {#NAME} 准备传输时间
Web monitor: {#NAME} 域名解析时间
Web monitor: {#NAME} 建立连接时间
要使用模板必须先在zabbix-agent服务器上添加上面的脚本,然后再zabbix-server上的主机上关联这个模板就好了。
怎么在zabbix-server 5.2 上看监控图
检测——主机——图形
后记
我这里没有创建触发器原形。