zabbix设置邮件报警

http://xianglinhu.blog.51cto.com/5787032/1636436 

http://bbs.176it.com/forum.php?mod=viewthread&tid=31&extra=page%3D1 


方法一:说明此方法,会产生中文乱码问题


第一步:首先安装mailx组件并配置好能够通过三方邮箱发送邮件

yum -y install mailx

然后编辑mailx的配置文件

vi /etc/mail.rc

在最末尾添加如下信息

set from=xxxxxx@qq.com smtp=smtp.qq.com

set smtp-auth-user=xxxxxx@qq.com smtp-auth-password=xxxxxx

set smtp-auth=login

保存退出后测试邮件是否能够正常发送出去

echo"zabbix test mail" |mail -s "zabbix" xxxxxx@qq.com

 

第二步:配置Zabbix服务端邮件报警

1、打开Zabbix

管理-示警媒介类型-创建媒体类型

wKioL1VAafez6dx9AASELfullOU328.jpg

wKioL1VAak6ggdnbAADfqmixgCk539.jpg

名称:Sendmail

类型:脚本

脚本名称:sendmail.sh

已启用:勾选

存档

2、设置Zabbix用户报警邮箱地址

管理-用户-Admin (Zabbix Administrator)

wKiom1VAaRGgzVO5AAJhhs0szok345.jpg切换到示警媒介-添加

wKiom1VAaTfBx3NyAAIQZG7O4Ac490.jpg类型:Sendmail

收件人:xxx@163.com

其他默认即可,也可

以根据需要设置

状态:已启用

存档

wKiom1VG2DHiqp4lAADZX7fPmVI341.jpg

3、设置Zabbix触发报警的动作

配置-动作-创建动作

形式一:

名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

默认信息:

告警主机:  {HOSTNAME1}

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

告警等级:  {TRIGGER.SEVERITY}

告警信息:  {TRIGGER.NAME}

告警项目:  {TRIGGER.KEY1}

问题详情:  {ITEM.NAME}:{ITEM.VALUE}

当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:  {EVENT.ID}

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

恢复信息:

告警主机:  {HOSTNAME1}

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

告警等级:  {TRIGGER.SEVERITY}

告警信息:  {TRIGGER.NAME}

告警项目:  {TRIGGER.KEY1}

问题详情:  {ITEM.NAME}:{ITEM.VALUE}

当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:  {EVENT.ID}

已启用:打钩



形式二:

名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了

默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}

默认信息:

AlarmHost:{HOSTNAME1}

AlarmTime:{EVENT.DATE} {EVENT.TIME}

AlarmLevel:{TRIGGER.SEVERITY}

AlarmMessige: {TRIGGER.NAME}

AlarmItem:{TRIGGER.KEY1}

AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}

Status:{TRIGGER.STATUS}:{ITEM.VALUE1}

EventID:{EVENT.ID}

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了

默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}

恢复信息:

AlarmHost:{HOSTNAME1}

AlarmTime:{EVENT.DATE} {EVENT.TIME}

AlarmLevel:{TRIGGER.SEVERITY}

AlarmMessige: {TRIGGER.NAME}

AlarmItem:{TRIGGER.KEY1}

AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}

Status:{TRIGGER.STATUS}:{ITEM.VALUE1}

EventID:{EVENT.ID}

已启用:打钩

wKiom1VAaYPwLcvKAAK5XWeEwRw676.jpg切换到操作选项

wKiom1VAaa3DlJPcAAMRXj4MNDM318.jpg

新的

操作类型:送出信息

送到用户:添加

默认信息:打钩

选择用户:Admin

选择

仅送到:Sendmail

存档


4、添加Zabbix服务端邮件发送脚本

zabbix 2.2之前版本脚本如下:

cd/usr/local/zabbix-2.4.4/scripts #进入脚本存放目录

vi sendmail.sh #编辑,添加以下代码

#!/bin/bash

#export LANG=zh_CN.UTF-8         //解决发送的中文变成了乱码的问题

echo "$3" | mail -s "$2"$1

:wq! #保存退出

zabbix 2.4版本脚本如下:

# yum -y install dos2unix

cat /usr/local/zabbix/scripts/sendmail.sh 

#!/bin/bash

#export LANG=zh_CN.UTF-8

FILE=/usr/local/zabbix/scripts/log

echo "$3" >$FILE

/usr/bin/dos2unix -k $FILE

/bin/mail -s "$2" $1 < $FILE


chmod +x /usr/local/zabbix-2.4.4/scripts/sendmail.sh

