第五章:zabbix探究告警触发器Triggers

Triggers函数的分类

功能 函数
值的比较与查找 abschange、delta、diff、band、change、nodata、last、prev
 值的计算  max、min、avg、sum、count
 时间  now、time、date、dayofmonth、dayofwek、fuzzytime
 日志  logeventid、logseverity、logsource
 字符串匹配  iregexp、regexp、str、strlen
 趋势预测  percentile、forecast、timeleft

 

 

 

 

 

 

 

 

 

Trigger函数----比较 与查找

求最近两值差的绝对值----abschange

  • 函数功能

     返回最近两值差的绝对值,即最近获取到的值与前一个值的差的绝对值,数学表达式为|last_value - prev_value|。如果值为字符串类型,则其绝对值返回0或1,其中0表示值相等,1表示值不等。该函数常用于在一个范围波动的场合。

  • 函数参数
      不支持任何参数的传入
  • 支持数据类型
      支持float、int、str、text

求最大值与最小值的差----delta

  •  函数功能

      在指定的一段时间内,或者指定数据个数,用其中的最大值减去最小值得出的差(max-min),数学表达式为max{v1,v2,...vn}-min{v1,v2...vn},其中v1,v2,....vn为时间T内的数值。该函数适用于最大值和最小值比较的场合,如系统的最高负载和最低负载的差值。

  •  函数用法

      delta(sec|#num,<time_shift>)>N    #最大值与最小值的差值大于N

      delta(sec|#num,<time_shift>)<N    #最大值与最小值的差值小于N

      delta(sec|#num,<time_shift>)=N    #最大值与最小值的差值等于N

      delta(sec|#num,<time_shift>)<>N    #最大值与最小值的差值不等于N

       delta(10m,1d)>10     # 表示1天前的10分钟数据的最大值与最小值的差大于10

      delta(#5,1d)>10       # 表示1天前的连续5个数据的最大值与最小值的差大于10

      delta(10m)>10         # 表示最近10分钟内的数据的最大值与最小值的差大于10

      delta(#5)>10           # 表示最近连续5个数值的最大值与最小值的差大于10

  •  函数参数

      第一个参数为秒或#num

      第二个参数为某个时间段前(time_shift)

  •  数据类型

      支持float和int数据类型

判断最近两值是否相同----diff

  •  函数功能

    比较最近数据的值和前一个数据的值,如果两值相同,函数运行结果则为0,不同则为1.通过比较最近两次的数值是否相同,从而判断出运行状态,如检测主机名,系统版本是否发生变化等。

  •  函数用法

    diff()=0     #最近两值相同

    diff()=1     #最近俩值不同

  • 函数参数

    不支持任何参数的传入

  • 数据类型

    支持float、int、str、text和log数据类型

求最近两值的变化量----change

  • 函数功能

      返回最近数据值与前一次数据值的差,顾其运算结果的值可以是正数(>0),也可以是负数(<0)。当数据类型为字符串是,如果最近两值相等,则结果为0,如果不相等,则结果为1.比如系统启动时间小于上一次,则说明系统已经发生重启。

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      支持float、int、str、text和log数据类型。

数据失联----nodata

  • 函数功能

      检测一段时间内是否接收到数据,返回值为1表示没有接收到数据,返回值为0表示接收到数据了。

  • 函数参数

      只支持一个时间参数,如30S、5m、1h,时间参数必须大于或等于30S,这是因为历史数据同步进程(History Syncer Process)是每隔30S执行一次这个函数的。

  • 数据类型

      支持float、int、str、text和log数据类型。

获取最新数据----last

  •  函数功能

      获取最近一段时间内或指定个数的数据,如求最近系统的允许进程数量。

  • 函数用法

      last(sec|#num,<time_shift>)

      last(3m)=N    #最近3分钟监控数值等于N

      last(#3)>N    # 第3次的监控数值大于N

      last(#3,3m)<N  #最近3分钟第3次的监控数值小于N

            注意:#num表示最近的第N个值,与其他函数#num的意思是不同的

  • 数据类型

      支持float、int、str、text和log数据类型

求前一个值----prev

  • 函数功能

       求前一个数据的值,等同于last(#2)

  • 函数用法

       prev()=N        #前一个值等于N

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      支持float、int、str、text和log数据类型

Trigger函数----计算

 求最大值----max

  • 函数功能

      在指定的一段时间内,或者指定数据个数,找出最大值,数学表达式为max{v1,v2,....vn},其中Vn为时间T内的数值。判断取值是否都为0,如3次取值的最大值都为0。

  • 函数用法

      max(sec|#num,<time_shift>)

      max(5m)>N       #最近5分钟内取值的最大值

      max(#3)=N       #最近3次取值的最大值

      max(#3,10m)<>N       #10分钟前3次取值的最大值

      max(10m,1d)<>N       #1天之前10分钟内取值的最大值

  • 函数参数

      第一个参数为秒或#num(监控指标数值的个数)

      第二个参数为某个时间段前

  • 数据类型

      支持float和int数据类型

求最小值----min

  • 函数功能

       在指定的一段时间内,或者指定数据个数,找出最小值,数学表达式为min{v1,v2..vn},其中v1,v2...vn为时间T内的数值。判断取值是否都为0。

  • 函数用法

      min(sec|#num,<time_shift>)

      min(5m)>N       #最近5分钟内取值的最小值

      min(#3)=N       #最近3次取值的最小值

      min(#3,10m)<>N       #10分钟前3次取值的最小值

      min(10m,1d)<>N       #1天之前10分钟内取值的最小值

  • 函数参数     

      第一个参数为秒或#num(监控指标数值的个数)

      第二个参数为某个时间段前

  • 数据类型

      支持float和int数据类型

求平均值----avg

  •  函数功能

      在指定的一段时间内,或者指定数据个数,求平均值,数学表达式为avg{v1,v2...vn},其中v1,v2...vn为时间T内的数值。判断取值是否都为0,如3次取值的平均值为0。

  • 函数用法

      avg(sec|#num,<time_shift>)

      avg(5m)>N       #最近5分钟内取值的平均值

      avg(#3)=N       #最近3次取值的平均值

      avg(#3,10m)<>N       #10分钟前3次取值的最平均值

      avg(10m,1d)<>N       #1天之前10分钟内取值的平均值

  • 函数参数     

      第一个参数为秒或#num(监控指标数值的个数)

      第二个参数为某个时间段前

  • 数据类型

      支持float和int数据类型

值求和----sum

  • 函数功能

      在指定的一段时间内,或者指定数据个数,求所有值的和,数学表达式为sum{v1,v2...vn},其中v1,v2...vn为时间T内的数值。

  • 函数用法

         sum(sec|#num,<time_shift>)

      sum(5m)>N       #最近5分钟内取值的所有数据相加求和

      sum(#3)=N       #最近3次取值的所有数据相加求和

      sum(#3,10m)<>N       #10分钟前3次取值的所有数据相加求和

      sum(10m,1d)<>N       #1天之前10分钟内取值的所有数据相加求和

  • 函数参数      

      第一个参数为秒或#num(监控指标数值的个数)

      第二个参数为某个时间段前

  • 数据类型

      支持float和int数据类型

统计个数----count

  • 函数功能

      在指定的一段时间内,或者指定数据个数,统计数值个数,数学表达式为count{v1,v2....Vn},其中v1,v2....Vn为时间T内的数值

  • 函数用法

      count(sec|#num,<pattern>,<operator>,<time_shift>)

        count(10m)             #最近10分钟内数值的个数

        count(600,12)        #最近10分钟内数值等于12的个数

      count(10m,"error",eq)    #最近10分钟内等于“error”的值的数量

      count(10m,12,gt)       #最近10分钟内超过12的值的数量

      count(#10,12,gt)        #最近10个值超过12的值数量

      count(10m,12,gt,1d)     #1天前10的最近10分钟内超过12的值的数量

      count(10m,6/7,band)    #最近10分钟的值数,其中3个最低有效位为‘110’(二进制)

      count(10m,,,1d)           #1天前的最近10分钟的值的数量

  • 函数参数

      eq:相等

      ne:不相等

      gt:大于

      ge:大于或等于

      lt:小于

      le:小于或等于

      like:内容匹配

      band:位与运算

      regexp:正则表达式匹配

      iregexp:忽略大小写的正则表达式匹配

      运算符支持的数据类型如下:

      eq(默认)、ne、gt、ge、lt、le、band、regexp、iregexp支持整数

      eq(默认)、ne、gt、ge、lt、le、regexp、iregexp支持浮点数

      like(默认)、eq、ne、regexp、iregexp支持字符串、文本、日志

  • 数据类型

      支持float、int、str、text和log数据类型

Trigger函数----时间

返回当前时间(年月日时分秒) ----now

  • 函数功能  

      返回当前时间,距离Epoch(1970年1月1日 00:00:00UTC)时间的秒数。

  • 函数用法

      now()=1535877351       # 当前时间的时间戳等于1535877351

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      支持float、int、str、text和log数据类型

返回当前日期(年月日)----date

  • 函数功能

      返回当前日期(格式为YYYYMMDD),例如20190102.

  • 函数用法

      date()=20190102          # 当前日期等于20190102

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      支持float、int、str、text和log数据类型

返回当前时间(时分秒)----time

  • 函数功能

      返回当前时间,格式为HHMMSS,例如123055

  • 函数用法

      time()=123055     #当前时间等于12:30:55

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      支持float、int、str、text和log数据类型

本月第几天-----dayofmonth

  • 函数功能

       返回当前时间是本月第几天(数值范围为1~31)

  • 函数用法

       dayofmoth()-30     # 当前时间等于当月第30

  • 函数参数

       不支持任何参数的传入

  • 数据类型

       支持float、int、str、text和log数据类型

本周第几天----dayofweek

  • 函数功能

      返回当前时间是本周第几天(数值范围为1~7),星期一是1,星期天是7。

  • 函数用法

      dayofweek()=3         # 当前时间等于周三

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      所有数据类型

时间对比----fuzzytime

  • 函数功能

      将zabbix-agent的时间戳与zabbix-server的时间戳进行比较,如果差异超过指定的时间段,则函数返回值为0;如果时间戳小于间隔值,则函数返回值为1.

      通常使用system.localtime来检查zabbix-agent端的时间与zabbix-server端的时间是否存在差异。

  • 函数用法

      fuzzytime(sec)

      fuzzytime(5m)=0   #监控项的时间与zabbix-server的时间相差大于5分钟

  • 函数参数

      支持一个参数,即时间,如fuzzytime(5m)

  • 数据类型

      支持float和int数据类型

Trigger函数----日志

日志ID----logeventid

  • 函数功能

      检查最近的日志条目的event id是否与正则表达式匹配。参数为正则表达式,POSIX扩展样式。当返回值为0时,表示不匹配,当返回值为1时,表示匹配。

  • 函数用法

      logeventid(pattern)

  • 函数参数

      支持一个参数,可以使用正则表达式

  • 数据类型

      仅支持log数据类型

 获取日志等级----logseverity

  • 函数功能

      返回最近的日志条目的日志等级N(log serverity)。当返回值为0时,表示默认等级,N为具体对应的等级(整数)。通常用于Windows event logs监控。Zabbix日志等级来源于Windows event logs的Information列。

  • 函数功能

      logseverity()=0      #日志等级为0

  • 函数参数

      不支持任何参数的传入

  • 数据类型

      仅支持log数据类型

获取日志来源----logsource

  • 函数功能

      检查最近的日志数据来源是否与正则表达式匹配。当返回值为0时,表示不匹配;当返回值为1时,表示匹配。通常用于windows event logs监控,例如logsource["VMWare Server"]

  • 函数用法

      logsource(pattern)

      logsource("web") = 0    # 未匹配到web日志源

  • 函数参数

      支持一个参数,可以使用正则表达式

  • 数据类型

      仅支持log数据类型

Trigger函数----字符串匹配

正则表达式不区分大小写----iregexp

  • 函数功能

      从值中查找与正则表达式匹配的数值,不区分大小写。当正则表达式匹配数值时,结果为1,当正则表达式不匹配数值时,结果为0。通常用于从字符串中正则匹配数据,如从日志中匹配报错、异常、关键字等。

  • 函数用法

      iregexp(pattern,<sec|#num>)

      iregexp(green)   <>1    # 未检测到green字符串

  • 函数参数

      第一个参数为匹配的字符串

      第二个参数为秒或#num(监控指标数值的个数)

  • 数据类型

      支持str、log和text数据类型

正则表达式区分大小写----regexp

  • 函数功能

      从值中查找与正则表达式匹配的数值,区分大小写。当正则表达式匹配数值时,结果为1,当正则表达式不匹配数值时,结果为0。通常用于从字符串中正则匹配数据,如从日志中匹配报错、异常、关键字等。

  • 函数用法

      regexp(pattern,<sec|#num>)

      regexp(ON,#3)   <>1    # 3次结果都未检测到ON字符串

  • 函数参数

      第一个参数为匹配的字符串

      第二个参数为秒或#num(监控指标数值的个数)

  • 数据类型

      支持str、log和text数据类型

字符串匹配-----str

  • 函数功能

      从值中查找字符串,区分大小写。当从数值中找到匹配值时,结果为1;如果未找到匹配的值,则结果为0。该函数在日志、文本、字符等场景中使用,可以通过此函数来判断版本、角色等信息。

  • 函数用法

      str(pattern,<sec|#num>)

  • 函数参数

      第一个参数匹配的字符串,大小写敏感

      第二个参数为秒或#num(监控指标数值的个数)

  • 支持str、log和text数据类型

字符串长度----strlen

  • 函数功能

    判断字符串长度与预期是否相同,比如获取md5值,应该是32位的,如果不是32位的,则说明该数据与预期不匹配。

  • 函数用法

    strlen(sec|#num,<time_shift>)

  • 数据类型

    支持str、log和text数据类型

Trigger函数----趋势预测

百分线----percentile

  • 函数功能

    在指定的一段时间内,取出百分线值数。比如网络带宽流量,在某段时间内会有毛刺,去掉最高的几个值,计算出次高的值。

  • 函数用法

    percentile(sec|#num,<time_shift>,percentage)

  • 数据类型

    支持float和int数据类型

趋势预测----forecast

  • 函数功能

    预测监控指标未来的最大值、最小值、增量值或平均值,用于评估从现在开始到未来一段时间的数值变化情况。

  • 函数用法

    forecast(sec|#num,<time_shift>,time,<fit>,<mode>)

    forecast(10m,,1h,linear,value)

  • 函数参数

    第一个参数为秒或#num(监控指标数值的个数),以最新采集到的数据为依据,以HASH标记开开头;

    第二个参数为某个时间段前(time_shift),如1h之前的时间

    第三个参数为时间(time),以秒为单位,即从现在往后的时间。如果是之前的历史数据,则为负数,如-20m表示20分钟之前的数据

    第四个参数为可选的历史数据计算函数(fit),其支持的参数如下:

    linear:线性函数

    polynomialN:N次多项式(1<=N<=6)

    exponential: 指数函数

    logarithmic:对数函数

    power:乘方(幂)函数

    第五个参数为值的处理模式(mode).其中支持的参数如下

    value:值(默认)

    max:最大值

    min:最小值

    delta:最大值-最小值

    avg:平均值

  • 数据类型

    支持float和int数据类型

 剩余时间----timeleft

  • 函数功能

    监控指标达到设定的阈值所需要的时间(以秒为单位)

  • 函数用法

    timeleft(sec|#num,<time_shift>,threshold,<fit>)

  • 函数参数

    第一个参数为秒或#num(监控指标数值的个数),以最新采集到的数据为依据,以HASH标记开头

    第二个参数为某个时间段前(time_shift)

    第三个参数为阈值(threshold),即所定义的趋势阈值

    第四个参数为可选的历史数据计算函数(fit),请参考forecast参数

  • 数据类型

    支持float和int数据类型

 

    

    

    

  

   

 

                    

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料:

    zabbix官方文档链接;https://www.zabbix.com/documentation/4.0/manual/appendix/triggers/functions

             https://zabbix.org/mw/images/1/18/Prediction_docs.pdf

    

 

posted @ 2020-09-02 10:39  摩天居士-谢烟客  阅读(1220)  评论(0编辑  收藏  举报