如何利用Zabbix的problem.get获取主机名与问题描述,展示基础设施当前故障
解决Zabbix API
problem.get获取主机名和故障描述的问题 嘿,我来帮你搞定这个需求!你现在用problem.get只拿到了基础事件信息,想要主机名和像「缺少可用交换空间」这种故障描述,只需要在API请求里加两个关键参数就行,具体如下:
修改后的API请求代码
problemlist = zapi.do_request('problem.get', { "output": "extend", "selectAcknowledges": "extend", "recent": "true", "sortfield": ["eventid"], "sortorder": "DESC", # 新增以下两个核心参数 "selectHosts": "extend", # 获取故障关联的主机完整信息 "selectTrigger": "extend" # 获取触发故障的触发器详情(包含故障描述) })
字段提取说明
返回的每个problem对象里,现在会包含hosts和trigger两个嵌套结构,你可以从中提取需要的信息:
- 日期:把
clock字段(时间戳)转换成目标格式,比如Python里用datetime.datetime.fromtimestamp(int(problem['clock'])).strftime("%d.%m")就能得到19.03这样的日期格式 - 主机名:取
problem['hosts'][0]['host'](大部分场景下一个故障只关联一台主机,直接取第一个元素即可) - 故障描述:取
problem['trigger']['description'],这就是Zabbix仪表盘上显示的直观故障提示文本
示例处理代码
比如用Python遍历结果并输出你想要的格式:
import datetime for problem in problemlist['result']: date_str = datetime.datetime.fromtimestamp(int(problem['clock'])).strftime("%d.%m") host_name = problem['hosts'][0]['host'] problem_desc = problem['trigger']['description'] print(f"{date_str} {host_name} {problem_desc}")
运行后就能得到你期望的输出效果:
19.03 hostsap1 缺少可用交换空间;18.03 hostsmb2 Zabbix_agentd is not running!
内容的提问来源于stack exchange,提问作者Karol
相关产品推荐
相关产品推荐

