前面幾篇陸續介紹了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]郵箱,發現已經收到了上面發送的郵件:

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]#
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]的報警設定,顯示如下:
如果是發送給多人,那麼需要”添加“多個郵箱賬号!
點選“配置”->“動作”,這裡可以點選右邊的“建立動作”(事件源是”觸發器“,也就是Triggers),也可以直接使用預設動作進行修改
這裡我選擇修改預設的Report problems to Zabbix administrators
注意:
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次,除非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] 主題 測試
然後登陸[email protected]郵箱,發現已經收到郵件了。如下:
其他zabbix界面上的配置和上面差不多,隻需要将mail.sh改為zabbix_sendemail.py即可!
*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************