mysql 触发器更新另一列_Zabbix监控值统计每个月触发器告警次数

场景模拟:

知名企业A公司的运维人员小智,想统计一下每个月发生的告警数量,于是他去查询数据库表alerts告警通知表,但是他发现界面上出现的一些问题(触发器生效),没有记录到alerts表中。因为只有触发器生效并且执行了告警通知的动作后,才会把这个触发器记录到alerts表中,然而,对于他来说,他想要的效果是统计一个月中,产生的触发器告警数(即问题数),下面由我们来为小智出谋划策把

实验过程:(pymysql查询数据库)

第一步:安装pymysql库

注意:因为我的zabbix用的数据库是mysql,所以用这个pymysql数据库连接库

75d083ab02ffac4966a6698645284e16.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即(问题)

939b0e56902e3d70afe31b2bf4502e97.png

脚本中sql语句在数据库查询的结果如下图

e0b93eb040c496c8353fee224fbd04ba.png

第三步:把脚本添加到agent自定义键值中

a3324bf28d6a2a781d1d7e9c5cbd859c.png

bf3e7f5cf92f224c8f82ffd0697efbae.png

记得要重启zabbix_agent,不然配置无效

第四步:验证测试结果

9aa015c6ab3cd9581fc636dfdde72438.png

542fe86508481e8d13ddbccc382c1c75.png

第一列:触发器名

第二列:每个月这个触发器出现的次数

第三列:是触发器第一次出现的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值