zabbix 触发器 的表达式函数
本文转载自:http://www.xiaomastack.com/2014/10/11/zabbix06/
Zabbix触发器Trigger的作用是对收集的Item(监控项)数据做进一步判断,然后产生一个状态值,该状态值只有两个不同的取值”OK”或”Problem”(该状态值可以作为Action的输入,Action根据不同的状态组合条件作出不同的动作如发送报警邮件、重启服务等)。一个Trigger可以对应一个Item,当然了一个Trigger也可能对应了多个Item,配置Trigger的关键就是写好Trigger expression。
1、Trigger基本的表示式是这样的
{<server>:<key>.<function>(<parameter>)}<operator><constant> 各个字段解释如下: <server> 主机名(或者模板名,最终是显示的主机名,说明一个trigger最终一定是挂在一台Host上面的) <key> item配置的时候可以选则已存在的item <function> 函数如last,avg等 <parameter> 函数的参数 <operator> 判断符(简单的运算符) <constant> 常量
举个例子可能更清晰,监控系统文件/etc/passwd是否发生变化的Trigger
{Zabbix-Server:vfs.file.cksum[/etc/passwd].diff(0)}>0 各个字段与基本表达式对应如下: <server> Zabbix-Server <key> vfs.file.cksum[/etc/passwd] <function> diff() <parameter> 0 <operator> > <constant> 0
我想这样看就可以很容易理解Trigger的基本表达式了。
2、Function详解
对于大多数的function来说,它接受的数字单位是“秒”,如果数字前面有“#”,则表示的是次数。比如sum(600)表示的是过去600秒的数据总和,而sum(#5)表示的是最近5次数据的和。凡是都有例外“#”在last函数的特许含义,它后面的数字表示的是“第几个”数据的意思。对于不需要parameter的function,也要加上parameter,一般置0不能省略如diff(0)。
Expression中的Function总共有这些
[float|int|str|text|log].abschange() 表示前两次的值的绝对值是否相同。0表示相同,1表示不同。支持flaot、int、str、test、log类型的Item [float|int|str|text|log].change() 最近两次的值是否相同。0表示相同,1表示不同 [float|int|str|text|log].diff() 判断上一次的值是否和上上次的值是不是相同,0表示相同,1表示不同 [float|int].avg(sec|#num,time_shift) 一段时间或几次内值的平均值,参数可以是时间秒也可以是次数。 [float|int|str|text|log].last(#num,time_shift) 最近第#num次数据。这里的#num和其他的function中的#num不同,别的function表示“几次”,这里的表示”第几次“,一般用last(0)取最新值。time_shift,它表示这个函数计数器的数据需要往前推移的时间(下同)。 [float|int].max(sec|#num,time_shift) 最近sec秒或#num次监控的最大值 [float|int].min(sec|#num,time_shift) 最近sec秒或#num次监控的最小值 [float|int].sum(sec|#num,time_shift) 最近sec秒或#num次监控值的和 [float|int|str|text|log].prev() 返回上一次获得的监控值,等同于last(#2) any.data() 返回当前的日期,格式为YYYYMMDD,如“20131025” any.dayofmonth() 返回日期,返回值的范围是1~31 any.dayofweek() 返回星期几,放回值的范围是1~7 any.now() 返回unix时间戳 any.time() 返回现在的时间,格式为HHMMSS,如“123505” any.nodata(sec) 在sec秒内Zabbix Server 没有收到监控信息返回1,反之返回0 [str|text|log].regexp(string,sec#num) 检查最近一次的返回值是不是正则匹配string,第二个参数定义的时间或次数中所有的数据都会进行检查,成功匹配返回1,反之返回0 [str|text|log].iregexp(string,sec#num) 与regexp功能相同,只是string不区分字母大小写。 [str|log|text].str(string,sec|#num) 检查最近一次的返回值是否包含string,第二个参数定义的时间或次数中所有的数据都会进行检查,成功匹配返回1,反之返回0 [str|log|text].strlen(sec|#num,time_shift) 最近一次获取到的监控值的长度 [float|int].delta(sec|#num,time_shift) 在sec秒内或#num次数内获取最大值和最小值的差 [float|int].fuzzytime(sec) 返回返回值和Zabbix Server的时间差有没有超过sec秒,如果超过返回1,没有超过返回0.一般对于system.localtime这个key,加上这个function来判断Agent的Linux时间和Zabbix Server的时间是否相同。 [log].logeventid(string) 最近一次的日志的Event ID是否匹配string,不匹配返回0,匹配返回1 [log].logseverity() 返回最近一次日志的等级,返回0表示默认,其它数字表示对应的等级,这是Windows event log 所独有的。 [log].logsource(string) log的来源是否匹配,返回0表示不匹配,返回1表示匹配,对Windows Agent 比较常用 int.band(sec|#num,mask,time_shit) 和mask中定义的数字做二进制与操作 [float|int|str|text|log].count(sec|#num, pattern, operator, time_shift) 在一段时间内或几次收集到的数据中符合条件的个数。举几个例子 count(60) 过去60秒内数据的总个数 count(60m,12) 过去60分钟内,监控值为12的个数 count(1h,12,"gt") 过去1个小时内,监控值大于12的个数 count(#10,12,"gt") 过去10次内数据大于12的个数 count(60,12,"gt",1d) 过去1天的这个时间点的过去60秒内,大于12的监控值的个数 count(60,,,1w) 过去1周的的这个时间点的过去60秒内,监控值的个数 eq ne gt ge lt le like band 相等 不相等 大于 大于等于 小于 小于等于 包含 (一般用不上) 这个和shell脚本里面的判断符的相同。
3、operator
zabbix支持的operator,优先级依次递减如下:
/ * - + < > # = & |
除 乘 减 加 小于 大于 不等于 等于 逻辑与 逻辑或
本文转载自:http://www.xiaomastack.com/2014/10/11/zabbix06/