- 需求背景
- 同事的检查结果
- 说明
- 实现方法
- 一,编写脚本
- 1.1 脚本功能
- 1.2 脚本内容
- 1.3 脚本执行结果
- 二,修改zabbix-agent2配置文件
- 三,重启zabbix-agent2
- 四,创建监控模板
- 4.1 创建模板
- 4.2 创建监控项
- 4.3 创建自动发现规则
- 4.4 创建监控项原型
- 4.5 创建触发器原型
- 五,被控主机关联模板
- 六,验证
- 6.1 自发现监控项
- 6.2 最新数据
- 6.3 告警信息
在当前的工作环境里,有着应用节点号的概念,每个部署单元的应用节点号是不同的。应同事需求,希望能通过zabbix对各部署单元中的应用节点号状态进行监控,应用组同事负责节点号状态的检查,我负责对其检查结果监控。经过沟通,应用组同事会将检查结果保存为Json,我通过Zabbix解析Json,从而实现监控。为此我觉得使用JsonPath的方式监控会更适合当前场景,在工作中实现了该监控功能后,特此记录、总结、分享。
同事的检查结果[root@zabbix-ys scripts]# cat /tmp/ap_check.log
{"task":"Green Light","host":"192.168.1.10","date":"20220522010000","result":{"130016":"1","130017":"1","130018":"0"}}
说明
/tmp/ap_check.log文件是应用的检查结果,会存放在每台被控主机上。文件“result”中的key(“130016”,“130017”…)为应用节点号,“1”为正常,“0”为异常需要告警。
实现方法 一,编写脚本 1.1 脚本功能通过解析/tmp/ap_check.log文件,生成两种方法“lld.ap”和“get_state”。“lld.ap”方法输出所有节点号,用于应用节点号的自动发现。“get_state”方法输出所有节点号及对应的状态信息,用于应用节点号监控项。
1.2 脚本内容[root@zabbix-ys ~]# vim /etc/zabbix/scripts/check_ap.py
# -*- coding:utf-8 -*-
import json
import sys
with open("/tmp/ap_check.log","r") as f:
ap_info = json.load(f)
def get_num():
lld = []
for k in ap_info['result'].keys():
lld.append({"{#AP_NUM}":k})
print(json.dumps(lld))
def get_state():
res = {}
for k,v in ap_info['result'].items():
tmp = {}
tmp["state"] = int(v)
res[k] = tmp
print(json.dumps(res))
def main():
if sys.argv[1] == "lld.ap":
get_num()
if sys.argv[1] == "get.state":
get_state()
if __name__ == "__main__":
main()
1.3 脚本执行结果
[root@zabbix-ys ~]# /etc/zabbix/python374/bin/python3 /etc/zabbix/scripts/check_ap.py lld.ap
[{"{#AP_NUM}": "130016"}, {"{#AP_NUM}": "130017"}, {"{#AP_NUM}": "130018"}]
[root@zabbix-ys ~]# /etc/zabbix/python374/bin/python3 /etc/zabbix/scripts/check_ap.py get.state
{"130016": {"state": 1}, "130017": {"state": 1}, "130018": {"state": 0}}
二,修改zabbix-agent2配置文件
[root@zabbix-ys ~]# vim /etc/zabbix/zabbix_agent2.d/check_ap.conf
UserParameter=ap_check_cmd[*],/etc/zabbix/python374/bin/python3 /etc/zabbix/scripts/check_ap.py
三,重启zabbix-agent2
[root@zabbix-ys ~]# systemctl restart zabbix-agent2.service
四,创建监控模板
由于显示的原因,只截取了模板中重要部分。
4.1 创建模板 4.2 创建监控项用于获取应用节点状态的详细信息。
用于获取所有的应用节点号,以便创建监控项。
使用“相关项目”类型,让自动发现规则与模板中“获取节点状态信息”监控项相结合,创建自发现监控项原型。
注意此时要在进程中,设置JSONPath,通过变量{#AP_NUM}取state的值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)