#设置脚本执行权限

touch /usr/local/zabbix-2.4.4/scripts/log

chmod 755 /usr/local/zabbix-2.4.4/scripts/log

chown -R zabbix.zabbix /usr/local/zabbix-2.4.4


5、设置zabbix_server服务调用脚本的目录

vim/usr/local/zabbix-2.4.4/etc/zabbix_server.conf

#进入zabbix_server配置文件

AlertScriptsPath=/usr/local/zabbix-2.4.4/scripts

找到上面这一行,将脚本存放目录写到此处

保存并重启zabbix_server服务

第三步:测试Zabbix报警

关闭Zabbix客户端服务

service zabbix_agentd stop

查看xxx@163.com邮箱,会收到报警邮件

再开启Zabbix客户端服务

service zabbix_agentd start

查看xxx@163.com邮箱,会收到恢复邮件

使用外部邮箱账号发送报警邮件设置完成。

至此,Zabbix邮件报警设置完成。


方法二:http://www.cnblogs.com/chrisDuan/p/4505646.html 

1、设置zabbix_server.conf文件

AlterScript = /usr/local/zabbix/share/zabbix/alterscript

2、建立告警脚本

cd /usr/local/zabbix/share/zabbix/alterscript/

sudo vim sendEmail.sh

#!/usr/bin/env python
#coding:utf-8
import time
import smtplib
import logging
from email.mime.text import MIMEText
import sys
LOG_FILENAME="/var/log/email_python.log"
mail_host = 'mstp.163.com'
mail_user = 'xxxx@xxxx.com'
mail_pass = 'xxxxx'
mail_postfix = 'xxxxx'
def send_mail(to_list,subject,content,format='html'):
 try:
  me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
  msg=MIMEText(content,format,'utf-8')
  msg["Accept-Language"]="zh-CN"
  msg["Accept-Charset"]="ISO-8859-1,utf-8"
  msg['Subject']=subject
  msg['From']=me
  msg['to']=to_list
  s=smtplib.SMTP()
  s.connect(mail_host,"25")
  s.login(mail_user,mail_pass)
  s.sendmail(me,to_list,msg.as_string())
  s.close()
 except Exception,e:
  logging.basicConfig(filename = LOG_FILENAME, level = logging.DEBUG)
  logging.error(time.strftime('%Y-%m-%d %H:%I:%M',time.localtime(time.time()))+e)
if __name__ == "__main__":
 send_mail(sys.argv[1],sys.argv[2],sys.argv[3])

3、设置告警脚本的权限

chmod zabbix:zabbix sendEmail.sh

chown 755 sendEmail.sh

4、最后按照方法一只需要在zabbix前端进行相应的配置即可。

需要注意配置Zabbix触发报警的动作要按照下面方法:

配置-动作-创建动作


名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

默认信息:

<html>
	<body>
		<p>告警主机:{HOSTNAME1}</p>

		<p>告警时间:{EVENT.DATE} {EVENT.TIME}</p>

		<p>告警等级:{TRIGGER.SEVERITY}</p>

		<p>告警信息: {TRIGGER.NAME}</p> 

		<p>告警项目:{TRIGGER.KEY1}</p>

		<p>问题详情:{ITEM.NAME}:{ITEM.VALUE}</p>

		<p>当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}</p>

		<p>事件ID:{EVENT.ID}</p>
	</body>
<html>

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

<html>
	<body>
		<p>告警主机:{HOSTNAME1}</p>

		<p>告警时间:{EVENT.DATE} {EVENT.TIME}</p>

		<p>告警等级:{TRIGGER.SEVERITY}</p>

		<p>告警信息: {TRIGGER.NAME}</p> 

		<p>告警项目:{TRIGGER.KEY1}</p>

		<p>问题详情:{ITEM.NAME}:{ITEM.VALUE}</p>

		<p>当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}</p>

		<p>事件ID:{EVENT.ID}</p>
	</body>
<html>

已启用:打钩

wKioL1V_4E3h8oLaAAIMTOc6HSA438.jpg

操作这边按照下面操作

新的

操作类型:送出信息

送到用户:添加

默认信息:打钩

选择用户:Admin

选择

仅送到:Sendmail

存档

wKioL1V_4JKjKeHxAAMPwjg7CA4543.jpg




Zabbix 常用Key值

http://blog.csdn.net/apache0554/article/details/45821591 

http://www.ttlsa.com/zabbix/zabbix-agent-types-and-all-keys/ 


1、监控端口的:net.tcp.port[,3306]

