1. 程式人生 > >zabbix郵件報警及自定義腳本實戰

zabbix郵件報警及自定義腳本實戰

zabbix組件 zabbix item監控項 trriger觸發器配置 zabbix報警媒介配置 zabbix報警自定義腳本

一、概要

1、說明
本文是繼<LNMP環境部署zabbix實戰>與<agent部署與zabbix web配置>的又一後續補充篇,眾所周知作為監控系統主要就是數據采集,監控數據存儲,再根據監控數據進行判斷產生事件,進行報警通知管理員,同時通過展示接口進行數據的展示;本文主要關註zabbix的報警系統的實現及自定義腳本發送報警;
2、知識回顧
1)zabbix邏輯組件:
主機組(host groups)
主機(hosts)
應用(applications)
監控項(items)
觸發器(triggers)
事件(events)
動作(actions):條件(conditions)和操作(operations)

媒介(media):發送通知通道;
通知(notifications)
遠程命令(remote command)
報警升級(escalation)
模板(template)
圖形(graph)
屏幕(screens)
幻燈(side show)
2)zabbix架構:
技術分享圖片
根據以上的組件及架構說明:
zabbix監控系統包括zabbix-server(服務端)用來收集分析展示監控數據,同時定義各監控項數據的觸發條件,用於報警;zabbix-agent(監控端)用於收集所在設備上的監控數據(可自定義監控什麽),監控數據既可以主動也可以被發送到zabbix-server進行處理;同時也可以執行遠程命令;在zabbix-server與zabbix-agent之間添加了zabbix_proxy這個代理監控服務,使用得zabbix監控系統支持分布式監控系統;

3、實驗重點與環境
對於部署好了zabbix-server與agent並應用了對應的模塊監控後,在web GUI上我們可以看到各監控的數據,對於出故障的服務我們需要提供報警通知管理的功能;因此本文主要講述如何完善和自定義郵件報警功能;
zabbix-server: CentOS7.2_x64 172.16.3.152
zabbix-agent: CentOS7.2_x64 172.16.3.216 httpd服務
測試當httpd服務故障時第一步嘗試遠程重啟httpd服務,如果不能解決發送郵件給管理員,恢復時發送恢復郵件!通過對http服務的狀態感知報警系統的配置與作用!

二、zabbix報警系統

1、說明
zabbix報警系統是基於其他zabbix組件,並非是獨立的,關系如下圖所示:
技術分享圖片

如上圖所示,zabbix server通過item(可自定義) 從zabbix agent獲取被監控端的各項數據,通過觸發器trigger定義生成事件狀態,滿足條件後通過action處理,或發送郵件,或對目標主機遠程執行命令!
2、發送報警信息的前提
a)配置發送信息的信道
管理-->管理媒介類型-->創建媒介類型-->如圖:
技術分享圖片

註意:在zabbix server上默認要安裝有postfix服務無需要額外配置即可;以此為接下來的郵件發送測試服務器!實際當中這裏配置購買的郵箱服務;自行搭建的服務器需要有備案的公網ip和郵箱服務的相關認證!

b)添加收件人
管理 --> 用戶 --> 報警媒介 --> 添加 --> 類型(localmail) --> 收件人"root@localhost" -->添加-->更新
技術分享圖片
技術分享圖片

c)監控項item與觸發器trriger
如有item需要有被監控端這裏添加主機node2.san.com(172.16.3.216)如何通過web GUI添加,能主如何安裝agent請參考之前文章;添加好被監控主機並應用監控模板即包含常規的application item以及trriger;

三、添加item監控項與觸發器

任務如下:
測試當httpd服務故障時第一步嘗試遠程重啟httpd服務,如果不能解決發送郵件給管理員,恢復時發送恢復郵件!
1、添加httpd的監控項
本次針對node2.san.com 上安裝httpd服務,通過httpd服務的監控完成,故障發生與恢復時產生的事件進行發送報警郵件
默認Linux監控模塊沒有自帶監控httpd(apache),所以這裏需要針該主機創建監控httpd tcp 80端口的item監控項;
配置-->主機-->node2.san.com-->監控項-->創建監控項 -->名稱"web server status" -->鍵值"net.tcp.listen[80]" (可以選擇其他的方式) 如圖:
技術分享圖片
有了監控項(item)就有了從agent獲取httpd狀態的數據,以及默認的圖形;
監測中-->最新數據-->找到node2.san.com中的 web server status -->圖形 如圖:
技術分享圖片

