任务内容:
获取Zabbix各用户告警媒介分钟级统计,形成趋势图,便于观察各用户在每分钟收到的告警数量,在后续处理中,可以根据用户在某时间段内(例如3分钟内)收到的邮件总数,来判断是否有告警洪水的现象,以便于我们及时对相关现象做出处理。注释掉短信告警语句,然后产生一次电话告警事件。
任务分析:
查阅完相关资料之后,没有办法直接从zabbix现有的配置中获取到相关的统计值。就只能从zabbix的数据库中获取,毕竟太阳底下无新鲜事,收到的这些告警邮件,也是需要相关底层数据库支撑着。从数据库中找到zabbix.alerts表符合我们收集数据的基本要求。

从alerts中,可以知道到收件人(sendto),触发器时间(Trigger DATE),主题(subject),从这三项数据,经过加工就可以获取zabbix各用户在每分钟收到的告警事件数量。注意:触发器时间(Trigger DATE),这项数据不是独立的mysql字段,而是message字段里面的数据。经过分析该message数据的来源模板是在zabbix的动作里面设置的。如下图

因此:要想正确获取到相关的时间统计,就必须在动作模板里面包含有标题:{TRIGGER.STATUS},消息内容:{Trigger.DATE}
邮件事件统计脚本内容:
[root@zabbix scripts]# cat userEmailAlertCount.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#此脚本用于从zabbxi数据库中获取各个用户的告警媒介,并统计上一分钟告警条数为了获取数据的准确性,只能获取上一分钟告警事件的统计值`
#2018.08.31
#jmucai
import time
import datetime
import sys
import MySQLdb
#获取当前日期
day = time.strftime("%Y.%m.%d", time.localtime())
#获取当前时间的上一分钟时间
min = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%H:%M")
#获取脚本传入的参数
userAlertType=sys.argv[1]
if "邮件" in userAlertType:
userName = userAlertType.split("邮件")[0]
userEmail = userAlertType.split("邮件")[1]
sqlPattern = "select alertid from alerts where message like" + \
' "%' + day + "%" + min + ':%"' + " and sendto = " + '"' + userEmail + '"' + " and subject like " + '"PROBLEM:%"'
#print sqlPattern
# 打开数据库连接
db = MySQLdb.connect("localhost", "zabbix", "hskj", "zabbix", charset='utf8' )
 
# 使用cursor()方法获取操作游标
cursor = db.cursor()
 
# 使用execute方法执行SQL语句
userEmailAlertCount = cursor.execute(sqlPattern)
print userEmailAlertCount
# 关闭数据库连接
db.close()
else:
print "传入错误的告警媒介参数"
 
zabbix配置参数:

#邮件告警统计
UserParameter=userEmailAlertCount[*],/usr/local/zabbix/scripts/userEmailAlertCount.py $1
 

以邮件告警为例
名称:自定义监控项目名称
键值:userEmailAlertCount["名字A邮件zabbix@qq.com"]:这里主要是key值的组成,这里的名字A是我们zabbix用户管理里面的别名(alias),zabbix@qq.com邮箱是我们在用户里面定义的邮件告警媒介。”邮件“是作为我们脚本里面的分隔符。
最终图像展示效果

搜索

复制

Zabbix中获取各用户告警媒介分钟级统计的更多相关文章

  1. SpringBoot中获取微信用户信息从未如此简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  2. Python 操作Zabbix API 获取ERROR级别告警信息并打印

    1.需求:有一个语音合成播报项目,要实时获取zabbix的ERROR级别以上告警信息,将该信息合成语音播报出去.(合成语音及播报已经完成) 2.现实:整理zabbix告警级别,将不太重要的告警放到ER ...

  3. 日志监控文件中获取ip,每一分钟统计一次,超过200次的计入黑名单

    一.日志文件access.log #.要从日志里面找到1分钟之内访问超过200次的 #.每分钟都运行一次 #.读取文件内容,获取到ip地址 #.把每个ip地址存起来{} #.判断ip访问的次数是否超过 ...

  4. 从session中获取当前用户的工具类

    package cn.crmx.crm.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Ht ...

  5. SAP中获取当前用户相关信息的两个函数

    函数名:TH_USER_LIST作用:可以得到SM04界面显示样式的表. 函数名:TH_USER_INFO作用:可以得到当前特定用户的机器名.当前活动窗口数.IP地址等信息

  6. SpringSecurity如何在代码中获取认证用户信息

    ⒈ public Object getCurrentUser(){ return SecurityContextHolder.getContext().getAuthentication(); } ⒉ ...

  7. 分布式系统监视zabbix讲解三之用户和用户组--技术流ken

    概述 Zabbix 中的所有用户都通过 Web 前端去访问 Zabbix 应用程序.并为每个用户分配唯一的登陆名和密码. 所有用户的密码都被加密并储存于 Zabbix 数据库中.用户不能使用其用户名和 ...

  8. 分布式系统监视zabbix讲解三之用户和用户组

    概述 Zabbix 中的所有用户都通过 Web 前端去访问 Zabbix 应用程序.并为每个用户分配唯一的登陆名和密码. 所有用户的密码都被加密并储存于 Zabbix 数据库中.用户不能使用其用户名和 ...

  9. java程序中获取kerberos登陆hadoop

    本文由作者周梁伟授权网易云社区发布. 一般我们在使用kbs登陆hadoop服务时都直接在shell中调用kinit命令来获取凭证,这种方式简单直接,只要获取一次凭证之后都可以在该会话过程中重复访问.但 ...

随机推荐

  1. python 命令行参数——argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  2. ubuntu下面配置apache

    1.在这个目录下面修改这个文件 把那个注释了 2.在这个目录下面修改这个文件 把这个改为index的目录

  3. 「Algospot」津巴布韦ZIMBABWE

    同时考验对状压DP和数位DP的理解: 传送门:$>here<$ 题意 给出一个数字$e$,现在对$e$通过$m$进行变换得到$x$:变换的要求是:1.只能改变原数字$e$各个数位的顺序(可 ...

  4. vivado2016.1下载程序出错:End of startup status: LOW

    现象 使用JTAG下载程序,发现刚开始下载就出现了End of startup status: LOW错误.但能检测到芯片,证明JTAG没烧毁. 流程 前几次下载都没有问题,然后就有问题了. (1)怀 ...

  5. 关于python深浅拷贝的个人浅见

    起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...

  6. Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu ...

  7. com.fasterxml.jackson工具类

    老版本的Jackson使用的包名为org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson. Jackson主要包含了3个模块: jackson-core ...

  8. python的多线程

    1.多线程的例子 import threading #首先导入threading模块,这是使用多线程的前提 from time import ctime,sleep def music(func): ...

  9. 树莓派设置固定IP地址

    vi /etc/dhcpcd.conf # 使用 vi 编辑文件,增加下列配置项 # 指定接口 eth0 interface eth0 # 指定静态IP,/24表示子网掩码为 255.255.255. ...

  10. Java中ArrayList类的用法

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...