天天看點

分布式監控系統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 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]郵箱,發現已經收到了上面發送的郵件:

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

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

[ $? -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]#

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

4)接着,登陸zabbix界面,進行設定

注意:zabbix 3.0 需要在為alert腳本定義參數,以前的版本參數都固定的,現在使用者可以自己定義指令行的參數了。添加的參數也就是腳本中的$1、$2、$3等。

點選"管理"->"報警媒介類型"->點選最右邊的"建立媒體類型" 

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

輸入上面在alertscripts目錄下建立的腳本名稱mail.sh,類型選擇腳本并添加以下3個參數,

分别對應sendEmail.sh腳本需要的3個參數:收件人位址、主題、詳細内容

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

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

這裡注意一下:

安裝zabbix 3.0之後,寫的腳本一直發信不成功,手動執行時可以的。

那是因為zabbix3.0之後,可以自定義參數了。是以不寫參數,它是不會傳參數的。

在2.x版本不存在這個問題,預設會傳3個參數。

點選“管理”->“使用者"->"zabbix"  (我這裡的zabbix的管理者賬号是zabbix)

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

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

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

分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署
點選“管理”->“使用者群組”,點選zabbix administrator後面的調用模式。
分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署
點選使用者群組Zabbix administrators的”權限“,點選”添加“,選擇所有權限 ,最後點選下面的”更新“
分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署

點選“配置”->“動作”,這裡可以點選右邊的“建立動作”(事件源是”觸發器“,也就是Triggers),也可以直接使用預設動作進行修改

這裡我選擇修改預設的Report problems to Zabbix administrators

分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署
 修改動作名稱為”zabbix報警“。
分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署

注意:

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}

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

---------------------------------------------------------------------------------------------------------------------------

如上,在“配置”->“動作”裡的“條件”裡的設定

1)計算方式

設定為“與/或”,說明隻要觸發其中任何一個都會發報警郵件

2)條件:

上面預設設定的是下面兩個:

A:維護狀态 非在 維護

B:觸發器值 = 問題

按照上面的設定後,當被監控主機當機或zabbix_agent(10050端口)關閉後,就會發生報警~

但是這些遠遠不能滿足我們的運維監控需求。

比如當被監控主機的根磁盤爆滿時,需要發送報警郵件!這就需要額外添加上面“動作”裡的“條件”設定

如在“條件”裡追加“主機”和“模闆”,将所監控的主機和被監控主機采用的模闆都選上為觸發條件

這樣,當任何一個條件被觸發時,都會發送報警郵件!

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

------------------------------------------------------------------------------------------------------------------------------------------------------------

設定“操作”,可以點選”新的“添加操作規則,也可以直接修改已有的操作規則:

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

預設的步驟是1-3,也即是從1開始到3結束。一旦故障發生,就是執行sendEmail.sh腳本發生報警郵件給zabbix使用者和zabbix administrator組。

假如故障持續了1個小時,它也隻發送3次,第1-3次(即前3次)郵箱發送給zabbix使用者,時間間隔為0秒。

如果改成1-0,0是表示不限制.無限發送

間隔就是預設持續時間60秒。那麼一個小時,就會發送60封郵件。

如果需要短信報警的話,可以再建立一條新的動作,選擇短信腳本。

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

-------------------------------------------------------------

也可以在添加新的”操作“,比如上面前3次報警發送給zabbix。

還可以再設定第30-35次報警(也就是報警事故已經發生30秒之後)發送給另外的使用者

這樣,就建立了兩個"操作",上面我隻建立了一個操作

這樣,zabbix利用sendemail發送報警資訊的設定就已經完成了!

測試:

将192.168.1.19伺服器的zabbix_agent程序關閉。

分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署
發現可以正常收到故障報警郵件(收到3次郵件PROBLEM故障郵件):
分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署
待192.168.1.19伺服器的zabbix_agent程序恢複後,也有報警郵件(收到1次OK(恢複狀态)的郵件)。
分布式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署

最後,點選”報表“->”動作日志“,可以看到觸發動作的次數(右邊還看檢視到郵件發送狀态“已發送”)。

故障報警隻會有3次,除非test主機狀态改變,也就是正常恢複的時候,才會再觸發一次,否則不會再觸發。

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

 ------------------------------------------------------------------------------------------------------------------------------------------------------------

以上是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] 主題 測試

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

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

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

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