场景模拟: 知名企业A公司的运维人员小智,想统计一下每个月发生的告警数量,于是他去查询数据库表alerts告警通知表,但是他发现界面上出现的一些问题(触发器生效),没有记录到alerts表中。因为只有触发器生效并且执行了告警通知的动作后,才会把这个触发器记录到alerts表中,然而,对于他来说,他想要的效果是统计一个月中,产生的触发器告警数(即问题数),下面由我们来为小智出谋划策把 实验过程:(pymysql查询数据库) 第一步:安装pymysql库 注意:因为我的zabbix用的数据库是mysql,所以用这个pymysql数据库连接库 第二步:编写脚本 脚本如下: 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即(问题) 脚本中sql语句在数据库查询的结果如下图 第三步:把脚本添加到agent自定义键值中 记得要重启zabbix_agent,不然配置无效 第一列:触发器名
第四步:验证测试结果
第二列:每个月这个触发器出现的次数
第三列:是触发器第一次出现的时间