光有item項及收獲的數據還不行,需要對這些數據進行定義觸發器,當滿足條件時發出報警;如定義針對httpd狀態的觸發器,當狀態不是1時(即80端口down異常) 做出action動作,或遠程執行命令,或發出郵件等信息報警通知管理員!

2、添加httpd的觸發器trriger
配置-->主機-->node2.san.com-->觸發器-->創建觸發器-->名稱"web server down" -->嚴重性"嚴重" -->表達式-->添加 -->監控項選擇"選擇web server status" -->功能"最新的T值 = N" -->最後一個T值 "計數" 並填寫1 -->插入 如圖:
技術分享圖片
最終表達式如下: {web service:net.tcp.listen[80].last(#1)}=0
如圖:
技術分享圖片

有了監控數據項,也有了對應的觸發器,現在只剩下當觸發器被觸發時如何做了,換句話說就是httpd最後一次值是0時(即httpd服務down)如何做?這裏就需要定義action動作了,action分兩種,一種是遠程執行命令,如重啟httpd服務;一種是發郵件等信息通知到管理員!
3、添加action動作
動作:
配置-->動作-->創建動作-->名稱 填寫"Email" -->新的觸發條件 "添加" -->選擇web server down 觸發器 如圖:
技術分享圖片
操作:
配置-->操作-->默認操作步驟持續時間 "60" -->默認接收人 "故障{TRIGGER.STATUS}:{HOSTNAME1}:{TRIGGER.NAME}" -->默認信息
"報警主機:{HOSTNAME1}
報警時間:{EVENT.DATE} {EVENT.TIME}
報警等級:{TRIGGER.SEVERITY}
報警信息:{TRIGGER.NAME}
報警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態: {TRIGGER.STATUS}:{ITEM.VALUE1}

Item values:
Original event ID: {EVENT.ID}"--->添加 如圖:
技術分享圖片

操作-->新的 -->步聚 "1 - 1" 表示動作第一步 -->步聚持續時間 默認60s 可不修改 表示第一步處理時間 -->操作類型"遠程命令" -->目標列表 添加"當前主機" -->類型-->自定義腳本 -->執行在 zabbix agent端 -->命令 "sudo systemctl restart httpd"--> 添加 如圖:
技術分享圖片

註意此處遠程執行命令方式有多種:如ssh/telnet/IPMI/全局腳本/自定義腳本等方式;最為方便的是通過agent執行
但這裏有兩個前提需要在agent機器上配置/etc/sudoers
修改添加以下兩項:
大約在56行 註釋Defaults requiretty
添加: zabbix ALL=(ALL) NOPASSWD: ALL
別一個前提是修改zabbix_agent.conf文件中的
EnableRemoteCommands=1
重啟zabbix-agent服務

操作-->新的 -->步聚"2-0" 表示第二步 即第一步沒有 處理好 從第二步開始一直執行 -->步聚持續時間 默認60s 可不修改 表示第一步處理時間 -->操作類型"發送消息" -->發送到用戶 "選擇admin" -->僅送到" 創建的localmail 信道" -->添加 -->更新 如圖:
技術分享圖片

恢復操作:
配置-->恢復操作-->默認接收人"恢復{TRIGGER.STATUS}:{HOSTNAME1}: {TRIGGER.NAME} OK!" -->默認信息
"
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
" -->添加
最終action動作如下:
技術分享圖片
對恢復操作添加發送信息
恢復操作-->操作-->添加-->操作類型-->發送消息-->發送到用戶-->選擇 "Admin (Zabbix Administrator)" -->僅送到"localmail" -->添加-->更新 如圖:
技術分享圖片

四、測試

關閉agent 上httpd服務
[root@node2 ~]# systemctl stop httpd
查看zabbix事件信息
監測中-->問題 如圖:
技術分享圖片
可以發現已經監測到httpd服務宕機了,並且第一步的遠程執行命令成功~!
同時在zabbix server機器上通過命令行輸入mail查看root郵件

[root@zabbix ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 9 messages 9 new
>N  1 [email protected]  Fri Mar  2 16:33  22/983   "故障PROBLEM:web service:web server down"
  N  2 [email protected]  Fri Mar  2 16:40  21/906   "恢復OK:web service: web server down OK!"
& 
1
Message  1:
From [email protected]  Fri Mar  2 16:34:24 2018
Return-Path: <[email protected]>
X-Original-To: root@localhost
Delivered-To: [email protected]
From: <[email protected]>
To: <[email protected]>
Date: Fri, 02 Mar 2018 16:34:24 +0800
Subject: 故障PROBLEM:web service:web server down
Content-Type: text/plain; charset="UTF-8"
Status: R

報警主機:web service
報警時間:2018.03.02 16:32:21
報警等級:High
報警信息:web server down
報警項目:net.tcp.listen[80]
問題詳情:web server status:0
當前狀態: PROBLEM:0

Item values:
Original event ID: 53& 

2
Message 2:
From [email protected]  Fri Mar  2 16:40:55 2018
Return-Path: <[email protected]>
X-Original-To: root@localhost
Delivered-To: [email protected]
From: <[email protected]>
To: <[email protected]>
Date: Fri, 02 Mar 2018 16:40:55 +0800
Subject: 恢復OK:web service: web server down OK!
Content-Type: text/plain; charset="UTF-8"
Status: R

告警時間:2018.03.02 16:32:21
告警等級:High
告警信息: web server down
告警項目:net.tcp.listen[80]
問題詳情:web server status:1
當前狀態:OK:1
事件ID:53&

五、添加自定義腳本發送信息

添加媒介
管理-->管理媒介類型-->創建媒介類型-->媒介名稱"sentscript" -->類型"腳本" -->腳本名稱"sentmail.sh" -->添加三個腳本參數"{ALERT.SENDTO} ; {ALERT.SUBJECT} ; {ALERT.MESSAGE}" 分別表示收件人,標題,信息; 如圖:
技術分享圖片

添加收件人
管理 --> 用戶 --> 報警媒介 --> 添加 --> 類型(sentscript) --> 收件人"root@localhost" -->添加-->更新

修改httpd觸發器中的第二步報警信息為sentscript
在管理--動作-->Email-->操作-->編輯2-0步 -->僅送到 修改為"sentscript" -->更新 如圖:
技術分享圖片

編寫自定義腳本
在zabbix server上默認存放自定義腳本的目錄在

cat /usr/lib/zabbix/alertscripts/sentmail.sh

#!/bin/bash
contact=$1
subject="$2"
content="$3"

echo "${content}" | mail -s $subject $contact

註意這裏的腳本名稱必須和媒介中的腳本名保持一致!
重啟zabbix-server服務

測試:
關閉node2.san.com上的httpd服務查看zabbix 信息

如圖:
技術分享圖片

在zabbix service上命令行輸入mail

[root@zabbix alertscripts]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
......省略.......
>N 15 Zabbix Monitoring Sy  Fri Mar  2 17:17  23/998   "故障PROBLEM:web"
& 15
Message 15:
From [email protected]  Fri Mar  2 17:17:17 2018
Return-Path: <[email protected]>
X-Original-To: root@localhost
Delivered-To: [email protected]
Date: Fri, 02 Mar 2018 17:17:17 +0800
To: [email protected], [email protected],
    [email protected]
Subject: 故障PROBLEM:web
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: application/octet-stream
From: [email protected] (Zabbix Monitoring System)
Status: R

[Binary content]

說明我們算定義發送郵件腳本正常!

總結:

本次通過對zabbix web GUI添加httpd服務的監控項,定義觸發器,添加報警媒介,以及自定義腳本報警媒介;同時對報警做了分級處理;如第一次嘗試遠程命令恢復;再發送郵件到管理的一系列日常實用的報警配置!采用3.2版本並且已經配置成中文,如有錯誤或遺漏之處,歡迎留言指正交流!謝謝!

zabbix郵件報警及自定義腳本實戰