#zabbix监控之邮件报警
在zabbix的使用中,最重要的一点就是完善的报警机制,作为监控平台,需要时刻关注机器和服务的运行状态,更重要的是发现故障之后需要及时的报警给相关人员,早点发现问题,将隐患消除在未然阶段。这样才能保证服务的稳定运行。
报警的方式是多种多样的,微信、短信和邮件报警是我们比较常见的方式。而且报警的频率和策略直接影响着运维人员的重视程度和检错效率。如果整个报警列表中都是一些无关痛痒的提示、轻度警告。而他们的发送频率又特别的高,则非常容易错过真正关键的报警。
报警涉及的触发器(trigger)一般包括以下几个方面:
(1)服务器的基本状态:磁盘容量、内存大小、cpu的负载;
(2)基础服务状态:web服务器(nginx、apache)的状态,数据库的状态(mysql、oracle、nosql等);
(3)应用服务器状态:应用服务器的可用性以及负载状态;
以本人之前所在的游戏公司为例,日常的监控报警中主要集中在服务器的基本状态的报警:(1)比如随着服务器的运行,会产生大量的日志文件,因为来不及转移导致服务器的磁盘可用空间不足;(2)开启的应用过多导致cpu和内存的不足;
第一种磁盘不足的情况,可以采用crontab定期清理日志的方式解决,注意
为了防止日志内容的丢失,需要把日志及时的备份到远程的日志服务器中进行存放;
第二种情况则需要定期对服务器进行升配操作;
而基础服务状态和应用服务器状态则需要提高报警级别,毕竟服务的不可用是非常严重的事故,另外给出建议是关键的服务一定要做到高可用,不能因为节约成本而导致服务故障,否则造成的损失也许更加巨大。
##邮件报警配置步骤
邮件报警的配置主要划分为一下几个步骤:
1.在zabbix服务端配置邮件发送脚本和修改zabbix服务端配置文件;
2.在zabbix前端控制台进行相关设置;
###配置脚本
(1)邮件的发送可以采用系统自带的mail发送,但是需要配置mail的配置文件/etc/mail.rc,在该文件的末尾添加如下几行:
set from=********@sina.com
set smtp=smtp://smtp.sina.com
set smtp-auth-user=********@sina.com
set smtp-auth-password=********
set smtp-auth=login
其中from为你所指定的邮件发送的发件方名称,smtp为所使用的邮件服务器,smtp-auth-user和smtp-auth-password分别进行用户名和密码的验证;
注意:
我这里采用的是sina的邮箱发送,因为新浪的邮件内容审核相对比较宽松,除了sina之外,还可以选择网易邮箱或者qq邮箱,甚至为了方便可以自己搭建一个smtp服务器。
网易邮箱和qq邮箱的smtp分别如下:
网易 smtp.163.com
qq smtp.exmail.qq.com
另外需要注意使用网易或者qq邮箱他们的smtp-auth-password密码会单独进行设定,不要与邮箱本身的登录密码混淆。
(2)测试发送一个邮件给指定的用户:
[root@localhost conf]# echo "hello" | mail -s "hello" 597****[email protected]
已经收到邮件,说明邮件的发送没有问题,如果邮件发送失败,可能会是以下几个原因:
1)连接的邮件服务器错误,或者用户名、密码认证失败,这个是比较好排查的,可以通过telnet测试是否可以连接邮件服务器(邮件服务器的默认端口是25):
[root@localhost conf]# telnet smtp.sima.com 25
Trying 173.254.89.192...
Connected to smtp.sima.com.
Escape character is '^]'.
220-box1089.bluehost.com ESMTP Exim 4.86_1 #1 Wed, 23 Nov 2016 01:29:33 -0700
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.
用户名密码认证失败会明确的告诉原因;
2)发送的邮件内容没有通过发件方邮箱的审核;
3)发送的邮件内容没有通过收件方的白(黑)名单活着邮件内容的审核;
上述的2、3两种失败情况邮件服务器都会发送给错误码进行查询,一般qq邮箱和网易邮箱的审核相对比较严格。为了防止被拒绝,可以选择sina或者139等邮箱,审核相对宽松。甚至可以自己搭建邮件服务器。
(3)编写zabbix发送邮件的脚本sendmail.sh
创建脚本所在目录**/usr/local/etc/alertscripts**:
[root@localhost conf]# mkdir /usr/local/etc/alertscripts
编写发送脚本:
[root@localhost conf]# cat /usr/local/etc/alertscripts/sendmail.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/sendmail.log 2>&1
改变所属用户和组为zabbix,授予可执行权限:
[root@localhost conf]# chown zabbix.zabbix /usr/local/etc/alertscripts/ -R
[root@localhost conf]# chmod +x /usr/local/etc/alertscripts/sendmail.sh
创建日志文件,修改所属用户和组:
[root@localhost conf]# chown zabbix.zabbix /tmp/sendmail.log
(4)修改zabbix服务端配置文件,并且重启服务:
[root@localhost conf]# vim /usr/local/etc/zabbix_server.conf
添加如下内容,设置脚本目录为刚才创建的目录:
AlertScriptsPath=/usr/local/etc/alertscripts
修改完成后重启zabbix服务:操作略。
###配置zabbix控制台
1.首先设置报警媒介(指定邮件发送的脚本),点击“管理”—“报警媒介类型”—“Email”:
2.将类型选定为脚本,然后指定脚本的名称。在zabbix3.x之后还需要指定传递给邮件发送脚本的参数(邮件接收方**{ALERT.SENDTO}、邮件主题{ALERT.SUBJECT}、邮件内容{ALERT.MESSAGE}**)。
4.点击相关组群设置组群的权限,因为是对管理员用户设置邮件,这里设定对所有组群具有读写权限(*代表所有组群):
5.然后设置管理菜单下的用户,这里对Admin用户进行设置:
7.指定报警的类型为Email,指定邮件地址为接收方的邮件地址,为了让邮件可以准确的到达,需要在接收方的邮件中设置白名单,允许发送方的邮件被接收。
8.配置相关的动作,这个是针对触发器设定的,当监控的item达到一定的条件(由触发器Trigger设置),则会使trigger执行设定好的动作,一个动作可以针对多个触发器设定,当他们满则条件时都会执行相应的动作,因为是邮件报警,所以当trigger被触发时,我们给相关用户的邮箱发送邮件,这样运维人员会根据邮件的报错提示及时解决问题,当问题结局时还会发送恢复邮件,这样就可以把机器及业务的运行状态及时的监控起来。
条件是针对动作何时执行。可以多个条件并存或者任意存在,这个可以编写相关的逻辑进行判断。
操作和恢复操作分开设置是zabbix3.2.1和之前的版本有所不同的,在操作中进行设定:
###操作示例
我们这里设定的条件是当zabbix客户端5分钟内没有连接的时候,则会触发该警报。
1.首先可以关闭zabbix agent,查看仪表盘的监控信息,五分钟后显示如下:
3.当我们启动zabbix agent,则会看到故障恢复的报警信息:
##小结
上述是关于zabbix邮件报警的信息,正常情况下的操作很简单,但是笔者在设置的时候,发现网络和邮件审查的因素会对邮件的发送有很大的影响(安全和利益使然),所以大家在搭建的时候需要选择稳定可靠的邮箱,确保邮件的准确发送,还有就是再次基础上根据不同公司的业务和监控指标,需要设定好邮件发送的频率。祝大家工作顺利!