/usr/local/zabbix/bin/ -s192.168.8.120 -knet.tcp.port[,3306] 返回1为192.168.8.120的端口3306存在,0为不存在

2、监控进程的:proc.num[mysqld]

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[mysqld] 返回值为192.168.8.120中mysqld的进程数量

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[] 返回值为192.168.8.120中所有的进程数量

3、查看CPU核数的:system.cpu.num 返回值为服务器CPU的核数

4、查看系统的系统启动时间和当前时间:system.boottime、system.localtime 返回值为系统启动时间和当前时间,为时间戳格式

5、查看系统的简单信息:system.uname 返回值为192.168.8.120的系统信息,类似于linux系统的uname -a命令

6、查看windowns系统当前网卡的进出流量:net.if.out[{HOST.NAME},bytes]、net.if.in[{HOST.NAME},bytes]和linux系统的key:net.if.out[eth0,bytes]、net.if.in[eth0,bytes]一样

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.in[192.168.8.120,bytes] 返回值为IP为192.168.8.120的进流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.out[192.168.8.120,bytes] 返回值为IP为192.168.8.120的出流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量

7、查看系统内存大小:vm.memory.size[total],返回值单位bytes

8、查看文件的大小: vfs.file.size[file] 如: vfs.file.size[/var/log/syslog] 返回的是/var/log/syslog的大小,单位是:bytes

9、查看文件是否存在:vfs.file.exists[file] 文件如果存在返回0,不存在返回1

10、查看文件的MD5:vfs.file.md5sum[file]查看小文件的MD5,返回为MD5值(好像只有2.0以上的版本有这个key)

11、自动发现网卡并监控流量和自动发现分区及分区挂载情况的两个key:net.if.discovery,vfs.fs.discovery,windows和linux监控模板中都有这模板(2.0以上版本),应用即可

 

      以上是常用的key,其实监控服务器无非就是内存、硬盘占用、CPU负载、流量、服务器和端口等情况。如果要监控其他的可以自定义key来实现,写个脚本来返回,得到自己想要的监控结果,zabbix在这块做的非常好,扩展性很强,支持各种脚本来实现自定义的key。

     要启用自定义key,需要在客户端的配置文件中启用UnsafeUserParameters=1参数,然后在配置文件的最下面来定义key,如:

UserParameter=free.disk,/usr/local/zabbix/bin/disk.py

free.disk为key的名字,/usr/local/zabbix/bin/disk.py为服务器端调用free.disk这个key时执行的脚本,其结果就是free.disk的返回值。脚本可以是任何可以运行的脚本语言。注意:脚本要用绝对路径,注意脚本的权限,写的脚本返回值要尽量简单,这样方便设置报警值。




zabbix触发器表达式详解

我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

{主机:key.函数(参数)}<表达式>常数

Functions函数

触发器functions可以引用检索到的值,当前时间或者其他元素。

触发器表达式支持的function完整列表请点击官网地址 supported functions

大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

wKioL1VG7RHCN3R6AABDTyfTjqs988.jpg

last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。

例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。last函数必须包含参数。

AVG,count,last,min和max函数还支持额外的参数,以秒为单位的参数time_shift(时间偏移量)。

例如avg(1h,1d),那么将会获取到昨天的1小时内的平均数据。

注意:触发器表达式需要使用history历史数据来计算,如果history不可用(time_shift时间偏移量参数无法使用),因此history记录一定要保留长久一点,至少要保留需要用的记录。
触发器表达式可以使用单位符号来替代大数字,例如5m替代300,或者1d替代86400,1k替代1024字节等等。

操作符

wKioL1VG7fDQXDx3AAD1dAOjB88798.jpg

触发器示例

三分钟取不到agent.ping的值,那也就是说agent宕了或者服务器挂了

{test-01:agent.ping.nodata(3m)}=1


触发器名称:Processor load is too high on www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

www.zabbix.com:host名称

system.cpu.load[all,avg1]:item值,一分内cpu平均负载值

last(0):最新值

>5:最新值大于5

如上所示,www.zabbix.com主机监控项,最新的CPU负载值如果大于5,那么表达式会返回true,这样一来触发器状态就改变为“problem”了。


触发器名称:/etc/passwd has been changed

使用函数 diff():

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

/etc/passwd最新的checksum与上一次获取到的checksum不同,表达式返回true.触发器状态改变为“problem”了。 

我们可以使用同样的方法监控系统重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。这些zabbix一般都会自带,没带的你自己加上吧。



触发器名称:Someone is downloading a large file from the Internet

