需求是這樣的:
用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,如需轉載請自行聯系原作者