zabbix 触发器表达式

Zabbix触发器Trigger的作用是对收集的Item(监控项)数据做进一步判断,然后产生一个状态值,该状态值只有两个不同的取值OKProblem(该状态值可以作为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

{127.0.0.1:vfs.file.cksum[/etc/passwd].diff()}>0
各个字段与基本表达式对应如下:
<server>              127.0.0.1
<key>                 vfs.file.cksum[/etc/passwd] 
<function>            diff() 
<parameter>           0 
<operator>            > 
<constant>            0

{127.0.0.1:mysql_checkcums[192.168.99.11,3306,192.168.99.13,3308,root,mysql].str(ok,#5)}=0

各个字段与基本表达式对应如下:

<server>   127.0.0.1

<key>   mysql_checkcums[192.168.99.11,3306,192.168.99.13,3308,root,mysql]

<function>   str(ok,#5)

<parameter>   0

<operator>       =

<constant>      0

{127.0.0.1:net.tcp.port[192.168.99.7,58081].count(300,1,"ne")}>3

各个字段与基本表达式对应如下:

<server>   127.0.0.1

<key>   net.tcp.port[192.168.99.7,58081]

<function>   count(300,1,"ne")

<parameter>   0

<operator>       >

<constant>      3

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脚本里面的判断符的相同。

猜你喜欢

转载自blog.csdn.net/kaikai136412162/article/details/111311863