这两天在学习zabbix,在设置邮件报警时遇到了点状况。zabbix web端时间记录显示邮件已发送,sendEmail邮件却发送失败,查看/tmp/22.log日志文件有以下错误日志
Dec 27 18:27:30 chensh sendEmail[5440]: ERROR => You must specify at least o ne recipient via -t, -cc, or -bcc
380 print() on closed filehandle LOGFILE at /usr/local/bin/sendEmail/sendEmail l ine 1136.
收索网上的资料多有不全,经过不懈寻找终于解决了问题,是WEB端没有配置脚本传参的缘故。特此整合下分享给童鞋们,希望后者一切顺利,并谢过前者。
一、安装sendEmail一、安装sendEmail
sendEmail下载地址:http://caspian.dotconf.net/menu/Software/SendEmail/
[iyunv@chensh ~]yum install perl-Net-SSLeay perl-IO-Socket-SSL -y[iyunv@chensh ~]tar xvzf sendEmail-v1.56.tar.gz
[iyunv@chensh ~]cp sendEmail-v1.56/sendEmail/sendEmail /usr/local/bin/
[iyunv@chensh ~]chmod 755 /usr/local/bin/sendEmail
测试邮件功能: -f from@163.com 发件人邮箱-t to@163.com 收件人邮箱-s smtp.163.com 发件人邮箱的smtp服务器-u "我是邮件主题" 邮件的标题-o message-content-type=html 邮件内容的格式,html表示它是html格式-o message-charset=utf8 邮件内容编码-xu from@163.com 发件人邮箱的用户名-xp 123456 发件人邮箱密码-m "我是邮件内容" 邮件的具体内容
二、网易邮箱设置
选择【设置】->【OP3/SMTP】开通POP3/SMTP服务
POP3服务器: pop.163.com
SMTP服务器: smtp.163.com
三、zabbix服务器端发送邮件脚本
[iyunv@chensh ~]mkdir -p /usr/local/zabbix/share/zabbix/alertscripts
[iyunv@chensh ~]vim /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts 重启zabbix server [iyunv@chensh ~]vim /usr/local/zabbix/share/zabbix/alertscripts/mail.sh #!/bin/bash
# 脚本的日志文件
LOGFILE="/tmp/Email.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
SMTP_server='smtp.163.com' # SMTP服务器,变量值需要自行修改
username='zabbix@163.com' # 用户名,变量值需要自行修改
password='zabbix' # 密码,变量值需要自行修改
from_email_address='zabbix@163.com' # 发件人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/zabbix/share/zabbix/alertscripts/mail.sh'
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
[iyunv@chensh ~]touch /tmp/Email.log [iyunv@chensh ~]chown zabbix:zabbix /tmp/Email.log [iyunv@chensh ~]chown zabbix:zabbix /usr/local/zabbix/share/zabbix/alertscripts/mail.sh [iyunv@chensh ~]chmod +x /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
四、zabbixWEB配置Email告警方式
选择【Administration】->【Users】,配置user。
选择【Administration】->【Users】,配置Media。
【Administration】->【media types】
分别对应mail.sh脚本需要的3个参数: 收件人地址 主题 详细内容 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
【configuration】->【actions】->【actions】
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警名称:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件ID: {EVENT.ID}
Recovery subject里写:{TRIGGER.STATUS}: {TRIGGER.NAME}};{HOST.NAME} Recovery message里写:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警名称:{TRIGGER.NAME}
目前状态:{TRIGGER.STATUS}
事件ID: {EVENT.ID}
报警URL: {TRIGGER.URL}
详细信息:
1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}
【configuration】->【actions】->【conditions】
【configuration】->【actions】->【operations】
五、测试
关闭agent服务器,查看报警邮箱能否收到报警,有问题请查看/tmp/22.log日志文件解决。
|