[技术干货] Zabbix监控值统计每个月触发器告警次数

[复制链接]
乐维 发表于 2020-8-27 09:57:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
场景模拟:
知名企业A公司的运维人员小智,想统计一下每个月发生的告警数量,于是他去查询数据库表alerts告警通知表,但是他发现界面上出现的一些问题(触发器生效),没有记录到alerts表中。因为只有触发器生效并且执行了告警通知的动作后,才会把这个触发器记录到alerts表中,然而,对于他来说,他想要的效果是统计一个月中,产生的触发器告警数(即问题数),下面由我们来为小智出谋划策把
实验过程:(pymysql查询数据库)
第一步:安装pymysql库
注意:因为我的zabbix用的数据库是mysql,所以用这个pymysql数据库连接库
1.png
第二步:编写脚本
脚本如下:
import pymysql
def main():
   """
   host:数据库IP
   port:数据库端口
   user:数据库用户名
   password:数据库密码
   db:数据库名
   """
   host = 'localhost'
   port = 3306
   user = 'zabbix'
   password = 'zabbix'
   db = 'zabbix'
   mysql = pymysql.connect(host=host,port=port,user=user,passwd=password,db=db)
   sql = "select name,count(name) '发送次数',from_unixtime(clock) '发生时间' from events where clock in (select clock from events where TIMESTAMPDIFF(day,from_unixtime(clock,'%Y-%m-%d'),current_date)<30) and value=1 and source=0 group by name order by count(name) desc;"
   cursor = mysql.cursor()
   cursor.execute(sql)
   for col in cursor.fetchall():
       print(col[0].strip()+"  |  "+str(col[1])+"  |  "+col[2].strftime('%Y-%m-%d'))
   cursor.close()
   mysql.close()
if __name__ == "__main__":
   main()
解析一下:
sql并没有做优化,读者可自行优化改查询语句
Sql语句中,events表中的source=1代表是触发器的时间,value=1代表触发器的状态是problem即(问题)
2.png
脚本中sql语句在数据库查询的结果如下图
3.png

第三步:把脚本添加到agent自定义键值中
4.png
5.png
记得要重启zabbix_agent,不然配置无效
第四步:验证测试结果
6.png
7.png
第一列:触发器名
第二列:每个月这个触发器出现的次数
第三列:是触发器第一次出现的时间

技术交流欢迎加入Q群:177428068






上一篇:分享3个zabbix常见问题的处理方法
下一篇:Zabbix使用javascript+jsonpath预处理动态生成监控项
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子237

发布主题

乐维社区

微信公众号

版权所有 © 2016-2019 九一乐维丨粤ICP备17007026号