关于邮件报警,有很多方案,这里选择的是稳定性较好,使用较多的msmtp+mutt方案。
该方案有一个很好的地方在于不用自己来搭建独立的mail服务器,可以使用第三方mail,这种方法不仅可以有效的解决未知email地址被处理为垃圾邮件的问题,同时由于第三方的稳定服务来提供报警的准确和及时性。
其实最关键的一点是msmtp可以使用gmail。
我们需要两个组件msmtp和mutt,其中msmtp是发送email的关键,mutt来优化msmtp。
【msmtp】
sudo apt-get install -y msmtp
配置msmtp
touch /var/log/msmtp.log
vim ~/.msmtprc
account default
host smtp.126.com
port 25
from [email protected]
auth login
tls off
user [email protected]
password xxxxxxx
logfile /var/log/msmtp.log
chmod 600 .msmtprc
chown zabbix.zabbix /var/log/zabbix -R
chown zabbix.zabbix /var/log/msmtp.log
chmod 777 /var/log/msmtp.log
【mutt】
安装
sudo apt-get install -y mutt
sudo mv /etc/Muttrc /etc/Muttrc.back
sudo vim /etc/Muttrc
set sendmail="/usr/bin/msmtp" #你的msmtp命令路径
set use_from=yes
set realname="[email protected]"
set editor="vim"
测试邮件
echo "hello zabbix" | mutt -s "zabbix test" [email protected]
【zabbix配置】
修改zabbix的脚本位置路径
sudo vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/scripts/
重启zabbix
sudo service zabbix-server restart
sudo mkdir -p /usr/local/zabbix/scripts/
sudo chown zabbix.zabbix /usr/local/zabbix -R
sudo vim /usr/local/zabbix/scripts/mail.sh
#!/bin/sh
echo "$3" | mutt -s "$2" $1
sudo chown zabbix.zabbix mail.sh
sudo chmod 777 mail.sh
测试脚本
./mail.sh [email protected] zabbix测试 你好zabbix
zabbix web界面通过右上角的 profile中的media设置发送的邮箱
通过工具栏的administrator-Media types中的email 来配置mail发送的方式
type选择 script
name是mail.sh
PS:报警系统的web配置教复杂,在下一节研究mysql和系统基础报警中详细讨论。本节将只实现基础报警功能。
【关于package安装zabbix无法报警的问题】
如果日志和数据库中都显示zabbix发送了邮件但是你却没有收到邮件。
排除垃圾邮件被屏蔽的问题,那么就是zabbix本身的问题。网上并没有类似的解决方案,但是通过分析可以找出问题所在。
分析问题:
1.zabbix的权限不存在问题,脚本已经赋予了最高权限并且所属组和用户都是zabbix。
2.脚本本身如果直接用ubuntu用户执行是可以正确发送和接收到邮件的。那么排除脚本本身的问题。
3.既然zabbix的日志和DB中都显示了已经send了mail,说明至少zabbix在做sendmail这一项操作,但是其实并没有send成功。那么问题的根源就出在zabbix send mail这一过程之中。
4.我们知道mutt是调用msmtp去发送email,那么zabbix在发送mail的过程应该是这样的。
触发报警—>zabbix用户调用bash—>执行mail.sh脚本
如果执行成功则发送肯定成功,如果执行失败则肯定无法收到邮件。
测试和解决问题
1.手动登录zabbix用户来模拟zabbix发送邮件,我们发现第一步就会出错,因为ubuntu在apt-get安装zabbix时自动创建的zabbix用户默认是不具有home目录和登录shell的,那么至少应该给与zabbix 调用bash的权限否则zabbix用户是不可能成功执行mail.sh脚本的。
解决方法如下:
sudo vim /etc/passwd
将zabbix行最后的/bin/false 改为 /bin/bash。
保存退出后,这时用sudo su - zabbix切换到zabbix ,虽然没有home目录 但是是有登录shell的。
2.执行mail.sh测试
./mail.sh [email protected] zabbix测试 你好zabbix
提示
msmtp: account default not found: no configuration file available
Error sending message, child exited 78 ().
Could not send the message.
通过对msmtp我们了解,在实用apt-get安装的msmtp,它的配置文件默认调用的当前用户home目录下的.msmtprc,我们虽然在ubuntu用户下创建了.msmtprc但是zabbix目录下却没有这个文件,所以zabbix还是无法实用msmtp。
解决方法如下:
sudo mkdir /home/zabbix
sudo chown zabbix.zabbix -R /home/zabbix
sudo vim /etc/passwd
将zabbix的/var/lib/zabbix改为/home/zabbix
sudo cp /home/ubuntu/.msmtprc /home/zabbix/.msmtprc
chown zabbix.zabbix /home/zabbix/.msmtprc
chmod 600 /home/zabbix/.msmtprc
再次通过zabbix用户执行测试脚本,成功!