触发器例子

例子 :

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

原文地址:https://www.cnblogs.com/ZhengLiming/p/10314416.html

时间: 2024-10-15 14:29:28

触发器例子的相关文章

db2触发器例子

-- 建表语句 CREATE TABLE WANGZSTABLE ( ID INTEGER NOT NULL, NAME VARCHAR(20) NOT NULL, AGE VARCHAR(20) NOT NULL, STATUS VARCHAR(10), CREATETIME TIMESTAMP, UPDATETIME TIMESTAMP, SENDTIME TIMESTAMP ); select * from wangzsTable; insert into WANGZSTABLE(id,n

MySQL 触发器例子(两张表同步增加和删除)

其中old表示tab2(被动触发),new表示tab1(主动触发,外部应用程序在此表里执行insert语句) DROP TABLE IF EXISTS tab1; CREATE TABLE tab1( tab1_id varchar(11) ); DROP TABLE IF EXISTS tab2; CREATE TABLE tab2( tab2_id varchar(11) ); 创建触发器:t_afterinsert_on_tab1 作用:增加tab1表记录后自动将记录增加到tab2表中 d

一个Mysql触发器例子--状态改变的同时更新同表中的另一字段

#表(jc_shop_product )中有一状态值--是否上架(on_sale) 若由未上架(0)转为上架(1) 同时设置上架时间(on_sale_time) drop trigger if exists update_on_sale_time_of_product; delimiter //      CREATE TRIGGER update_on_sale_time_of_product BEFORE UPDATE ON jc_shop_product     FOR EACH ROW 

一个很好的触发器例子(case when)

CREATE OR REPLACE TRIGGER TR_CGD1 BEFORE UPDATE OR INSERT OR DELETE ON BB_MJ_CGD1_TB FOR EACH ROWDECLARE V_COUNT NUMBER;BEGIN CASE WHEN UPDATING OR INSERTING THEN IF :NEW.DJZT = '结束' THEN :NEW.DJZT := '结束'; ELSE SELECT COUNT(*) INTO V_COUNT FROM BB_M

碰撞器与触发器[Unity]

请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件: 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的

wex5 教程 之 图文讲解 智能数据库设计 之(1) 触发器

一:设计需求: 智能数据库设计,其实没有这个说法,只是由于我设计视频播族器的需要,对数据库的设计有一些智能化的需求. 目的有三个: 1.减少前台后端操作数据库代码量 2.数据库操作失败可以回滚.保证数据库的完整,正确. 3.充分利用数据库性能. 今天用到的是触发器 例子是我之前的一个设计要求,在戏曲管理后台把热门戏曲的id添加到热门表之后,戏曲表里相应的字段自动填充hot标记为1.以往的设计是在前台对表操作,今天用触发器的功能监控操作表自动填充字段.简单理解就是,用触发器监控一个表的变化,来修改

触发器与存储过程笔记

触发器:在数据库记录发生新增.修改.删除前后触发 如何:合同中,金额=单价*数量 利用触发器实现,先拿到提交数据中的单价和数量,获取数据库表中的金额字段,将数量*单价的结果刚入到金额字段,new\old前缀就能访问其数据.触发器处理完成,提交,数据被写入到数据库表中.(类似拦截器) 触发器编写步骤: create trigger 触发器名称 触发时机(before/after) 触发条件(insert/update/delete) on 数据库表/视图/用户模式/数据库(操作的数据库表.视图等)

Unity 碰撞检测中碰撞器与触发器的区别

要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器. 碰撞器:一

PL/SQL 编程(三 )程序包和包体,触发器,视图,索引

一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. 它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法. create or replace package stuinfo as type stucur is ref cursor; proce