参考文档
https://blog.csdn.net/voidfaceless/article/details/78219678 关于 sys.argv
https://www.jb51.net/article/96495.htm 关于命令行获取响应时间
整体思路: 通过python脚本获取五个数据,,脚本设置为监控主项,五个数据分别设置为五个监控依赖项
一、编写python脚本,上传至zabbix服务器指定目录并 chmod +x response_time.py赋予可执行权限
我这边是 /usr/lib/zabbix/externalscripts,
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import sys
def get_request_response():
ip_addr = str(sys.argv[1])
request_response = \
os.popen('curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download} ' + ip_addr)\
.read().split("::")
data = {
"time_namelookup": float(request_response[0]) * 1000,
"time_connect": (float(request_response[1]) - float(request_response[0])) * 1000,
"time_starttransfer": (float(request_response[2]) - float(request_response[1])) * 1000,
"time_total": (float(request_response[3]) - float(request_response[2])) * 1000,
"speed_download": float(request_response[4]) * 1000
}
print(str(data).replace("\'", "\""))
get_request_response()
注意:data是个字典,如果print(data),里面的双引号会变成单引号,而json要求里面的引号必须是双引号,,由于zabbix中会用到json相关操作,,这里将data转为字符串,并把所有单引号换成双引号,之后打印
二、zabbix中创建监控模板
模板名称,可见名称,选择群组,添加想要监控的主机(主机中需要添加对应该模板的宏) {$WEB_URL},,可以设置默认值
定义一个宏,,用于脚本中接受参数,,这里接受一个IP地址或者域名,,对应脚本里面的sys.argv[1]
打开刚刚创建的模板,,点击监控项,,选择右上角创建监控项
进入创建监控项界面,,创建一个主项,,名为response_time, 类型是外部检查(因为是python脚本监控), 键值是 : 脚本名字(response_time.py)去掉后缀 + [定义的宏]
创建依赖项,,类型选择相关项目,,主要项就是刚才创建的主项,,点击选择刚才的主项
进程名称我选择json路径(解析刚才print的字典),参数格式参考 ,,例如
$.document.item.value -------- 将提取10自{“document”:{“item”:{“value”: 10}}}