添加自定义字段
在agent配置文件添加用户自定义字段。
配置语法:
UserParameter=<key>,<command>还可以写比较复杂的表达式:
UserParameter=mysql.ping,mysqladmin -uroot ping | grep -c alive
# 如果Mysql服务器是活动状态,agent将返回“1”,否则会返回“0”。应用
UserParameter=discovery_live.stream, /usr/bin/python /root/zabbix/etc/scripts/discovery_stream.py UserParameter=live.stream[*],/usr/bin/python /root/zabbix/etc/scripts/stream.py $1此处定义了两个字段,discovery_live.stream 和 live.stream[*]。
其中discovery_live.stream是自动发现的key,执行discovery_stream.py 脚本返回的json格式的对象。
discovery_stream.py脚本获取的是频道名称字段返回一组json对象。
# discovery_stream.py
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import json
import re
def get_name():
with open("/tmp/nginx-rtmp-status.cache",'r') as f:
r = f.read()
name = re.findall(r'<name>(.*)</name>',r)[1:]
mlist=[]
for i in name:
pdict={}
pdict['{#NAME}'] = i
mlist.append(pdict)
result = {}
result['data'] = mlist
print(json.dumps(result,sort_keys=True,indent=2))
get_name()json对象:
{
"data":[
{
"{#NAME}": "cdrmldcctv11_1_720P"
},
{
"{#NAME}": "cdrmldcctv14_1_480P"
},
{
"{#NAME}": "cdrmldcctv4_1_720P"
},
{
"{#NAME}": "cdrmldcctv7_1_480P"
},
{
"{#NAME}": "cdrmldcctv14_1_360P"
},
{
"{#NAME}": "cdrmldcctv7_1_360P"
}
]
}stream.py脚本是查询对应频道码率信息:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# 导入所需库
import os
import re
import sys
import time
import urllib2
# 定义一个名为Live的类,用于处理直播流状态监控
class Live(object):
# 初始化方法,设置URL、缓存更新周期、缓存文件路径和需要关注的直播频道名称
def __init__(self, url, CACHETTL, CACHE, STREAM):
self.url = url # 直播流状态值的URL
self.CACHETTL = CACHETTL # 本地缓存文件更新时间间隔(秒)
self.CACHE = CACHE # 本地缓存文件绝对路径
self.STREAM = STREAM # 需要获取状态的具体直播频道名
# 生成或更新缓存的方法
def generate_cache(self):
# 获取当前时间戳
TIMENOW = int(time.time())
# 检查缓存文件是否存在且大小大于0
if os.path.isfile(self.CACHE) and os.path.getsize(self.CACHE) > 0:
TIMECACHE = int(os.path.getctime(self.CACHE)) # 获取缓存文件的创建时间戳
else:
TIMECACHE = 0 # 如果缓存文件不存在或为空,则将时间戳设为0
# 判断是否需要从服务器更新数据(即缓存是否过期)
if (TIMENOW - TIMECACHE) > self.CACHETTL:
try:
# 使用urllib2向指定URL发送请求并获取响应内容
r = urllib2.urlopen(self.url, timeout=1)
# 将获取到的数据写入缓存文件
with open(self.CACHE, 'w') as f:
f.write(r.read())
except urllib2.URLError as e:
# 若请求失败,输出0以便触发Zabbix报警,并退出程序
print(0)
exit(1)
# 获取直播频道流状态的方法
def get_status(self):
# 先调用generate_cache()确保数据是最新的
self.generate_cache()
# 打开并读取缓存文件的内容
with open(self.CACHE, 'r') as f:
r = f.read()
# 使用正则表达式提取直播频道名称和流入带宽信息
name = re.findall(r'<name>(.*)</name>', r)[1:] # 频道名称列表
flow = re.findall(r'<bw_in>(.*)</bw_in>', r)[1:] # 流入带宽列表
# 创建一个字典,键为频道名称,值为对应频道的流入带宽
stream = dict(zip(name, flow))
# 输出并返回指定直播频道的当前流入带宽
print(stream[self.STREAM])
# 主程序入口
if __name__ == "__main__":
# 设置直播频道流状态值的URL
url = "http://127.0.0.1:8221/stat"
# 设置本地缓存文件更新时间间隔为60秒
CACHETTL = 5
# 设置本地缓存文件的绝对路径
CACHE = "/tmp/nginx-rtmp-status.cache"
# 从命令行参数中获取需要查询的直播频道名称
STREAM = sys.argv[1]
# 创建一个Live对象实例
status = Live(url, CACHETTL, CACHE, STREAM)
# 调用get_status()方法获取并打印指定直播频道的流状态
status.get_status()重启客户端验证在master上使用zabbix-get 测试是否这个key有效。
UserParameter=discovery_live.stream, /usr/bin/python /root/zabbix/etc/scripts/discovery_stream.py
/usr/local/zabbix/bin/zabbix_get -s 192.168.100.13 -p 10052 -k discovery_live.stream-s : 客户端host
-p : 指定端口
-k : 指定验证的key
验证live.stream[*]是否有效:
UserParameter=live.stream[*],/usr/bin/python /root/zabbix/etc/scripts/stream.py $1
zabbix_get -s 10.50.32.27 -p 10052 -k live.stream[udrmldcctv16_1_1080P]
# 3118312注意事项
客户端的配置文件路径不能是root路径,zabbix-agent可以安装在/data /tmp /usr 等或者自建目录中,避免server端获取数据权限问题失败。
创建模板和应用集
创建模板
在左侧导航栏中,选择“Templates(模板)”。
点击“Create template(创建模板)”按钮。
在“Name(名称)”字段中输入模板的名称,例如“Universal Server Monitoring(通用服务器监控)”。
配置其他需要的字段,如“Description(描述)”等。
点击“Create template(创建模板)”按钮保存模板。
创建模板应用集
在左侧导航栏中,选择“Templates(模板)”。
找到并点击刚刚创建的模板。
在模板页面的左侧导航栏中,选择“Applications(应用集)”。
点击“Create application(创建应用集)”按钮。
在“Name(名称)”字段中输入应用集的名称,例如“Web Server Monitoring(Web服务器监控)”。
配置其他需要的字段,如“Description(描述)”等。
点击“Create application(创建应用集)”按钮保存应用集。
添加监控项
在应用集页面中,点击“Items(监控项)”选项卡。
点击“Create item(创建监控项)”按钮。
在“Name(名称)”字段中输入监控项的名称,例如“CPU Usage(CPU使用率)”。
在“Type of information(信息类型)”字段中选择适当的类型,如“Zabbix agent”。
在“Key(键)”字段中输入监控项的键名,如“system.cpu.usage[all]”。
配置其他需要的字段,如“Description(描述)”、“Update interval(更新间隔)”等。
点击“Create item(创建监控项)”按钮保存监控项。
关联主机
在左侧导航栏中,选择“Hosts(主机)”。
找到需要关联到模板的主机。
点击主机名称进入主机详情页面。
在左侧导航栏中,选择“Templates(模板)”。
点击“Add template(添加模板)”按钮。
在弹出窗口中选择之前创建的模板,然后点击“Select(选择)”按钮。
点击“Update(更新)”按钮保存关联关系。
评论区