分布式监控系统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 <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即可!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DHUtoBUAA

Python读取SQLite文件数据

  近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性、并发性要求不高的场景下可以尝试!   ...

65190
来自专栏流柯技术学院

Kerberos简介

Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket...

1.9K20
来自专栏散尽浮华

分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署

Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式。 现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的...

33290
来自专栏沃趣科技

mysqldump与innobackupex备份过程你知多少(二)

1.2.3. 使用WITH CONSISTENT SNAPSHOT子句的作用 START TRANSACTION语句使用WITH CONSISTENT SNA...

44660
来自专栏Linyb极客之路

MySQL 之 SQL 优化实战记录

N个机台将业务数据发送至服务器,服务器程序将数据入库至MySQL数据库。服务器中的javaweb程序将数据展示到网页上供用户查看。

13610
来自专栏重庆的技术分享区

如何在Debian 8上安装MySQL

MySQL是一种流行的数据库管理系统,用于Web和服务器应用程序。本指南将介绍如何在运行Debian 8(Jessie)的Linode上安装,配置和管理MySQ...

97020
来自专栏程序员的SOD蜜

在OQL上使用UPDLOCK锁定查询结果,安全的更新实体数据

SqlServer查询记录的时候提供多种锁定方式,其中UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没...

10310
来自专栏云计算

如何在Debian 7上安装MySQL

MySQL是一种流行的数据库管理系统,用于Web和服务器应用程序。本指南将介绍如何在Debian 7(Wheezy)的Linode上安装,配置和管理MySQL。

13730
来自专栏「3306 Pai」社区

海豚 VS 大象 功能对比

MySQL为多线程架构后台有多个线程处理内部操作例如:刷脏、Undo purge、checkpoint等,整体上MySQL分为两层Server/存储引擎。存储引...

30030
来自专栏Laoqi's Linux运维专列

MySQL性能调优 – 你必须了解的15个重要变量

2.6K20

扫码关注云+社区

领取腾讯云代金券