前面幾篇陸續介紹了zabbix3.0.3監控系統的部署和監控項配置,今天這裏分享下zabbix3.0.3的郵件報警的配置過程~
因爲採用sendmail發送郵件,經常會被認爲是垃圾郵件被拒,因此不推薦這種方式!
這裏,針對zabbix報警信息的發送,能夠採用下面兩種方式中的任意一種:
1)利用sendEmail程序來發送報警郵件.sendEmail是一個輕量級,命令行的SMTP郵件客戶端,很是完美,使用簡單而且功能強大.這個被設計用在php、bash 、perl和web站點使用。
2)利用python腳原本發送郵件php
1、利用sendemail發送報警郵件
1)先下載安裝包到本地,解壓。
[root@Zabbix-server ~]# cd /usr/local/src/
[root@Zabbix-server src]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@Zabbix-server src]# tar -zvxf sendEmail-v1.56.tar.gz
[root@Zabbix-server src]# cd sendEmail-v1.56
[root@Zabbix-server sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/
[root@Zabbix-server sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@Zabbix-server sendEmail-v1.56]# file /usr/local/bin/sendEmail
/usr/local/bin/sendEmail: a /usr/bin/perl -w script text executablehtml
#查看sendemail的幫助信息
[root@Zabbix-server src]# cd sendEmail-v1.56
[root@Zabbix-server sendEmail-v1.56]# /usr/local/bin/sendEmail python
sendEmail-1.56 by Brandon Zehm <caspian@dotconf.net>web
Synopsis: sendEmail -f ADDRESS [options]bash
Required:
-f ADDRESS from (sender) email address
* At least one recipient required via -t, -cc, or -bcc
* Message body required via -m, STDIN, or -o message-file=FILE服務器
Common:
-t ADDRESS [ADDR ...] to email address(es)
-u SUBJECT message subject
-m MESSAGE message body
-s SERVER[:PORT] smtp mail relay, default is localhost:25運維
Optional:
-a FILE [FILE ...] file attachment(s)
-cc ADDRESS [ADDR ...] cc email address(es)
-bcc ADDRESS [ADDR ...] bcc email address(es)
-xu USERNAME username for SMTP authentication
-xp PASSWORD password for SMTP authentication測試
Paranormal:
-b BINDADDR[:PORT] local host bind address
-l LOGFILE log to the specified file
-v verbosity, use multiple times for greater effect
-q be quiet (i.e. no STDOUT output)
-o NAME=VALUE advanced options, for details try: --help misc
-o message-content-type=<auto|text|html>
-o message-file=FILE -o message-format=raw
-o message-header=HEADER -o message-charset=CHARSET
-o reply-to=ADDRESS -o timeout=SECONDS
-o username=USERNAME -o password=PASSWORD
-o tls=<auto|yes|no> -o fqdn=FQDNui
Help:
--help the helpful overview you're reading now
--help addressing explain addressing and related options
--help message explain message body input and related options
--help networking explain -s, -b, etc
--help output explain logging and other output options
--help misc explain -o options, TLS, SMTP auth, and more編碼
2)安裝下依賴
[root@Zabbix-server sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y
[root@Zabbix-server sendEmail-v1.56]# /usr/local/bin/sendEmail -f from@huanqiu.cn -t to@huanqiu.cn -s smtp.huanqiu.cn -u "我是郵件主題" -o message-content-type=html -o message-charset=utf8 -xu from@huanqiu.cn -xp WEE78@12l$ -m "我是郵件內容"
命令說明:
/usr/local/bin/sendEmail #命令主程序
-f from@uhanqiu.cn #發件人郵箱
-t to@huanqiu.cn #收件人郵箱
-s smtp.huanqi.cn #發件人郵箱的smtp服務器
-u "我是郵件主題" #郵件的標題
-o message-content-type=html #郵件內容的格式,html表示它是html格式
-o message-charset=utf8 #郵件內容編碼
-xu from@huanqiu.cn #發件人郵箱的用戶名
-xp WEE78@12l$ #發件人郵箱密碼
-m "我是郵件內容" #郵件的具體內容
例如:
[root@Zabbix-server alertscripts]# /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u "我是郵件主題" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp WEE78@12l$ -m "我是郵件內容"
Oct 14 19:38:29 zabbix-server sendEmail[65454]: Email was sent successfully!
[root@Zabbix-server alertscripts]#
登錄wangshibo@huanqiu.cn郵箱,發現已經收到了上面發送的郵件:
3)下面開始設置zabbix的sendemail郵件發送腳本
進入zabbix自定義的指定目錄,我這裏是/usr/local/zabbix
能夠查看zabbix_server.conf配置文件AlertScriptsPath變量是如何定義的。
找到AlertScriptsPath選項,能夠自定義位置
[root@Zabbix-server sendEmail-v1.56]# cat /usr/local/zabbix/etc/zabbix_server.conf
.......
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/local/zabbix/alertscripts
[root@Zabbix-server sendEmail-v1.56]# cd /usr/local/zabbix/alertscripts/
下面是sendemail的郵件發送腳本(這個腳本通用,確保了zabbix郵件報警信息不會出現中文亂碼)
---------------------------------------------------------------------
下面我用的是阿里的企業郵件,smtp地址是smtp@huanqiu.cn
若是用163郵箱,smtp地址是smtp.163.com
若是是騰訊企業郵箱,smtp是smtp.exmail.qq.com
--------------------------------------------------------------------
[root@Zabbix-server alertscripts]# cat mail.sh
#!/bin/bash
#
# Filename: SendEmail.sh
# Revision: 1.0
# Date: 2014/07/04
# Author: Qicheng
# Email:
# Website: http://www.cnblogs.com/kevingrace/
# Description: zabbix郵件告警腳本
# Notes: 使用sendEmail
#
# 腳本的日誌文件
LOGFILE="/tmp/Email.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
SMTP_server='smtp.huanqiu.cn' #SMTP服務器,變量值須要自行修改
username='ops@huanqiu.cn' #用戶名,變量值須要自行修改
password='WEE78@12l$' #密碼,變量值須要自行修改
from_email_address='ops@huanqiu.cn' #發件人Email地址,變量值須要自行修改
to_email_address="$1" #收件人Email地址,zabbix傳入的第一個參數
message_subject_utf8="$2" #郵件標題,zabbix傳入的第二個參數
message_body_utf8="$3" #郵件內容,zabbix傳入的第三個參數
# 轉換郵件標題爲GB2312,解決郵件標題含有中文,收到郵件顯示亂碼的問題。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"
# 轉換郵件內容爲GB2312,解決收到郵件內容亂碼
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 發送郵件
sendEmail='/usr/local/bin/sendEmail'
set -x
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312
[root@Zabbix-server alertscripts]# chmod 755 mail.sh
[root@Zabbix-server alertscripts]# touch /tmp/Email.log
[root@Zabbix-server alertscripts]# chown zabbix.zabbix /tmp/Email.log
[root@Zabbix-server alertscripts]# chown zabbix.zabbix mail.sh
測試腳本發送郵件
[root@Zabbix-server alertscripts]# ./mail.sh wangshibo@huanqiu.cn 主題 測試
[root@Zabbix-server alertscripts]#
登錄wangshibo@huanqiu.cn郵箱,發現已經收到了上面發送的郵件:
4)接着,登錄zabbix界面,進行設置
注意:zabbix 3.0 須要在爲alert腳本定義參數,之前的版本參數都固定的,如今用戶能夠本身定義命令行的參數了。添加的參數也就是腳本中的$一、$二、$3等。
點擊"管理"->"報警媒介類型"->點擊最右邊的"建立媒體類型"
輸入上面在alertscripts目錄下建立的腳本名稱mail.sh,類型選擇腳本並添加如下3個參數,
分別對應sendEmail.sh腳本須要的3個參數:收件人地址、主題、詳細內容
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
這裏注意一下:
安裝zabbix 3.0以後,寫的腳本一直髮信不成功,手動執行時能夠的。
那是由於zabbix3.0以後,能夠自定義參數了。因此不寫參數,它是不會傳參數的。
在2.x版本不存在這個問題,默認會傳3個參數。
點擊「管理」->「用戶"->"zabbix" (我這裏的zabbix的管理員帳號是zabbix)
上面添加的是發送給wangshibo@huanqiu.cn的報警設置,顯示以下:
若是是發送給多人,那麼須要」添加「多個郵箱帳號!
點擊「管理」->「用戶羣組」,點擊zabbix administrator後面的調用模式。
點擊用戶羣組Zabbix administrators的」權限「,點擊」添加「,選擇全部權限 ,最後點擊下面的」更新「
點擊「配置」->「動做」,這裏能夠點擊右邊的「建立動做」(事件源是」觸發器「,也就是Triggers),也能夠直接使用默認動做進行修改
這裏我選擇修改默認的Report problems to Zabbix administrators
修改動做名稱爲」zabbix報警「。
注意:
zabbix默認的告警內容不豐富,信息不足,我作了以下的調整(默認信息和恢復信息是一致的):
告警主機:{HOST.NAME}
主機IP: {HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}
---------------------------------------------------------------------------------------------------------------------------
如上,在「配置」->「動做」裏的「條件」裏的設置
1)計算方式
設置爲「與/或」,說明只要觸發其中任何一個都會發報警郵件
2)條件:
上面默認設置的是下面兩個:
A:維護狀態 非在 維護
B:觸發器值 = 問題
按照上面的設置後,當被監控主機宕機或zabbix_agent(10050端口)關閉後,就會發生報警~
可是這些遠遠不能知足咱們的運維監控需求。
好比當被監控主機的根磁盤爆滿時,須要發送報警郵件!這就須要額外添加上面「動做」裏的「條件」設置
如在「條件」裏追加「主機」和「模板」,將所監控的主機和被監控主機採用的模板都選上爲觸發條件
這樣,當任何一個條件被觸發時,都會發送報警郵件!
------------------------------------------------------------------------------------------------------------------------------------------------------------
設置「操做」,能夠點擊」新的「添加操做規則,也能夠直接修改已有的操做規則:
默認的步驟是1-3,也便是從1開始到3結束。一旦故障發生,就是執行sendEmail.sh腳本發生報警郵件給zabbix用戶和zabbix administrator組。
假如故障持續了1個小時,它也只發送3次,第1-3次(即前3次)郵箱發送給zabbix用戶,時間間隔爲0秒。
若是改爲1-0,0是表示不限制.無限發送
間隔就是默認持續時間60秒。那麼一個小時,就會發送60封郵件。
若是須要短信報警的話,能夠再建立一條新的動做,選擇短信腳本。
-------------------------------------------------------------
也能夠在添加新的」操做「,好比上面前3次報警發送給zabbix。
還能夠再設置第30-35次報警(也就是報警事故已經發生30秒以後)發送給另外的用戶
這樣,就建立了兩個"操做",上面我只建立了一個操做
-------------------------------------------------------------
這樣,zabbix利用sendemail發送報警信息的設置就已經完成了!
測試:
將192.168.1.19服務器的zabbix_agent進程關閉。
發現能夠正常收到故障報警郵件(收到3次郵件PROBLEM故障郵件):
待192.168.1.19服務器的zabbix_agent進程恢復後,也有報警郵件(收到1次OK(恢復狀態)的郵件)。
最後,點擊」報表「->」動做日誌「,能夠看到觸發動做的次數(右邊還看查看到郵件發送狀態「已發送」)。
故障報警只會有3次,除非test主機狀態改變,也就是正常恢復的時候,纔會再觸發一次,不然不會再觸發。
------------------------------------------------------------------------------------------------------------------------------------------------------------
以上是zabbix利用sendemail發送報警郵件的配置。
下面介紹下利用python腳本發送報警郵件的配置!
首先是建立python腳本zabbix_sendemail.py,以下:
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts
[root@Zabbix-server alertscripts]# cat zabbix_sendemail.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import pdb import smtplib import string import time import sys reload(sys) sys.setdefaultencoding('utf-8') #pdb.set_trace() #HOST = "mail.gw.com.cn" def S_Mail(): HOST = "smtp.huanqiu.cn" SUBJECT = sys.argv[2].decode('utf-8').encode('gbk') TO =sys.argv[1] FROM = "ops@huanqiu.cn" text = sys.argv[3].decode('utf-8').encode('gbk') BODY = string.join(( "FROM: %s" % FROM, "To: %s" % TO, "Subject: %s" %SUBJECT, "", text ),"\r\n") server = smtplib.SMTP() server.connect(HOST,25) #server.starttls() server.login("ops@huanqiu.cn","WEE78@12l$") server.sendmail(FROM,[TO],BODY) server.quit() # email log 記錄日誌 with open('/data/logs/zabbix/Email.log','a') as f: date=time.strftime("%y-%m-%d %H:%M:%S") str = date + " " + TO +" " + SUBJECT + "\r\n" + "\n" str1 = str.decode('gbk').encode('utf-8') # print("%s" %str1) f.write(str1) if __name__=='__main__': S_Mail()
[root@Zabbix-server alertscripts]# mkdir -p /data/logs/zabbix/
測試郵件發送:
[root@Zabbix-server alertscripts]# ./zabbix_sendemail.py wangshibo@huanqiu.cn 主題 測試
[root@Zabbix-server alertscripts]#
而後登錄wangshibo@huanqiu.cn郵箱,發現已經收到郵件了。以下:
其餘zabbix界面上的配置和上面差很少,只須要將mail.sh改成zabbix_sendemail.py便可!