跳转至

Zabbix 配置邮件报警


2015-07-02 by dongnan

开始之前

zabbix 支持以下几种方式发送通知。

  • E-mail:使用 sendmail 发送邮件,由于会被认为是垃圾邮件被拒,所以不推荐。
  • SMS:需要短信猫,没有短信设备所以放弃。
  • Jabber:第三方插件,能让 Jabber 用户和 MSNYahooMessagerICQ 等 IM 用户相互通讯。 拜 gwf 所赐无法使用。
  • Ez Texting:给用户手机发短信,貌似只支持美国和加拿大,放弃。
  • Custom alertscripts:自定义脚本,把信息传递给脚本,我们在脚本里使用 sendEmail、调用短信接口发送短信等,也是今天示例所使用的方式。

环境

操作系统: CentOS 6.6 amd64
软件版本: zabbix 2.4.x
脚本版本: sendEmail-1.56

操作步骤

准备脚本

使用自定义的脚本,zabbix 会将信息传递给脚本,你可以在脚本里面随意处理(如sendEmail 命令)。 脚本按顺序接受是$1,$2,$3 了,为了方便记忆,一般分别给他们赋值到 To\Subject\body

# 脚本目录
awk '/^AlertScriptsPath/' /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

# 脚本权限
ll /usr/lib/zabbix/alertscripts/mail.sh
-rwxr-xr-x 1 zabbix zabbix 293 Jun 30 16:46 /usr/lib/zabbix/alertscripts/mail.sh

# 脚本代码
cat  /usr/lib/zabbix/alertscripts/mail.sh

#!/bin/bash
#script name:mail.sh
#20150611 by dongnan

to=$1
subject=$2
body=$3

/usr/local/bin/sendEmail -f monitor@ywwd.net -t "$to" -s smtp.exmail.qq.com:25 -u "$subject" -xu monitor@ywwd.net -xp dongnan -m "$body" 2 >>/tmp/sendEmail.log

自定义媒介

路径:Administration -> Media types -> 创建(类型:Script)

定义好了媒介之后需要把这媒介配置给指定给用户。

路径:Administration -> Users -> 用户名 -> media -> 添加创建的媒介。

Triggers 与 Actions

完成上3个步骤 zabbix 扔不能发送报警邮件,还需要定义 Triggers (触发) 与 Actions (动作):

  • Triggers,可以使用模板中自带的,也可以自己定义。
  • Actions,需要自己定义。

下面使用一个例子说明。

举个栗子

使用 ping 检测 ywwd.net,如果无法ping通则发送报警邮件,恢复再次发送邮件。

操作步骤

创建主机

使用模板:Template ICMP Ping

Triggers:模板中的triggers

action(动作),路径:在 Configuration -> Actions -> Create action

  • Recovery message 表示恢复发送邮件。
  • Enabled 表示启用这条action。

condition(条件)

  • A Maintenance status not in maintenance 表示机器不是在维护状态
  • B Trigger value = PROBLEM 表示触发值为非正常状态
  • C Trigger severity >= Warning

这里添加一个新的条件 Trigger severity >= Warning trigger 级别大于等于 warnning 的。 条件为"与" 就是说 A && B && C 3个条件都满足才可以。

operations(操作)

这里表示只发送一次,用户为 oma 。

验证

目标服务器禁止 icmp协议:

iptables -I INPUT -p icmp -j DROP

zabbix触发报警

zabbix发送邮件

Actions 重复报警

问题描述

使用自带的模板 Template App HTTP Service ,监控web服务器 80端口,关闭nginx 服务 zabbix 持续报警。

解决方法

去掉 Tigger 中的 Multiple PROBLEM events generation 勾选项,如下图:

注意

  • 如果是已经触发了报警后,去掉上面的选项,需要在下次触发报警时重新计算,否则还会持续报警。
  • 猜测可能是该选项导致单位时间内,分次计算每次都能满足触发条件,导致重复报警。

Actions 定制规则

zabbix 触发报警后,前三次发送用户A ,以后发送给用户B ,间隔时间100秒:

步骤

验证

zabbix 3.2 报警配置

zabbix 3.2 配置报警有所不同

步骤

使用 sendEmail 脚本发送邮件,需要定义3个参数:

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

为用户指定媒介类型

配置action动作

启用并编辑默认的 action ,条件被拆分为默认操作与恢复操作,两项:

Operations

Recovery

验证

可以停止某个主机 zabbix-agent 验证报警。

Zabbix 3.2 on Docker

脚本文件

# 输入命令
cat mail.sh

#!/bin/bash

To=$1
Subject=$2
Body=$3

mail=/usr/local/bin/sendEmail
from="monitor@demo.com"
server="smtp.exmail.qq.com:25"
sender="monitor@demo.com"

$mail -f $from -t "$To" -s $server -u "$Subject" -xu $sender -xp 'YourPassword' -m "$Body" 2>&1 >> /var/log/mail.log

脚本目录

cd /usr/lib/zabbix/alertscripts/

脚本权限

# 输入命令
ls -la mail.sh
-rwxr-xr-x    1 zabbix   zabbix         278 Jul 19 11:18 mail.sh

注意,脚本文件的属主与属组都是 zabbix用户。

参考

回到页面顶部