前面几篇陆续介绍了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 <caspian@dotconf.net>

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 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脚本定义参数,以前的版本参数都固定的,现在用户可以自己定义命令行的参数了。添加的参数也就是脚本中的$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)

上面添加的是发送给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即可!

分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署的更多相关文章

  1. 企业级分布式监控系统-Zabbix基础

    1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...

  2. 分布式监控系统--zabbix

    1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...

  3. 企业级分布式监控系统--zabbix

    目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...

  4. Zabbix 4.0.24 完整安装

    依赖包安装: yum install net-snmp* libssh-devel libssh2-devel -y Zabbix server安装: wget https://cdn.zabbix. ...

  5. 【Zabbix】分布式监控系统Zabbix【二】

    一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...

  6. 【Zabbix】分布式监控系统Zabbix【一】

    一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户 ...

  7. 分布式监控系统之Zabbix基础使用

    前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...

  8. 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  9. 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)

    一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...

  10. 分布式监控系统Zabbix-3.0.3-完整安装记录(0)

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

随机推荐

  1. jquery实现拖拽以及jquery监听事件的写法

    很久之前写了一个jquery3D楼盘在线选择,这么一个插件,插件很简单,因为后期项目中没有实际用到,因此,有些地方不是很完善,后面也懒得再进行修改维护了.最近放到github上面,但是也少有人问津及s ...

  2. 文件快速搜索工具-Everything的使用(转)

    首先它是一款基于名称实时定位文件和目录的搜索工具,有以下几个优点: 快速文件索引 快速文件搜索 较低资源占用 轻松分享文件索引 实时跟踪文件更新 通过使用everything小工具,可以提高我们的工作 ...

  3. 安卓开发_浅谈Service

    一.Service(服务) Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,区别在于它没有UI界面,是在后台运行的组件. public abst ...

  4. Lucene总体架构

    Lucene总的来说是:• 一个高效的,可扩展的,全文检索库.• 全部用Java实现,无须配置.• 仅支持纯文本文件的索引(Indexing)和搜索(Search).• 不负责由其他格式的文件抽取纯文 ...

  5. Visual Studio发布Web项目报错:Unable to add 'xxx' to the Web site. Unable to add file 'xxx'. The specified file could not be encrypted.

    背景 Visual Studio下的Web项目 现象 发布时遇到Unable to add 'xxx' to the Web site.  Unable to add file 'xxx'. The ...

  6. 使用POI实现数据导出Excel表格

    package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...

  7. 问题解决——Group Box控件遮挡其他控件

    转载请保持文章的完整性并显要地注明出处 本文链接:http://blog.csdn.net/wlsgzl/article/details/38042301 ====================== ...

  8. IdentityHashMap的使用场景

    IdentityHashMap的使用场景 JDK1.4就加入了这个map类型,它是使用 == 判断相等,而不是hashmap的equals方法判断相等. 那么,它有什么应用场合呢? 当然是需要我们必须 ...

  9. jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验

    一.下载插件包. 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.jQuery表单验证插件----添加class属性形式的校验 <!DOCTY ...

  10. 烂泥:通过vsphere给esxi添加本地硬盘

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 公司ESXi服务器的硬盘空间不够使用,现在新加了一块硬盘在ESxi服务器上.在服务器上添加完硬盘后,在Vsphere上是看不到新加硬盘的. 下面我们来通 ...