使用函数 min:

{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true,触发器状态变为problem


触发器名称:Both nodes of clustered SMTP server are down

{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.


触发器名称:Zabbix agent needs to be upgraded

使用函数str():

{zabbix.zabbix.com:agent.version.str("beta8")}=1

如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.


触发器名称:Server is unreachable

{zabbix.zabbix.com:icmpping.count(30m,0)}>5

表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。


触发器名称:No heartbeats within last 3 minutes

使用函数 nodata():

{zabbix.zabbix.com:tick.nodata(3m)}=1

tick为Zabbix trapper类型,

首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,

如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。


触发器名称:CPU activity at night time

使用函数 time():

{zabbix:system.cpu.load[all,avg1].min(5m)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

只有在凌晨0点到6点整,最近5分钟内cpu负载大于2,表达式返回true,触发器的状态变更为“problem”


触发器名称:Check if client local time is in sync with Zabbix server time

使用函数 fuzzytime():

{MySQL_DB:system.localtime.fuzzytime(10)}=0

主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem”


触发器名称:Comparing average load today with average load of the same time yesterday 

(使用 time_shift 时间偏移量参数).

{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2


Hysteresis(迟滞,滞后)

触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。

有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,当问题到了15°与20°之间,异常会解除。

为了达到这个效果,我们需要使用如下触发器表达式:

触发器名称:Temperature in server room is too high

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

如上有两个小括号,前面一个表示触发异常的条件,后面一个表达式表示解除异常的条件。

注意:宏变量 {TRIGGER.VALUE}将会返回当前触发器的值



触发器名称:Free disk space is too low

Problem: 最近5分钟剩余磁盘空间小于10GB。(异常)

Recovery: 最近10分钟磁盘空间大于40GB。(恢复)

简单说就是一旦剩余空间小于10G就触发异常,然后接下来剩余空间必须大于40G才能解除这个异常,就算你剩余空间达到了39G(不在报警条件里)那也不算恢复了,还是处于problem状态

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |
 ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)


三分钟CPU使用率持续在80%以上触发报警

TRIGGER.VALUE对应的为Trigger状态,0代表OK, 1代表Problem

分解下需求:

正常情况下连续三分钟CPU使用率超过80%,看起来表达式是:

{TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20

 故障时连续三分钟CPU使用率低于50%恢复正常,即故障时刻CPU使用率持续三分钟高于50%依然为故障,表达式是这个样子的:

{TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50

整合下表达式,就成了下边这个样子:

({TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20) | ({TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50)




zabbix制作自己的模板


一、如何制作模板

1、创建模板

选择“配置”-“模板”-“创建模板”

然后在“模板名称”那块输入我们想要的名字,我这里为check_service_number

090617408.jpg

组也选择好,然后存档

2、创建应用集

模板已经创建完成,现在继续创建应用集

选择“check_service_number”模板右侧“应用集”,然后选择“创建应用集”

然后输入你设置的名字

090711583.jpg

3、创建项目

选择“check_service_number”模板右侧“项目”,然后选择“创建项目”

090744465.jpg

上面是我的信息,此项目是检测apache进程数量

下面是检测zabbix进程数量

090815548.jpg

4、创建触发器

选择“check_service_number”模板右侧“触发器”,然后选择“创建触发器”

然后设置好相应的信息

091006560.jpg

这个是检测apache的最新进程数量如果为0,就触发“严重“类型报警

下面这个是检测zabbix的最新进程数量如果为0,就触发“严重“类型报警

091041111.jpg

5、创建图形

为了监控方便,“创建图形”来查看

选择“check_service_number”模板右侧“图形”,然后选择“创建图形”

下面是我监控apache的图形配置

091152583.jpg

下面是我监控zabbix的图片配置

091234139.jpg

完成后进入“检测中”-“图形”

选择相应的图形即可看到结果

091306543.jpg

上面是apache的图形结果

下面是zabbix的图形结果

091336311.jpg

为了测试触发报警,我把agent机器的apache服务给关闭,查看“事件”与邮件是否能收到报警(注意一定要能实现邮件报警,否则邮件发送不了)

现在先关闭apache服务,在等3分钟开启apache服务

091408298.jpg

可以看到apache的监控情况

下面在看看“事件”内容

091436579.jpg

在查看一下邮件报警情况

091519886.jpg

收到了邮件报警,内容为apache的进程数为0

过一会有收到了一封邮件

091606536.jpg

恢复正常通知,现在apache的进程数为6

http://dl528888.blog.51cto.com/2382721/1319763