其他分享
首页 > 其他分享> > ④.触发器

④.触发器

作者:互联网

触发器的定义: 当监控项的值发生变化后,对应的值不符合预期,则应该通过触发器来通知管理员介入或执行相应的操作。

1.触发器的严重性

zabbix支持下列触发器的严重程度:

严重性 定义 颜色
未分类 未知严重性 灰色
信息 提示 浅蓝色
警告 警告 黄色
一般严重 一般问题 橙色
严重 发生重要的事情 浅红色
灾难 灾难,财务损失等 红色

2.触发器表达式函数

函数名称 作用
avg() 监控项的平均值:
=>avg(#5) -> 最新5个值的平均值
=> avg(1h) -> 最近一小时的平均值
=>avg(1h,1d) -> 一天前的一小时内的平均值
min() 监控项的最小值:
示例:cpu使用率最近5分钟的最小值大于5 system.cpu.load.min(5m)>5
示例:cpu最近5次最小的值大于2 system.cpu.load.min(#5)>2
max() 监控项的最大值:
=>max(#5) ->最新5个值的最大值
=>max(1h)->最近一小时的最大值
last() 注意last的 #num 参数和在其它函数中的作用不一样,例如:返回值 3,7,2,6,9
last() 通常等同于last(#1)
last(#5) 第五个最新值
last(#2)将返回值为7
last(#5)返回值为9
diff() 比对上一次文件的内容
nodata() 监控一段时间内是否返回数据:时间不少于30秒,因为timer处理器每30s调用一次
返回1 - 指定评估期没有接收数据
返回0 - 其它

官方示例:
示例一:

触发器名称: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”了。

示例二:

触发器名称:www.zabbix.com is overloaded
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2 
当前cpu负载大于5或者最近10分内的cpu负载大于2,那么表达式将会返回true.

示例三:

触发器名称:/etc/passwd has been changed 使用函数 diff():
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0 
/etc/passwd最新的checksum与上一次获取到的checksum不同,表达式将会返回true. 我们可以使用同样的方法监控系统重要的配置文件,例如/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

示例五:

触发器名称: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 
This expression will fire if the average load of the last hour tops the average load of the same hour yesterday more than two times.
最新一小时的平均负载峰值超过昨天同时段指标两次进行报警

3.特性之Hysteresis(迟滞,滞后):

简单的说触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。明白了么?不明白就看例子吧。 有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,当前情况下,只有温度处在这个温度之间触发器值才会为FALSE。(慢慢理解,这个表达式有点绕) 为了达到这个效果,我们需要使用如下触发器表达式:

示例1:

触发器名称: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}将会返回当前触发器的值

实例2:

触发器名称:Free disk space is too low Problem: 最近5分钟内剩余磁盘空间小于10GB。 Recovery: 最近10分钟内磁盘空间大于40GB
({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) | ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}

自定义触发器场景

2.1 配置单条件触发器

标签:load,触发器,last,zabbix,com,cpu
来源: https://www.cnblogs.com/yangtao416/p/16587429.html