上次通过zabbix api获取到监控的主机组,这次通过zabbix api获取一下告警的信息,把zabbix告警信息集成到自己的系统中,如下:
上面的图是zabbix网页自带的告警展示,下面图是自己通过调取zabbix api获取到告警信息并展示到自己的网页上。后端使用的是flask,前端页面使用的是jinjia2模板。
实现过程如下,先看后端调用zabbix api并把结果进行封装传递给trigger.html,并进行渲染,后端代码如下:
# 获取zabbix trigge
@app.route('/zabbix/trigger', methods=['GET', 'POST'])
def zabbix_trigger():
json_result = modules_zabbix.zabbix_auth()
if json_result:
response = json.loads(json_result)
data = {
"jsonrpc": "2.0",
"method": "trigger.get",
"params": {
"output": "extend",
"selectHosts": "extend",
"sortfield": "priority",
"sortorder": "DESC",
"only_true": "1",
"monitored" : "1",
"active":"1",
"filter": {
"value": 1
},
},
"id": response['id'],
"auth": response['result']
}
response = modules_zabbix.zabbix_request(data)
if response:
app.logger.debug(response)
response = json.loads(response)
return render_template('zabbix/trigger.html', response=response)
zabbix_auth和zabbix_request方法请参考我前面一篇文章,要使用zabbix api需要先进行认证,获取token才能继续获取其它的值,文章链接:https://my.oschina.net/zhuangweihong/blog/789976 。使用zabbix api的trigger.get方法获取触发器的信息,selectHosts表示把主机的信息也获取出来,因为前端要进行展示。另外,only_true、monitored、active、filter参数主要是把有效的告警信息获取出来,具体可参考zabbix官网:https://www.zabbix.com/documentation/3.0/manual/api/reference/trigger/get。
通过zabbix api获取完数据,就可以在前端进行展示,看下前端的代码:
<div class="container">
<div class="col-md-8">
<table class="table">
<thead>
<tr>
<th>主机</th>
<th>告警描述</th>
</tr>
</thead>
<tbody>
{% for result in response['result'] %}
<tr>
{% for host in result['hosts'] %}
<td>{{ host['host'] }}</td>
{% endfor %}
<td>{{ result['description'] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
获取告警信息后,感觉zabbix api获取一些数据还是比较方便的,获取出告警出来代码量不多。可以再使用withUnacknowledgedEvents这个来把我们没确认过的告警筛选出来。
最后附上本人的网络课堂地址,如有兴趣请点击: 实践哥