用 Zabbix 监控值统计每个月触发器告警次数

场景模拟:

知名企业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,不然配置无效

第四步:验证测试结果
在这里插入图片描述
在这里插入图片描述

第一列:触发器名

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

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

扩展

如何针对 Zabbix 模板里某个主机的触发器进行修改

背景:
一个模板被多台主机使用,其中某一台主机的告警阈值需要被修改,后续其他机器的该项告警阈值需要保持不变。如果只是监控项上触发器,我们可以选择在主机上直接停用不符合阈值的告警,再新建一条阈值符合预期的触发器告警这种做法,但是如果触发器是来自自动发现规则的触发器类型的话,我们再用这种新增的做法,那涉及修改的内容就会多很多,特别是自动发现规则里面的监控项原型数量很多的时候,你要新建就会很麻烦。
现在决定对触发器类型里面的阈值设置成宏值,以为后续可以进行灵活地修改做基础。
1、监控原型、触发器类型、最新数据,如图1、2、3.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、现在查看主机的触发器以及现在的最新告警,如图4、5.
主机生成的相应触发器:
在这里插入图片描述
现在最新的告警内容
在这里插入图片描述
3、现在进入到相应的触发器,尝试进行修改。如图6.
在这里插入图片描述
因为该触发器内容源于模板里面的触发器类型,在主机里面是没法进行修改的,只能去到上一级的模板里面才能修改,但若在模板进行了修改,后续使用该模板的机器也会跟随模板而改。违背了开始的需求。

4、在模板尝试新建一条触发器类型,设置宏值以取代具体的阈值。如图7。
在这里插入图片描述
对比上下两条触发器可知,针对的内容是一样的,不同的是把原本具体设定的阈值改为了宏值。

另外在对应模板的“宏”处把新增的宏值添加上。如图8
在这里插入图片描述
5、回到主机,进行测试验证。图9、10
在这里插入图片描述
可以在下图看到尽管该值来源于模板,但仍能在主机对其进行修改,无需改动模板触发器类型内容。
在这里插入图片描述
6、进入到主机的触发器去查看,如图11.
在这里插入图片描述
可以看到多了四个带有刚才所设置的宏值的触发器。
7、查看最新告警内容。图12.
在这里插入图片描述

参考链接 :
用 Zabbix 监控值统计每个月触发器告警次数 :https://mp.weixin.qq.com/s/8q3eNCdSUwUgSsKpcAY2WA

技巧 | 如何针对 Zabbix 模板里某个主机的触发器进行修改 :https://mp.weixin.qq.com/s/sjwV6qfo1O1zdgzNzbdbtg

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Zabbix的自定义监控功能,通过编写自定义脚本实现对文本日志进行监控,并在每次出现错误信息时发送告警。以下是一个实现的示例: 1. 编写自定义脚本 您可以使用脚本语言(如Python、Perl等)编写自定义脚本,用于监控文本日志文件,并在出现错误信息时发送告警。在脚本中,您可以使用Zabbix Sender API将告警信息发送到Zabbix Server。以下是一个Python脚本的示例: ```python #!/usr/bin/env python import os import sys import re import subprocess # 定义需要监控的日志文件路径 logfile = "/path/to/your/logfile" # 定义需要监控的关键字 keywords = ["error", "failed"] # 检查日志文件是否存在 if not os.path.exists(logfile): print("Log file does not exist") sys.exit(1) # 打开日志文件,并逐行读取 with open(logfile) as f: for line in f: # 判断当前行是否包含关键字 if any(keyword in line for keyword in keywords): # 发送告警信息到Zabbix Server subprocess.call(["zabbix_sender", "-z", "zabbix_server_ip", "-s", "hostname", "-k", "custom.key", "-o", "error message"]) ``` 在上述代码中,您需要将`/path/to/your/logfile`替换为您需要监控的日志文件路径,将`["error", "failed"]`替换为您需要监控的关键字列表,将`zabbix_server_ip`替换为您的Zabbix Server IP地址,将`hostname`替换为您的主机名,将`custom.key`替换为您的自定义键名,将`error message`替换为您需要发送的告警信息。 2. 创建Zabbix自定义监控项 在Zabbix Web界面中,创建一个新的自定义监控项,并将类型设置为`Zabbix trapper`,键名设置为上述脚本中的`custom.key`,主机设置为您的主机名。 3. 创建Zabbix触发器Zabbix Web界面中,创建一个新的触发器,将条件设置为上述自定义监控项的等于1,并将动作设置为发送告警通知。 这样,当您的脚本监测到日志中出现错误信息时,将会发送告警信息到Zabbix Server,触发自定义监控项的为1,从而触发告警通知。由于每个错误日志都会触发自定义监控项的为1,因此您将会收到每个错误日志的告警通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值