分佈式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署

前面幾篇陸續介紹了zabbix3.0.3監控系統的部署和監控項配置,今天這裏分享下zabbix3.0.3的郵件報警的配置過程~
由於採用sendmail發送郵件,常常會被認爲是垃圾郵件被拒,所以不推薦這種方式!
這裏,針對zabbix報警信息的發送,可以採用下面兩種方式中的任意一種:
1)利用sendEmail程序來發送報警郵件.sendEmail是一個輕量級,命令行的SMTP郵件客戶端,非常完美,使用簡單並且功能強大.這個被設計用在php、bash 、perl和web站點使用。
2)利用python腳本來發送郵件

一、利用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 executable

#查看sendemail的幫助信息
[root@Zabbix-server src]# cd sendEmail-v1.56
[root@Zabbix-server sendEmail-v1.56]# /usr/local/bin/sendEmail

sendEmail-1.56 by Brandon Zehm <[email protected]>

Synopsis: sendEmail -f ADDRESS [options]

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=FQDN


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 [email protected] -t [email protected] -s smtp.huanqiu.cn -u "我是郵件主題" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp WEE78@12l$ -m "我是郵件內容"

命令說明:
/usr/local/bin/sendEmail                     #命令主程序
-f [email protected]                          #發件人郵箱
-t [email protected]                              #收件人郵箱
-s smtp.huanqi.cn                            #發件人郵箱的smtp服務器
-u "我是郵件主題"                               #郵件的標題
-o message-content-type=html          #郵件內容的格式,html表示它是html格式
-o message-charset=utf8                   #郵件內容編碼
-xu [email protected]                       #發件人郵箱的用戶名
-xp WEE78@12l$                             #發件人郵箱密碼
-m "我是郵件內容"                             #郵件的具體內容

例如:
[root@Zabbix-server alertscripts]# /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.huanqiu.cn -u "我是郵件主題" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp WEE78@12l$ -m "我是郵件內容"

Oct 14 19:38:29 zabbix-server sendEmail[65454]: Email was sent successfully!
[root@Zabbix-server alertscripts]#

登陸[email protected]郵箱,發現已經收到了上面發送的郵件:

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地址是[email protected]
如果用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='[email protected]'                                 #用戶名,變量值需要自行修改
password='WEE78@12l$'                                     #密碼,變量值需要自行修改
from_email_address='[email protected]'                  #發件人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 [email protected] 主題 測試
[root@Zabbix-server alertscripts]#
登陸[email protected]郵箱,發現已經收到了上面發送的郵件:

4)接着,登陸zabbix界面,進行設置
注意:zabbix 3.0 需要在爲alert腳本定義參數,以前的版本參數都固定的,現在用戶可以自己定義命令行的參數了。添加的參數也就是腳本中的$1、$2、$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)

上面添加的是發送給[email protected]的報警設置,顯示如下:

如果是發送給多人,那麼需要”添加“多個郵箱賬號!

 

點擊“管理”->“用戶羣組”,點擊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 = "[email protected]"
    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("[email protected]","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 [email protected] 主題 測試
[root@Zabbix-server alertscripts]#

然後登陸[email protected]郵箱,發現已經收到郵件了。如下:

其他zabbix界面上的配置和上面差不多,只需要將mail.sh改爲zabbix_sendemail.py即可!

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章