本節內容:
- Zabbix的通知功能
- 定義接收告警的用戶
- 定義Action
- Zabbix自定義腳本發送報警郵件
一、Zabbix的通知功能
在配置好監控項和觸發器之后,一旦正常工作中的某觸發器狀態發生改變,一般意味着有異常情況發生,此時通常需要采取一定的動作(action),如告警或者執行遠程命令。 實現zabbix的通知功能,一般需要兩個步驟:定義所需的“媒介”和配置一個”動作”。 媒介類型有:E-mail,SMS,Jabber和自定義的通知腳本。我這里就使用E-mail了。
1.定義媒介
登錄zabbix web管理控制台,點擊Administration—> Media types,可以看到有3個定義好了的媒介,不用這3個,點擊右上角的”Create media type”。

填寫信息:

二、定義接收告警的用戶
1.創建用戶組
(1)點擊Administration—> User groups,點擊右上角的Create user group。

(2)輸入組名,點擊Add。

2.創建用戶
(1)點擊Administration—> Users,點擊右上角的Create user。

在User列填入個人信息:

(2)點擊Media,點擊Add,選擇媒介和接收郵件的時間等信息:


(3)點擊Permissions,根據這個新添的用戶給予合適的權限

三、定義Action
點擊Configuration—> Actions,點擊右上角的Create action:

Action配置:

Conditions配置:



四、Zabbix自定義腳本發送報警郵件
Zabbix發送報警郵件還可以采用自定義的腳本來發送。
1.Python腳本發郵件
(1)定義Media types
如下圖,添加以下3個參數,分別對應sendEmail.sh腳本需要的3個參數:收件人地址、主題、詳細內容。
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

【注意】: 很多人安裝zabbix 3.0之后,寫的腳本一直發信不成功,手動執行時可以的。那是因為zabbix3.0之后,可以自定義參數了。所以不寫參數,它是不會傳參數的。在2.x版本不存在這個問題,默認會傳3個參數。腳本中可以使用$1, $2, $3來調用 action 中的 郵件的收件人, Default Subject, Default Message。
(2)定義Users的Media

(3)python報警腳本
# cd /usr/local/zabbix-3.0.1/share/zabbix/alertscripts/ # vim zabbix_sendmail.py
#!/usr/bin/python # coding:utf-8 import smtplib from email.mime.text import MIMEText import sys # 郵箱服務器地址 mail_host = 'smtp.exmail.qq.com' # 郵箱用戶名 mail_user = '01115004@wisedu.com' # 郵箱密碼 mail_pass = 'zjk230640' mail_postfix = 'wisedu.com' def send_mail(to_list,subject,content): me = mail_user+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content) msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
修改腳本權限:
# chmod +x zabbix_sendmail.py # chown -R zabbix.zabbix zabbix_sendmail.py
(4)修改zabbix_server配置
# vim /usr/local/zabbix-3.0.1/etc/zabbix_server.conf
添加如下配置:
### Option: AlertScriptsPath AlertScriptsPath=/usr/local/zabbix-3.0.1/share/zabbix/alertscripts
重啟zabbix_server。
(5)配置Actions

【注意】:每觸發一次Action,都會在Reports—>Action log看到記錄:

2.shell腳本發郵件
(1)先安裝sendEmail
[root@care local]# tar zxf sendEmail-v1.56.tar.gz [root@care local]# cp sendEmail-v1.56/sendEmail /usr/local/bin
將寫好的腳本上傳到/usr/local/zabbix-3.0.1/share/zabbix/alertscripts。這里為了業務需求,需要定制化發送郵件的內容,腳本內容如下:
#!/bin/bash ###Description:This script is used to alarm. ###Written by: jkzhao - jkzhao@wisedu.com ###History: 2016-08-10 Second release. ###Modification: Please modify the variables host, user and passwd. # 獲取默認的郵件接收者,郵件主題,郵件正文 to=$1 subject=$2 bodyOrgin=$3 # 獲取eventid #eventid=grep "event ID" $bodyOrgin |awk '{print $4}' eventid=$(echo $bodyOrgin | grep "event ID" |awk '{print $NF}') echo "eventid:$eventid" > /tmp/test.txt # shell調用存儲過程,獲取主鍵viewid,傳入參數:eventid,輸出:viewid host=172.16.9.112 user=root passwd=zabbix database=zabbix viewid=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "call generateAlertView($eventid,@result)" 2>/dev/null | awk 'NR>1') echo "viewid:$viewid" >> /tmp/test.txt group=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "select alerts_view_group.group from alerts_view_group where viewid = $viewid" 2>/dev/null | awk 'NR>1') echo "group:$group" >> /tmp/test.txt body=$bodyOrgin"; 影響業務: "$group # 因為需要格式化發送郵件的內容,將拼接好的body信息寫入文件中再做處理 echo $body | awk -F';' '{for(i=1;i<=NF;i++){print $i}}' > /tmp/messages.txt # 將文件中出現的^M刪除掉 sed -i 's/\x0D//g' /tmp/messages.txt # 刪除以空格開頭的行前面的空格 sed -i 's/^\s*//g' /tmp/messages.txt # 由於zabbix無論是故障還是恢復都是要發郵件的,但是對於故障和恢復的郵件內容需要定制為不同的內容,因此需要先獲取到是故障還是恢復 state=$(echo $subject | awk -F: '{print $2}') # 按照安心守護要求修改郵件正文內容 if [ $state == "PROBLEM" ]; then sed -i 's/Trigger:/異常對象:/' /tmp/messages.txt sed -i '/Trigger severity:/{h;d};/Item values:/{G}' /tmp/messages.txt sed -i 's/Trigger severity:/異常等級:/' /tmp/messages.txt sed -i 's/Item values:/異常原因:/' /tmp/messages.txt sed -i '/Original event/d' /tmp/messages.txt sed -i '/Trigger status:/d' /tmp/messages.txt sed -i '$a發生時間: ' /tmp/messages.txt sed -i "s/發生時間: /發生時間: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt # 把發生故障時的alertView插入alerts_view表 alertValue=$(grep "異常原因" /tmp/messages.txt | awk -F: 'BEGIN{ORS=""};{for(i=3;i<=NF;++i) {print $i}}') echo "alertValue:$alertValue" >> /tmp/test.txt mysql -u${user} -p${passwd} -h${host} -D${database} -e "UPDATE alerts_view set alertValue='${alertValue}' WHERE viewid = '${viewid}'" 2>/dev/null sed -i 's/Warning/風險/' /tmp/messages.txt sed -i 's/Disaster/宕機/' /tmp/messages.txt else sed -i 's/Trigger:/恢復對象:/' /tmp/messages.txt sed -i 's/Item values:/恢復內容:/' /tmp/messages.txt sed -i 's/影響業務/恢復業務/' /tmp/messages.txt sed -i '/Original event/d' /tmp/messages.txt sed -i '/Trigger status:/d' /tmp/messages.txt sed -i '/Trigger severity:/d' /tmp/messages.txt sed -i '$a發生時間: ' /tmp/messages.txt sed -i "s/發生時間: /發生時間: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt fi /usr/local/bin/sendEmail -f monitor@wisedu.com -t "$to" -s smtp.exmail.qq.com -u "$subject" -o message-content-type=text -o message-charset=utf-8 -o message-file=/tmp/messages.txt -xu monitor@wisedu.com -xp anxinshouhu@2015 2>>/tmp/22.log
(2)添加Media types

(3)給指定的用戶添加Media

(4)配置Actions,為了業務需求定制Default message

(5)郵件展示
故障郵件展示:

故障恢復郵件展示:

