需求是这样的:
用zabbix来监控报警,那么时间久了、报警次数多了、人员忙了、这些情况会导致一些报警内容被忽略,所以需要一个报表来反应谁收到了什么样的报警信息,收到了多少条,从而来判断这些情况是否被处理及处理进度,以及可以更好的分配人力资源,防止工作都压到1个人身上。
需求分析假设:
1、用zabbix自带报表功能,但是这个东西存在局限性,还未发现有此功能;
2、数据库中查找表的信息,从来进行二次判断进行结果展现。
进程:
选用了第二种方法:数据库。
<a href="http://s3.51cto.com/wyfs02/M01/12/46/wKioL1MBe0WznLCqAAFF2pbfyeg318.jpg" target="_blank"></a>
大概看了下zabbix数据库中的表,大概找出了下面3个表可能存在相应的关系:
<a href="http://s3.51cto.com/wyfs02/M01/12/46/wKiom1MBe9Hybm9EAAaZHYtcBn0331.jpg" target="_blank"></a>
其实,我这里的结果只使用了1表和3表2张表进行结果展现,其实结果呈现的方法很多种,可能最后还会需要“用户组”表,进行结果展现及组员管理。
我这里将结果展现成了下面的内容:(应用级监控邮件报警的历史发送情况)
<a href="http://s3.51cto.com/wyfs02/M02/12/46/wKiom1MBfV7xnSb3AAVoLXW5YJg592.jpg" target="_blank"></a>
1
2
<code>邮件筛选sql:</code>
<code>select</code> <code>userid,name, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%CPU systime%'</code> <code>then</code> <code>1 end) systime, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%CPU USE%'</code> <code>then</code> <code>1 end) cpuuse, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%Disk I%'</code> <code>then</code> <code>1 end) diskio, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%available memory%'</code> <code>then</code> <code>1 end) mem, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%is unreachable%'</code> <code>then</code> <code>1 end) downtime, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%restarted%'</code> <code>then</code> <code>1 end) restart, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%has been changed%'</code> <code>then</code> <code>1 end) passchange, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%Free disk%'</code> <code>then</code> <code>1 end) disk, </code><code>sum</code><code>(</code><code>case</code> <code>when subject not like </code><code>'%CPU%'</code> <code>and subject not like </code><code>'%available memory%'</code> <code>and subject not like </code><code>'%Disk%'</code> <code>and subject not like </code><code>'%is unreachable%'</code> <code>and subject not like </code><code>'%restart%'</code> <code>and subject not like </code><code>'%has been changed%'</code> <code>and subject not like </code><code>'%disk%'</code> <code>then</code> <code>1 end) other from (</code><code>select</code> <code>a.userid,c.name,a.subject from alerts a,</code><code>users</code> <code>c where a.mediatypeid=</code><code>'6'</code> <code>and a.clock></code><code>'1392220800'</code> <code>and a.clock<</code><code>'1392307200'</code> <code>and a.userid=c.userid and a.status=</code><code>'1'</code> <code>and a.subject not like </code><code>'%OK%'</code><code>) at group by userid;</code>
<code>短信筛选sql:</code>
<code>select</code> <code>userid,name, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%CPU systime%'</code> <code>then</code> <code>1 end) systime, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%CPU USE%'</code> <code>then</code> <code>1 end) cpuuse, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%Disk I%'</code> <code>then</code> <code>1 end) diskio, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%available memory%'</code> <code>then</code> <code>1 end) mem, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%is unreachable%'</code> <code>then</code> <code>1 end) downtime, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%restarted%'</code> <code>then</code> <code>1 end) restart, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%has been changed%'</code> <code>then</code> <code>1 end) passchange, </code><code>sum</code><code>(</code><code>case</code> <code>when subject like </code><code>'%Free disk%'</code> <code>then</code> <code>1 end) disk, </code><code>sum</code><code>(</code><code>case</code> <code>when subject not like </code><code>'%CPU%'</code> <code>and subject not like </code><code>'%available memory%'</code> <code>and subject not like </code><code>'%Disk%'</code> <code>and subject not like </code><code>'%is unreachable%'</code> <code>and subject not like </code><code>'%restart%'</code> <code>and subject not like </code><code>'%has been changed%'</code> <code>and subject not like </code><code>'%disk%'</code> <code>then</code> <code>1 end) other from (</code><code>select</code> <code>a.userid,c.name,a.subject from alerts a,</code><code>users</code> <code>c where a.mediatypeid=</code><code>'3'</code> <code>and a.clock></code><code>'1392220800'</code> <code>and a.clock<</code><code>'1392307200'</code> <code>and a.userid=c.userid and a.status=</code><code>'1'</code> <code>and a.subject not like </code><code>'%OK%'</code><code>) at group by userid;</code>
其中sql的条件可以更改。
需要特别注意的是
clock字段是 unix的时间戳,需要的筛选条件可以进行转换进行获得。
本文转自 陈延宗 51CTO博客,原文链接:http://blog.51cto.com/407711169/1359724,如需转载请自行联系原作者