• 触发器例子


    例子 :

    https://www.zabbix.com/documentation/3.4/zh/manual/config/triggers/expression  #官网 

    触发器名称:Processor load is too high on host
    {host:system.cpu.load[all,avg1].last(0)}>5
    触发器说明:
    hosthost名称
    system.cpu.load[all,avg1]:item值,一分内cpu平均负载值
    last(0):最新值
    >5:最新值大于5
    如上所示,www.zabbix.com这个主机的监控项,最新的CPU负载值如果大于5,那么表达式会返回true,这样一来触发器状态就改变为“problem”了

     

    触发器名称:www.zabbix.com is overloaded
    {host:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2

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

     

    触发器名称:/etc/passwd has been changed 使用函数 diff():
    {host:vfs.file.cksum[/etc/passwd].diff(0)}>0

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

     

    触发器名称:Someone is downloading a large file from the Internet 使用函数 min:
    {host:net.if.in[eth0,bytes].min(5m)}>100K

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

     

    触发器名称:Both nodes of clustered SMTP server are down
    {smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0 & {smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

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

     

    触发器名称:Zabbix agent needs to be upgraded 使用函数str():
    {zabbix.zabbix.com:agent.version.str("beta8")}=1

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

     

    触发器名称:Server is unreachable
    {zabbix.zabbix.com:icmpping.count(30m,0)}>5

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

     

    触发器名称:No heartbeats within last 3 minutes 使用函数 nodata():
    {zabbix.zabbix.com:tick.nodata(3m)}=1

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

     

    触发器名称:CPU activity at night time 使用函数 time():
    {zabbix:system.cpu.load[all,avg1].min(5m)}>2 & {zabbix:system.cpu.load[all,avg1].time(0)}>000000 & {zabbix:system.cpu.load[all,avg1].time(0)}<060000

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

     

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

     

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

    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,当前情况下,只有温度处在这个温度之间触发器值才会为FALSE。(慢慢理解,这个表达式有点绕) 为了达到这个效果,我们需要使用如下触发器表达式:

    触发器名称:Temperature in server room is too high
    ({TRIGGER.VALUE}=0&{server:temp.last(0)}>20) | ({TRIGGER.VALUE}=1&{server:temp.last(0)}<15)

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

     

    触发器名称:Free disk space is too low Problem: 最近5分钟内剩余磁盘空间小于10GB。 Recovery: 最近10分钟内磁盘空间大于40GB
    ({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) | ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

    参数 :

    https://www.zabbix.com/documentation/3.4/zh/manual/appendix/triggers/functions  #官网

    Zabbix触发器的语法如下:

    {<server>:<key>.<function>(<parameter>)}<operator><constant>

    Template App Zabbix Agent模板中的主机ping监控的触发器来进行说明:

    {Template App Zabbix Agent:agent.ping.nodata(5m)}=1

    <server>    Template App Zabbix Agent #即监控模板
    <key>    agent.ping #即监控模板里的项目Items
    <function>     nodata() #及项目所使用的方法
    <parameter>    5m #及方法所使用的参数

    <operator>  #操作人,选填

    <constant>   #持续性,选填

     

    (#5)  #五个最新值的平均值

    (1h)  #一个小时的平均值

    (1h,1d)  #一天前一个小时的平均值。

     

    类型 : 浮点数(float), 整数(int), 字符(str), 文本(text), 日志(log)

     

    abschange  #最近获取值与之前获取值差的绝对值

    支持值的类型: float, int, str, text, log

    返回值 : 0 - 两值相等

       1 - 两值不等

    例子 : (最近获取值;之前获取值=abschange)

    3;1=2

    0;-2.5=2.5

     

    avg (sec|#num,<time_shift>)  #返回一段时间的平均值

    参数:秒或#num

    支持值的类型: float, int

    例如 : ⇒ avg(#5) → 五个最新值的平均值

    ⇒ avg(1h) → 一个小时的平均值

    ⇒ avg(1h,1d) → 一天前一个小时的平均值。

     

    band (sec|#num,mask,<time_shift>)  #项目值和掩码的按位与值

    参数:#num 参数和其它一些函数的作用不通 (参照 last()).

    支持值的类型: int

    注意此处的 #num 参数和其它一些函数的作用不用 (参照 last()).

    尽管以二进制方式进行比较,但是所有的参数和返回值都是十进制数。 例如, 检查第三位是和4做比较而不是100。

    例如 : ⇒ band(,12)=8 or band(,12)=4 → 第三位和第四位被设置,但不是同时

    ⇒ band(,20)=16 → 第三位没有被设置但是第五位被设置了。

     

    change  #返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同

    支持的值类型: float, int, str, text, log

    change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n

    例如: (最近获取值;之前获取值=change)

    3;1=-2

    0;-2.5=-2.5

     

    count (sec|#num,<pattern>,<operator>,<time_shift>)  #返回指定时间间隔内数值的统计

    支持值的类型: float, int, str, text, log

    参数:秒或#num

    举例:
    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")-过去10分钟值最低三个有效位是 '110' (十进制)的个数
    count(600,,,86400)24小时之前的10分钟数据值的个数
    第一个参数:指定时间段
    第二个参数:样本数据
    第三个参数:操作参数
    第四个参数:漂移参数
    #支持的操作类型
    eq: 相等
    ne: 不相等
    gt: 大于
    ge: 大于等于
    lt: 小于
    le: 小于等于
    like: 内容匹配

     

    last (sec|#num,<time_shift>)  #最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的

    参数:秒或#num
    支持值类型:float,int,str,text,log

    例如:

    last(0)等价于last(#1)

    last(#3)表示最近**第**3个值(并不是最近的三个值)
    本函数也支持第二个参数**time_shift**,例如
    last(0,86400)返回一天前的最近的值
    如果在history中同一秒中有多个值存在,Zabbix不保证值的精确顺序

    logeventid (pattern)  #检查最近的日志条目的EventID是否匹配正则表达式.参数为正则表达式,POSIX扩展样式.当返回值为0时表示不匹配,1表示匹配

    参数:string
    支持值类型:log

     

    max (sec|#num,<time_shift>)  #返回指定时间间隔的最大值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)

    参数:秒或#num
    支持值类型:float,int

     

    min (sec|#num,<time_shift>)  #返回指定时间间隔的最小值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)

    参数:秒或#num
    支持值类型:float,int

     

    nodata (sec)  #当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示其他

    参数:秒
    支持值类型:any

    返回值:

    1 - 指定评估期没有接收到数据

    0 - 其它

     

    now  #返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数

    支持值类型:any

     

     

     

    date  #返回当前的时间,格式YYYYMMDD

    支持值的类型: any

    返回值如: 20150731

     

    percentile (sec|#num,<time_shift>,percentage)  #一段时间的百分值,(percentage) 做为第三个参数

    支持值的类型: float, int

    percentage - 0 and 100 (包括)之间的一个浮点数,小数点后最多四位

    sec or #num - 评估期以秒值或最新值个数(跟在#号后)表示time_shift (可选) - see avg()

     

    prev  #返回之前的值,类似于last(#2)

    支持值类型:float,int,str,text,log

     

    regexp (pattern,<sec|#num>)  #检查最近的值是否匹配正则表达式,参数的正则表达式为POSIX扩展样式,第二个参数为秒数或收集值的数目,将会处理多个值.本函数区分大小写。当返回值为1时表示找到,0为其他

    参数:第一个参数为string,第二个参数为秒或#num
    支持值类型:str,log,text

    返回值:

    1 - 找到

    0 - 其它

    该函数区分大小写

     

    str (pattern,<sec|#num>)  #查找最近值中的字符串。第一个参数指定查找的字符串,大小写敏感。第二个可选的参数指定秒数或收集值的数目,将会处理多个值。当返回值为1时表示找到,0为其他

    参数:第一个参数为string,第二个参数为秒或#num
    支持值类型:str,log,text

    返回值:

    1 - 找到

    0 - 其它

    该函数区分大小写

     

    strlen (sec|#num,<time_shift>)  #指定最近值的字符串长度(并非字节),参数值类似于last函数.例如strlen(0)等价于strlen(#1),strlen(#3)表示最近的第三个值,strlen(0,86400)表示一天前的最近的值

    参数:秒或#num
    支持值类型:str,log,text

    例如:

    ⇒ strlen()(等同于 strlen(#1)) → 最新值的长度

    ⇒ strlen(#3) → 最新的第三个值的长度

    ⇒ strlen(,1d) → 一天前最新值的长度。

     

    sum (sec|#num,<time_shift>)  #返回指定时间间隔中收集到的值的总和.时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法

    参数:秒或#num
    支持值类型:float,int

     

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

    支持值类型:any

     

    timeleft (sec|#num,<time_shift>,threshold,<fit>)  #达到阀值需要多久时间

    例如:

    ⇒ timeleft(#10,,0) → 根据最新的十个值估计项目值达到0需要的时间

    ⇒ timeleft(1h,,100) → 根据过去一小时的值估计项目值达到100需要的时间

    ⇒ timeleft(1h,1d,0) → 根据一天前的一个小时值估计项目值达到0需要的时间

    ⇒ timeleft(1h,,200,polynomial2) → 根据过去一小时并按照二次多项式方式估计项目值达到200需要的时间

     

     

    dayofmonth   #返回当前是本月的第几天(取值范围从1到31)

    支持值的类型: any

     

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

    支持值的类型: any

     

    delta (sec|#num,<time_shift>)   #返回时间间隔内的最大值与最小值的差值

    参数:秒或#num

    支持类型:float,int

     

    diff  #返回值为1表示最近的值与之前的值不同,0为相同

    支持值类型:float,int,str,text,log

     

    forecast (sec|#num,<time_shift>,time,<fit>,<mode>)  #预算下一个值的最大值,最小值,差值或平均值

    支持值的类型: float, int

    例如:

    ⇒ forecast(#10,,1h) → 根据最新的十个值估计一小时后的数值

    ⇒ forecast(1h,,30m) → 根据过去一小时的值估计三十分钟后的数值

    ⇒ forecast(1h,1d,12h) → 根据一天前的一个小时值估计十二个小时后的数值

    ⇒ forecast(1h,,10m,exponential) → 根据过去一小时并按照指数函数方式估计十分钟后的数值

    ⇒ forecast(1h,,2h,polynomial3,max) → 根据过去一小时并按照三次多项式方式估计两小时的最大数值

    ⇒ forecast(#​2,,​-20m) → 根据最新的两个值估计二十分钟前的数值 (比使用last()或prev()函数更加精确, 特别是项目很少更新的时候, 比如说, 一小时一次)

     

    fuzzytime (sec)  #返回值为1表示监控项值的时间戳与ZabbixServer的时间多N秒,0为其他.常使用system.localtime来检查本地时间是否与Zabbixserver时间相同

    参数:秒

    支持值类型:float,int

    例如:

    ⇒ fuzzytime(60)=0 → 如果时间差超过60秒,就会检测到一个问题

    ⇒ vfs.file.time[/path/file,modify]键值检测文件是否长时间未更新

     

    iregexp (pattern,<sec|#num>)  #该函数和 regexp() 类似,只是不区分大小写

    支持值的类型: str, log, text

     

    logseverity  #

    返回最近日志条目的日志等级(logseverity).当返回值为0时表示默认等级,N为具体对应等级(整数,常用于Windowseventlogs).Zabbix日志等级来源于Windowseventlog的Information列

    支持值类型:log

    返回值:

    0 - 默认等级

    N - 对应的等级 (整数,常用语Windows event logs: 1 - Information, 2 - Warning, 4 - Error, 7 - Failure Audit, 8 - Success Audit, 9 - Critical, 10 - Verbose).

    Zabbix从Windows event log Information域获取日志等级

     

    logsource (pattern)  #检查最近的日志条目是否匹配参数的日志来源.当返回值为0时表示不匹配,1表示匹配。通场用于Windowseventlogs监控.例如logsource["VMWareServer"]

    参数:string
    支持值类型:log

    返回值:

    0 - 不匹配

    1 - 匹配

    通常用于Windows event logs. 例如, logsource("VMware Server")

     

     

    <parameter>参数

    常用的时间参数有以下几种:

    s - seconds (when used, works the same as the raw value)
    m - minutes
    h - hours
    d - days
    w - weeks

     

    也支持使用容量参数:

    K - kilo
    M - mega
    G - giga
    T - tera

     

    举例参数的等效转换,参数1中的参数可以等效使用参数2中的进行替换:

      参数1:

    {host:zabbix[proxy,zabbix_proxy,lastaccess]}>120
    {host:system.uptime[].last(0)}<86400
    {host:system.cpu.load.avg(600)}<10

    参数2:
    {host:zabbix[proxy,zabbix_proxy,lastaccess]}>2m
    {host:system.uptime.last(0)}<1d
    {host:system.cpu.load.avg(10m)}<10

     

     

    优先级

    操作符

    定义

    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

    =

    等于 , 用法 :

    A = B ⇔ (A > B - 0.000001) & (A < B + 0.000001)

    9

    &

    逻辑与

    10

    |

    逻辑或

     

    在表达式中#可以有更多的作用:

    sum(600):表示在600秒之内接收到所有值的和

    sum(#5):表示最后5个值的和

    如果最近的获取的5个值为3, 7, 2, 6, 5

    last(#2) would return 7

    last(#5) would return 5

     

      

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    java 各个文件夹的含义
    对称加密 & 非对称加密
    leetcode 155 最小栈
    leetcode 53 最大自序列和
    leetcode 146 LRU 缓存机制
    notebook 开启 有限元学习
    leetcode 232 用栈实现队列
    LINUX装机问题:无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端
    JAVA笔记4-static关键字
    C++构造函数、析构函数、虚析构函数
  • 原文地址:https://www.cnblogs.com/ZhengLiming/p/10314416.html
Copyright © 2020-2023  润新知