zoukankan      html  css  js  c++  java
  • (24)zabbix触发器表达式详解

    概述

    触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:

    {主机:key.函数(参数)}<表达式>常数,具体的例子,请接着往下走,很简单

    Functions函数

    触发器functions可以引用检索到的值,当前时间或者其他元素。触发器表达式支持的function完整列表: 

    FUNCTION函数

     

    Description

    Parameters

    Comments

    abschange

     

    最新值和先前值之间差的绝对值

    支持的值类型:

    float, int, str, text, log

    示例:
    (pre value;last value=abschange)
    1;5=4
    3;1=2
    0;-2.5=2.5
    字符串类型的返回:
    0 – 值相同
    1 – 值不同

    avg(sec|#num,<time_shift>)

     

    定义评估期内项目Item的平均值

    sec #num- 以秒为单位的评估期或最新收集的num个值(以散列标记开头)
    time_shift(可选) -评估点将时间移回(即向过去的时间移)秒数

    支持的值类型:

    float, int

    示例:
    ⇒ avg(#5) →最近5个值得平均值
    ⇒ avg(1h) →1小时内的平均值
    ⇒ avg(1h,1d) → 此刻起,一天前1小时内的平均值
    time_shift参数从Zabbix 1.8.2开始被支持.

    当需要将当前平均值与time_shift秒前的平均值进行比较时,很有用。

    band(sec|#num,mask,<time_shift>)

     

    item值和掩码的“按位与”的值

    sec(ignored) 或 #num- 最新的第N个值,而不是最近总的N个
    mask(mandatory) - 64位无符号整数(0-18446744073709551615)
    time_shift(optional) - see avg()

    支持的值类型:

    int

     

    注意:这里的#num和其他多数函数中的#num意义不同(和last()中的#num相同)

    虽然比较是按位进行的,但所有提供的值和返回的值必须是十进制的。例如,检查第三位是通过比较4(0100)来完成的,而不是100(1100100)

    示例:
    ⇒ band(,12)=8 或 band(,12)=4 → 第3或第4个位被设定,但不是同时
    ⇒ band(,20)=16 →第3位没有被设定,第5位被设定
    从Zabbix 2.2.0.开始支持

    change

     

    最近的一个数值与前一个数值的差值

    支持的值类型:

    float, int, str, text, log

    示例:
    (pre value;last value=change)
    1;5=+4
    3;1=-2
    0;-2.5=-2.5

    字符串类型的返回:
    0 – 值相同
    1 – 值不同

     

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

     

    定义的评估期内的数值的个数

    sec #num -以秒为单位的评估期或最新收集的num个值(以散列标记开头)
    pattern(optional) – 需要的pattern
    operator(optional)
    支持的操作符:
    eq- 等于
    ne- 不等于
    gt- 大于
    ge- 大于等于
    lt- 小于
    le- 小于等于
    like- 如果包含pattern这匹配(大小写敏感)
    band- 按位与

    regexp- 大小写敏感的正则匹配pattern
    iregexp-大小写不敏感的正则匹配pattern

    注意:
    eq(默认),ne,gt,ge,lt,le,band,regexp,iregexp支持整数items

    eq(默认),ne,gt,ge,lt,le,band,regexp,iregexp支持浮点数items
    like(默认),eq,ne,regexp,iregexp支持 string, text和 log类型的items

    time_shift(optional) - see avg()

     

    支持的值类型:

    float, int, str, text, log

    浮点数精确到0.000001

    使用band作为第三个参数,

    第二个pattern参数可以指定为两个数字,用'/'分隔:number_to_compare_with/mask

     

    count()从值和掩码计算“按位与”并将结果与number_to_compare_with进行比较

    如果按位与的结果等于number_to_compare_with, 该值被计算.
    如果number_to_compare_withmask相等,仅mask被指定(没有'/').


    With regexp or iregexp as third parameter the second pattern parameter can be an ordinary or global (starting with '@') regular expression. In case of global regular expressions case sensitivity is inherited from global regular expression settings. For the purpose of regexp matching, float values will always be represented with 4 decimal digits after '.'. Also note that for large numbers difference in decimal (stored in database) and binary (used by Zabbix server) representation may affect the 4th decimal digit. 

    示例:
    ⇒ count(10m) →计算最近10分钟内值的个数

    ⇒ count(10m,"error",eq) → 计算最近10分钟内值等于'error'的值的个数
    ⇒ count(10m,12) →计算最近10分钟内值等于'12'的值的个数

    ⇒ count(10m,12,gt) →计算最近10分钟内值大于'12'的值的个数
    ⇒ count(#10,12,gt) →计算最近10个值中大于'12'的值的个数
    ⇒ count(10m,12,gt,1d) → number of values for preceding 10 minutes up to 24 hours ago that were over '12'
    ⇒ count(10m,6/7,band) → number of values for last 10 minutes having '110' (in binary) in the 3 least significant bits.
    ⇒ count(10m,,,1d) → number of values for preceding 10 minutes up to 24 hours ago

    The #num parameter is supported since Zabbix 1.6.1.
    The time_shift parameter and string operators are supported since Zabbix 1.8.2.
    The band operator is supported since Zabbix 2.2.0.
    The regexpiregexp operators are supported since Zabbix 3.2.0.

     

    date

     

    以 YYYYMMDD 格式显示的当前日期

     

    支持的值类型: any

    返回值示例: 20150731

     

    dayofmonth

     

    每个月的日期范围1到 31

     

    支持的值类型: any
    从Zabbix 1.8.5.开始支持

     

    dayofweek

     

    星期几,范围1 到 7 (Mon - 1, Sun - 7).

     

    支持的值类型: any

     

    delta (sec|#num,<time_shift>)

     

    定义的评估期内的最大值和最小值之间的差异('max()'减去'min()')。

    sec或 #num -评估周期(以秒为单位)或指定的最新收集的num个值(以哈希标记开头)

    time_shift (optional) - see avg()

    支持的值类型: float, int

    The time_shift parameter is supported since Zabbix 1.8.2.

     

    diff

     

    检查最新值和上一个值是否不同

     

    支持的值类型: float, int, str, text, log
    Returns:
    1 – 二者不同
    0 – 二者相同

     

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

     

    item的未来值,最大值,最小值,增量值或平均值

    sec 或 #num -评估周期(以秒为单位)或指定的最新收集的num个值(以哈希标记开头)
    time_shift (optional) - see avg()
    time - 以秒为单位预测水平

    fit (optional) - 用于拟合历史数据的函数
    支持的 fits:
    linear – 线性函数
    polynomialN - N次多项式(1 <= N <= 6)
    exponential - 指数函数
    logarithmic - 对数函数
    power – 幂函数
    注意:
    linear是默认使用的拟合函数

     polynomial1等同于 linear

    mode (optional) – 按要求输出
    支持的mode:
    value - value (默认)
    max – 最大值
    min – 最小值
    delta – 最大值-最小值
    avg – 平均值

    注意:
    valueitem值估计为 +time时刻的值

    max,min,delta和avg评估在此刻及再经time之间的值

    支持的值类型: float, int

    如果返回值大于 999999999999.9999 或小于-999999999999.9999, 返回值分别被修剪为 999999999999.9999 或 -999999999999.9999

    仅在表达式中被错误使用(如错误的item类型、无效参数)时才变得不受支持,否则在出现错误时返回-1。

    示例:
    ⇒ forecast(#10,,1h) →基于最后10个值预测一小时后的item值
    ⇒ forecast(1h,,30m) →根据最后一小时数据预测30分钟后的item值
    ⇒ forecast(1h,1d,12h) →基于一天前一小时的12小时后的item预测
    ⇒ forecast(1h,,10m,exponential) →基于最后一小时数据和指数函数预测10分钟后的item值
    ⇒ forecast(1h,,2h,polynomial3,max) →根据最后一小时数据和三次(三次)多项式,最大值item的预测可以在接下来的两个小时内达到
    ⇒ forecast(#​2,,​-20m) → 根据最后两个值评估20分钟前item的值(这可能比使用last()或prev()更精确,特别是如果item很少更新,比如每小时更新一次)


    Zabbix 3.0.0开始支持该函数
    Zabbix 3.0.6 和 3.2.2后负的时间值开始支持
    See also additional information on predictive trigger functions.

     

    fuzzytime (sec)

     

    检查item时间戳值与Zabbix Server时间的差异

    sec - seconds

    支持的值类型: float, int

    Returns:
    0 -如果item时间戳值与Zabbix Server时间戳之间的差异超过T秒
    1 - otherwise.

    通常与system.localtime一起使用,以检查本地时间是否与Zabbix Server的本地时间同步。也可以与vfs.file.time [/path/file,modify] Key一起使用,以检查该文件是否长时间没有获得更新。

    Example:
    ⇒ fuzzytime(60)=0 → 如果时间差异操作60秒,检测到problem

     

    iregexp (pattern,<sec|#num>)

     

    此函数是regexp()的不区分大小写的版本。

    see regexp()

    Supported value types: str, log, text

     

    last (sec|#num,<time_shift>)

     

    最近一个值

    sec (ignored) 或 #num – 最近的第N个值
    time_shift (optional) - see avg()

    Supported value types: float, int, str, text, log
    注意,#num在这里的工作方式与许多其他功能不同
    For example:
    last() 总是等同于last(#1)
    last(#3) – 最近的第三个值 (而不是最新的3个值)

    如果历史记录中的一秒内存在两个以上的值,则Zabbix不保证值的确切顺序
    Zabbix 1.6.2开始支持#num 参数
    Zabbix 1.8.2开始支持time_shift参数

     

    logeventid (pattern)

     

    检查上一个日志条目的事件ID是否与正则表达式匹配。

    pattern -在Zabbix 3.4之前描述所需模式,Perl兼容正则表达式(PCRE)样式或POSIX扩展正则表达式的正则表达式。

    支持的值类型: log
    Returns:
    0 – 不匹配
    1 – 匹配
    This function is supported since Zabbix 1.8.5.

     

    logseverity

     

    记录上次日志条目的日志严重性

     

    Supported value types: log

    Returns:
    0 – 默认严重性
    N -严重性(整数,对Windows事件日志有用:1 - Information, 2 - Warning, 4 - Error, 7 - Failure Audit, 8 - Success Audit, 9 - Critical, 10 - Verbose)
    Zabbix从Windows事件日志的信息字段中获取日志严重性。

     

    logsource (pattern)

     

    检查上一个日志条目的日志源是否与参数匹配。

    pattern - required string

    Supported value types: log

    Returns:
    0 – 不匹配
    1 – 匹配
    通常用于Windows事件日志。例如,logsource(“VMware Server”)

     

    max (sec|#num,<time_shift>)

     

    定义的评估期内item的最大值。

    sec 或 #num -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)time_shift (optional) - see avg()

    Supported value types: float, int
    The time_shift parameter is supported since Zabbix 1.8.2.

     

    min (sec|#num,<time_shift>)

     

    定义的评估期内item的最小值。

    sec 或 #num -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)time_shift (optional) - see avg()

    Supported value types: float, int
    The time_shift parameter is supported since Zabbix 1.8.2.

     

    nodata (sec)

     

    检查没有收到数据

    sec -评估期以秒为单位。周期不应小于30秒,因为定时器进程仅每30秒计算一次
    nodata(0)被禁止使用

    Supported value types: any
    Returns:
    1 – 定义时间期间未接收到数据
    0 - otherwise
    注意,如果在第一个参数的周期内,此函数将显示错误:

    - 没有数据且Zabbix服务器已重新启动

    - 没有数据且维护已完成

    - 没有数据且项目已添加或重新启用
    Errors are displayed in the Info column in trigger configuration.

     

    now

     

    自从(00:00:00 UTC, January 1, 1970)到现在的秒数

     

    Supported value types: any

     

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

     

    P-th percentile of a period

    期间的第P个百分位数,其中P(百分比)由第三个参数指定。

    sec 或 #num -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)time_shift (optional) - see avg()
    percentage - 0到100(含)之间的浮点数,小数点后最多4位数

    Supported value types: float, int

    This function is supported since Zabbix 3.0.0.

     

    prev

     

    前一个值

     

    Supported value types: float, int, str, text, log
    等同于last(#2)

     

    regexp (pattern,<sec|#num>)

     

    检查最新(最新)值是否与正则表达式匹配。

    pattern -正则表达式,在Zabbix 3.4之前的Perl兼容正则表达式(PCRE)样式或POSIX扩展正则表达式

    sec 或 #num (optional) -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)。在这种情况下,可以处理多个值。

    Supported value types: str, text, log

    Returns:
    1 –发现至少一个
    0 - otherwise
    如果处理了多个值,则如果存在至少一个匹配值,则返回“1”
    大小写敏感

     

    str (pattern,<sec|#num>)

     

    查找最新(最新)值中的字符串。

    pattern – 要查找的字符串的正则
    sec 或 #num (optional) -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)。在这种情况下,可以处理多个值

    Supported value types: str, text, log

    Returns:
    1 –找到
    0 - otherwise
    如果处理了多个值,则如果存在至少一个匹配值,则返回“1”
    大小写敏感

     

    strlen (sec|#num,<time_shift>)

     

    字符(不是字节)中最新(最近)值的长度。

    sec (ignored) 或 #num – 最近第N个值

    time_shift (optional) - see avg()

    Supported value types: str, text, log
    Take note that #num works differently here than with many other functions.
    示例:
    ⇒ strlen()(is equal to strlen(#1)) →最新值的长度
    ⇒ strlen(#3) →最近的第三个值的长度
    ⇒ strlen(,1d) → 一天前最新值的长度
    This function is supported since Zabbix 1.8.4.

     

    sum (sec|#num,<time_shift>)

     

    在定义的评估期内收集的值的总和

    sec 或 #num -评估周期(以秒为单位)或最新收集的num个值(以哈希标记开头)time_shift (optional) - see avg()

    Supported value types: float, int

    The time_shift parameter is supported since Zabbix 1.8.2.

     

    time

     

    以HHMMSS 格式显示当前时间

     

    Supported value types: any
    Example of returned value: 123055

     

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

     

    item达到指定阈值所需的时间(以秒为单位)。

    sec或 #num -评估周期(以秒为单位)或指定的最新收集的num个值(以哈希标记开头)
    time_shift (optional) - see avg()
    threshold - value to reach
    fit (optional) - see forecast()

    支持的值类型: float, int
    如果返回的值大于 999999999999.9999,将被修剪为999999999999.9999.
    如果无法达到阈值,则返回999999999999.9999


    仅在表达式中使用错误(错误的item类型,无效参数)时才变得不受支持,否则在出现错误时返回-1

    Examples:
    ⇒ timeleft(#10,,0) →item基于最后10个值达到零的时间⇒ timeleft(1h,,100) →根据最后一小时数据,item值达到100之前的时间
    ⇒ timeleft(1h,1d,0) →基于一天前一小时的item值达到0的时间

    ⇒ timeleft(1h,,200,polynomial2) →根据最后一小时数据,item达到200的时间,并假设该item的行为类似于二次(二次)多项式
    Zabbix 3.0.0.开始支持该函数
    自Zabbix 3.0.6和3.2.2起支持threshold参数中的单位符号。
    See also additional information on predictive trigger functions.

    1)所有函数只返回数值。例如,不支持与字符串比较。

    2)某些功能不能用于非数字参数!

    3)字符串参数应该用双引号。否则,他们可能会被误解。

    4)对于所有触发函数,sec和time_shift必须是一个带有可选时间单位后缀的整数,并且与item的数据类型完全无关。

    函数和不受支持的Item

    从Zabbix 3.2开始,可以为不支持的item计算nodata(),date(),dayofmonth(),dayofweek(),now()和time()函数。其他函数要求所引用的item处于受支持的状态。

    注意:

    bandlaststrlen3个函数的#num参数表示的最近第num个值,而不是最近num个值

    Function参数

    大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

    FUNCTION CALL描述
    sum(600) 600秒内的总和
    sum(#5) 最新5个值的和

    last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。last函数必须包含参数。
    AVG,count,last,min和max函数还支持额外的参数,以秒为单位的参数time_shift(时间偏移量)。例如avg(1h,1d),那么将会获取到昨天的1小时内的平均数据。

    [warning]备注:触发器表达式需要使用history历史数据来计算,如果history不可用(time_shift时间偏移量参数无法使用),因此history记录一定要保留长久一点,至少要保留需要用的记录。[/warning]
    触发器表达式可以使用单位符号来替代大数字,例如5m替代300,或者1d替代86400,1k替代1024字节等等。

    操作符

    优先级操作定义
    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 | 逻辑或

    触发器示例

    示例一

    触发器名称:Processor load is too high on www.zabbix.com

    触发器说明:

    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

    当前cpu负载大于5或者最近10分内的cpu负载大于2,那么表达式将会返回true.

    示例三

    触发器名称:/etc/passwd has been changed

    使用函数 diff():

    /etc/passwd最新的checksum与上一次获取到的checksum不同,表达式将会返回true. 我们可以使用同样的方法监控系统重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。这些zabbix一般都会自带,没带的你自己加上吧。

    示例四

    触发器名称:Someone is downloading a large file from the Internet

    使用函数 min:

    当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true

    示例五

    触发器名称:Both nodes of clustered SMTP server are down

    当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.

    示例六

    触发器名称:Zabbix agent needs to be upgraded

    使用函数str():

    如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.

    示例七

    触发器名称:Server is unreachable

    如上表达式表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。

    示例八

    触发器名称:No heartbeats within last 3 minutes

    使用函数 nodata():

    tick为Zabbix trapper类型,首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。

    示例九

    触发器名称:CPU activity at night time

    使用函数 time():

    只有在凌晨0点到6点整,最近5分钟内cpu负载大于2,表达式返回true,触发器的状态变更为“problem”

    示例十

    触发器名称:Check if client local time is in sync with Zabbix server time

    使用函数 fuzzytime():

    主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem”

    示例十一

    触发器名称:Comparing average load today with average load of the same time yesterday (使用 time_shift 时间偏移量参数).

    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.

    Hysteresis(迟滞,滞后)

    简单的说触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。明白了么?不明白就看例子吧。
    有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,直到温度低于15°才会接触警报,异常会解除。别整这些没用的,我们看实例.

    为了达到这个效果,我们需要使用如下触发器表达式:

    示例1

    触发器名称:Temperature in server room is too high

    如上有两个小括号,前面一个表示触发异常的条件,后面一个表达式表示解除异常的条件。

    注意:宏变量 {TRIGGER.VALUE}将会返回当前触发器的值

    示例2

    触发器名称:Free disk space is too low

    Problem: 最近5分钟剩余磁盘空间小于10GB。(异常)

    Recovery: 最近10分钟磁盘空间大于40GB。(恢复)

    简单说便是一旦剩余空间小于10G就触发异常,然后接下来剩余空间必须大于40G才能解除这个异常,就算你剩余空间达到了39G(不在报警条件里)那也是没用的,有意思不!

    结尾

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/wyzhou/p/10833146.html
Copyright © 2011-2022 走看看