第五章: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