zabbix 通过smtp外部邮箱实现邮件报警

简介

在zabbix的使用中,最重要的一点就是完善的报警机制,作为监控平台,需要时刻关注机器和服务的运行状态,更重要的是发现故障之后需要及时的报警给相关人员,早点发现问题,将隐患消除在未然阶段。这样才能保证服务的稳定运行。

报警的方式是多种多样的,微信、短信和邮件报警是我们比较常见的方式。而且报警的频率和策略直接影响着运维人员的重视程度和检错效率。如果整个报警列表中都是一些无关痛痒的提示、轻度警告。而他们的发送频率又特别的高,则非常容易错过真正关键的报警。

本文主要介绍使用sendemail实现外部邮箱报警功能,短信、微信报警在此处不做讨论。

报警邮箱准备

  1. 邮件报警有两种情况:

    1. Zabbix服务端只是单纯的发送报警邮件到指定邮箱,发送报警邮件的这个邮箱账号是Zabbix服务端的本地邮箱账号(例如:root@localhost.localdomain),只能发送,不能接收外部邮件。但使用本地邮箱发送邮件经常会被认为是垃圾邮件,从而被拦截归入垃圾箱。故此推荐使用外部邮箱充当发件人。 
    2. 使用一个可以在互联网上正常收发邮件的邮箱账号(例如:xxx@163.com),通过在Zabbix服务端中设置,使其能够发送报警邮件到指定邮箱。

如采用外部邮箱发送邮件,外部邮箱需支持smtp/pop3功能才可正常供zabbix端调用。本例采用网易邮箱充当外部邮箱发送报警信息。需做以下设置:

至此,外部邮箱设置完毕。

Zabbix配置更改

修改zabbix_server.con

在410行的地方: AlertScriptsPath=/usr/lib/zabbix/alertscripts (脚本存放目录路径,视实际情况选择路径,注意权限)


写入脚本

        这里有2个脚本:

        第一个是zabbix调用的发送邮件的脚本. 他会调用第二个脚本去发送邮件。(Media types的script name)

第一个脚本:

[root@zabbix ~]# cat /usr/lib/zabbix/alertscripts/sendemail.sh

#!/bin/bash

SMTP_server='smtp.xxx.com'          # SMTP服务器

username='************'             # 用户名

password='***********'     # 密码

from_email_address='**********'          # 发件人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/bin/sendEmail'

$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

echo "`date +"%F %T"` send to $to_email_address" >> /tmp/send.log

  这个脚本解释的很详细我就不解释了

这里的用户名和密码是发件人的,通过SMTP发送邮件。可以使用QQ,163任何一个提供了SMTP的邮箱公司邮箱也可以。要修改的就是smtp,用户名,密码,发件人的邮箱。smtp可以去邮箱提供商获取,或者百度

脚本加权限

chmod +x sendemail.sh

第二个脚本是perl 写的sendemail,专门用来通过smtp发送邮件的

第二个脚本:http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

(不是sendmail,这个是perl 写的一个使用smtp发送邮件的脚本)

wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

tar xvf sendEmail-v1.56.tar.gz

cd sendEmail-v1.56

cp sendEmail  /usr/bin/

chmod +x /usr/bin/sendEmail

  解压: tar xvf sendEmail-v1.56.tar.gz

将里边的sendEmail 复制到/usr/bin/

  然后测试第一个脚本

/usr/lib/zabbix/alertscripts/sendemail.sh xxxxxx@qq.com zabbixtest " this is zabbix test mail ! "

如果能收到说明这两个脚本都没问题


Zabbix网页端

此处使用sendemail脚本配置发送报警邮件。sendemail是用perl语言写的一个smtp发邮件的小程序,详情可自行查阅

  1. 媒介类型

管理---->报警媒介类型-----创建媒体类型

名称:sendemail

类型:脚本

脚本名称:sendemail.sh

脚本参数:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

  1. 用户报警媒介

  用户配置下的报警媒介.

管理--->用户--->选择用户--->报警媒介 添加类型、邮件地址(接收的邮件地址)

 

  1. 当触发tiggers时发生的动作...这就是发送邮件的入口

配置--> 动作 -->创建动作

名称:Send to Admin

默认接收人:【故障】服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障

默认信息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}

事件ID:{EVENT.ID}

恢复信息: 这个是当报警回复正常发送邮件的内容. 这些变量都是系统定义好.你可以引用 也可以自己定义变量.

恢复主题:【恢复】 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

恢复信息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:

事件ID:{EVENT.ID}

  1. 设置触发器条件

  2. 定义触发条件后进行的动作

这样基本就完成了。

查看日志

报警设置完成后,可以在报表-à动作日志 查看相关动作,成功与否都会有日志记录,如发送失败可根据错误提示查看错误提示。根据错误提示排错。

 

参考链接:https://www.iyunv.com/thread-111385-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值