zabbix从放弃到入门(8):触发器详解之二,触发器语法

  • A+
所属分类:zabbix  运维技术

这篇文章将会介绍zabbix触发器的语法结构。

在本博客中,"zabbix"是一个系列文章,如果你还不明白zabbix的相关概念,强烈建议从zabbix系列文章中的第一篇开始阅读,否则你可能无法理解这篇文章中涉及到的部分名词。

zabbix系列文章列表直达链接:zabbix入门系列

zabbix从放弃到入门(8):触发器详解之二,触发器语法

在上一篇文章中,我们已经用了 "非bu常zhuan通ye俗" 的方法给大家解释了什么是触发器,那么这次,我们从专业的角度,总结一下什么是触发器,但是这次的总结可能需要建立在之前文章的基础上,所以兄弟们可以先回顾一下之前的文章。

先来看看我们上一次创建的触发器。

zabbix从放弃到入门(8):触发器详解之二,触发器语法

 

我们也说过,触发器的本质其实就是一个表达式。上次创建的触发器对应的表达式如下图,下图中的表达式的含义为,如果testzbx1.zsythink.net这台主机上的根分区使用率倒数第二次被监控到的值大于13,则触发器将会被触发。

zabbix从放弃到入门(8):触发器详解之二,触发器语法

 
 

那么,我们把上图中的表达式放大一下,并且将其分解成5个部分,从而方便我们去理解。

zabbix从放弃到入门(8):触发器详解之二,触发器语法

其实,上面的5个部分我们可以通过如下语法表示,如下语法描述了一个触发器的条件表达式的基本结构。

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

 

此处,我们只总结其专业术语,如果想要通俗的理解,请查阅前一篇文章

1、上图中的第一部分对应了上述语法中的<server>,表示主机名称,上图中对应的主机为testzbx1.zsythink.net。

2、上图中的第二部分对应了上述语法中的<key>,表示对应主机上某个监控项对应的key,上图中对应的key取得的值为对应主机的根分区的使用率。

3、上图中的第三部分对应了上述语法中的<function>(<parameter>),所以说,last(#2)应该被称作一个带有参数的函数,last()被我们称之为函数,#2被我们称之为函数的参数,last(#2)就表示监控项对应的key最近2次中倒数第2次取得的值,那么聪明如你一定想到了,除了last()函数,还有别的函数吗,必须有啊,不同的函数实现的功能则不同,触发器所支持的函数有很多,常用的有 avg、count、change、sum、max、min、date等等,看这些函数的名字你也能猜出其大概的作用,无非就是获取监控项的值的最大值,最小值,值的总和,或者平均值等,如果你想要了解它们,可以登录zabbix的官网查看在线手册,地址如下:

https://www.zabbix.com/documentation/3.0/manual/appendix/triggers/functions

而函数的参数格式变化则比较少,如果参数值前面带有"#"作为前缀,则表示次数,比如avg(#10),则表示最近10次监控项的值的平均值,如果参数值前面没有"#"作为前缀,则表示时间,比如sum(300),表示300秒内监控项的值的总和,max(#20)则表示最近20次监控项的值的最大值,min(600)则表示最近10分钟内监控项的值的最小值,但是需要注意,last(0)的含义与last(#1)的含义相同,都表示最近一次。有的函数还支持使用第二个参数,比如avg(1h,1d) ,表示一天前的一小时内的监控项的值的平均值,假设现在的时间是5点,avg(1h)可以理解为4点到5点之间的监控项的值的平均值,而avg(1h,1d) 中的1d表示时间偏移量,那么avg(1h,1d)可以理解为昨天4点到5点的监控项的值的平均值。

4、上图中的第四部分对应了上述语法中的<operator>,其实就是常用的比较操作符或者运算操作符,由于zabbix版本的不同,操作符可能有所变化,zabbix3.0支持的操作符可以参考在线手册,地址如下,如下地址中除了包含表达式支持的操作符,还有一些触发器表达式的实例,都是我们学习的好素材:

https://www.zabbix.com/documentation/3.0/manual/config/triggers/expression

5、上图中的第五部分对应了上述语法中的<constant>,用于设定监控项对应的阈值。

 

如果你看过上一篇文章,那么你一定知道,触发器的表达式是可以通过图形化界面中的配置,自动生成的,既然能够自动生成,我们还需要理解上述表达式的结构吗?虽然话是这样说,但是知其然,知其所以然,不是更好吗,嘿嘿嘿~~~。

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:10   其中:访客  7   博主  3

    • avatar echo 5

      加班加点的学 :mrgreen:

      • avatar 岁月无恒 1

        嗯,que shi hen niu bi

        • avatar 学习使我快乐 1

          受益良多,希望博主一直更新下去,

          • avatar yancy 1

            {*.last(#2)}>13被您解读为连续两次被监控到的值都大于13,这明显是不对的。
            #num这个参数表示最新的第N个值,如果最近6个值分别是1,2,3,4,5,6 ,那么#2就是5。希望版主早日更正不要耽误其他人了~

              • avatar 朱双印 Admin

                @yancy 是我理解错了,看了下手册,已经修改,感谢指正,谢谢~~

              • avatar m睡意zzz 2

                大佬,我在mail.rc里添加了smtp等。用命令行 echo “hi” |mail -s “hi” xxxxx@163.com 是能够发送到我的xxxxx@163.com邮箱的。
                但是服务器的触发器触发了条件,显示成功发送,但我没有收到

                这个触发器,我昨天用还是好用的,不知道今天晚上是什么毛病。

                  • avatar 朱双印 Admin

                    @m睡意zzz 也有可能不是触发器的问题,有时候可以使用命令发送邮件,但是使用脚本就不行。

                  • avatar 大兔子 1

                    是的