doina

一个小菜鸟运维工程师.

zabbix 触发器函数解释详解

触发器中的表达式

{主机:key.函数(参数)}<表达式>
{<server>:<key>.<function>(<parameter>)}<operator><constant>

Functions函数:触发器functions可以引用检索到的值,当前时间或者其他元素。
unction参数----大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

操作符

优先级 操作  定义
1       /       除
2       *       乘
3       -       减
4       +       加
5       <       小于. 用法如下:
                A<B ⇔ (A<=B-0.000001)
6       >       大于. 用法如下:
                A>B ⇔ (A>=B+0.000001)
7       #       不等于.用法如下:
                A#B ⇔ (A<=B-0.000001) | (A>=B+0.000001)
8       =       等于. T用法如下:
                A=B ⇔ (A>B-0.000001) & (A<B+0.000001)
9       &       逻辑与
10      |       逻辑或

函数

sum

sum(600)  600秒内的总和
sum(#5)   最新5个值的和

avg

参数:秒或#num
支持类型:float,int
作用:返回一段时间的平均值
举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,
#n表示最近n次的值
示例:
触发器名称: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
如果上一小时的平均负载超过昨天同一小时的平均负载两倍以上,这个表达式就会启动。

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

----- 实例二
avg(300)}>99  
比如说:97 100 100 99 100,其实并不是持续5分钟都超过99,但是用avg()却是符合告警规则的


zabbix触发器方法avg - 实例

CPU负载最近一小时平均值等于1
{dd-pre-01:system.cpu.load[percpu,avg1].avg(1h)}=1

CPU负载昨天当前时间的上一小时平均值等于1,1d表示时间往前推移1天,你可以写1h,1m,10d,现在明白了time_thrift的用法了吧?
{dd-pre-01:system.cpu.load[percpu,avg1].avg(1h,1d)}=1

CPU负载最近10次的平均值等于1
{dd-pre-01:system.cpu.load[percpu,avg1].avg(#10)}=1

昨天同一时间CPU负载最近10次的平均值等于1
{dd-pre-01:system.cpu.load[percpu,avg1].avg(#10,1d)}=1

max

参数:秒或#num
获取一个时间周期内最大值
获取几个返回值中的最大值
以上方法,时间往前推移1分钟,1小时,1天等等
支持值类型:float,int
描述:返回指定时间间隔的最大值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.
示例:
触发器名称:Free disk space is too low Problem: 最近5分钟内剩余磁盘空间小于10GB
({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G)

zabbix触发器函数max - 例子
语法:max (sec|#num,<time_shift>)

一个小时内cpu负载最大值超过10
{dd-pre-01:system.cpu.load[percpu,avg1].max(1h)}>10

cpu负载最近10个返回值,最大值超过10
{dd-pre-01:system.cpu.load[percpu,avg1].max(#10)}>10

min

参数:秒或#num
获取一个时间周期内最小值
获取几个返回值中的最小值
以上方法,时间往前推移1分钟,1小时,1天等等
支持值类型:float,int
描述:返回指定时间间隔的最小值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.
示例:
触发器名称:Free disk space is too low Problem:最近10分钟内磁盘空间大于40GB
({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

示例---触发器名称: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

count

参数:秒或#num
支持类型:float,int,str,text,log
作用:返回指定时间间隔内数值的统计,
举例:
count(600)最近10分钟得到值的个数
count(600,12)最近10分钟得到值的个数等于12
count(600,12,"gt")最近10分钟得到值的个数大于12
count(#10,12,"gt")最近10个值中,值大于12的个数
count(600,12,"gt",86400)24小时之前的10分钟内值大于12的个数
count(600,6/7,"band")-thenumberofvaluesforlast10minuteshaving'110'(inbinary)inthe3leastsignificantbits.
count(600,,,86400)24小时之前的10分钟数据值的个数
第一个参数:指定时间段
第二个参数:样本数据
第三个参数:操作参数
第四个参数:漂移参数

#支持的操作类型 
eq: 相等 
ne: 不相等 
gt: 大于 
ge: 大于等于 
lt: 小于 
le: 小于等于 
like: 内容匹配


示例---触发器名称:Server is unreachable
{zabbix.zabbix.com:icmpping.count(30m,0)}>5
如上表达式表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。

last

参数:秒或#num
支持值类型:float,int,str,text,log
作用:最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的
例子:
last(0)等价于last(#1)last(#3)表示最近**第**3个值(并不是最近的三个值)
本函数也支持第二个参数**time_shift**,例如
last(0,86400)返回一天前的最近的值
如果在history中同一秒中有多个值存在,Zabbix不保证值的精确顺序
#num从Zabbix1.6.2起开始支持,timeshift从1.8.2其开始支持,可以查询avg()函数获取它的使用方法

last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。
例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。
last函数必须包含参数。

nodata

参数:秒
支持值类型:any
描述:当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示其他.
示例:
触发器名称:No heartbeats within last 3 minutes 使用函数 nodata():
{zabbix.zabbix.com:tick.nodata(3m)}=1

change

参数:忽略
支持类型:float,int,str,text,log
作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同
举例:
change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n

时间参数

date
参数:忽略
支持类型:any
作用:返回当前的时间,格式YYYYMMDD

dayofmonth
返回当前是本月的第几天

dayofweek
返回当前是本周的第几天

delta
参数:秒或#num
支持类型:float,int
作用:返回时间间隔内的最大值与最小值的差值

fuzzytime
参数:秒
支持值类型:float,int
作用:返回值为1表示监控项值的时间戳与ZabbixServer的时间多N秒,0为其他.常使用system.localtime来检查本地时间是否与Zabbixserver时间相同.
示例:
触发器名称: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” 

now
参数:忽略
支持值类型:any
描述:返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数

diff

参数:忽略
支持值类型:float,int,str,text,log
作用:返回值为1表示最近的值与之前的值不同,0为其他情况
示例:
触发器名称:/etc/passwd has been changed 使用函数 diff():
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

日志参数

logeventid
参数:string
支持值类型:log
描述:检查最近的日志条目的EventID是否匹配正则表达式.参数为正则表达式,POSIX扩展样式.当返回值为0时表示不匹配,1表示匹配。该函数从Zabbix1.8.5起开始支持.

logseverity
参数:忽略
支持值类型:log
描述:返回最近日志条目的日志等级(logseverity).当返回值为0时表示默认等级,N为具体对应等级(整数,常用于Windowseventlogs).Zabbix日志等级来源于Windowseventlog的Information列.

logsource
参数:string
支持值类型:log
描述:检查最近的日志条目是否匹配参数的日志来源.当返回值为0时表示不匹配,1表示匹配。通场用于Windowseventlogs监控.例如logsource["VMWareServer"]
点赞

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据