阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zabbix触发器表达式详解

213次阅读
没有评论

共计 4664 个字符,预计需要花费 12 分钟才能阅读完成。

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

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

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

Functions 函数: 触发器 functions 可以引用检索到的值,当前时间或者其他元素。触发器表达式支持的 function 完整列表请点击官网地址 supported functions

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:system.cpu.load[all,avg1].last(0)}>5

触发器说明:

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

{www.zabbix.com: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():

{www.zabbix.com: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:

{www.zabbix.com: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,直到温度低于 15°才会接触警报,异常会解除。别整这些没用的,我们看实例.

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

示例 1 — 触发器名称: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}将会返回当前触发器的值

示例 2 — 触发器名称:Free disk space is too low

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

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

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

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |
({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

结尾

这篇文章很有必要细细读,很重要。

一些 Zabbix 相关教程集合

Ubuntu 14.04 下 Zabbix2.4.5 源码编译安装  http://www.linuxidc.com/Linux/2015-05/117657.htm

CentOS 7 LNMP 环境搭建 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140134.htm

Ubuntu 16.04 安装部署监控系统 Zabbix2.4  http://www.linuxidc.com/Linux/2017-03/141436.htm

Zabbix 监控安装部署及警报配置  http://www.linuxidc.com/Linux/2017-03/141611.htm

Ubuntu 16.04 下安装部署 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140395.htm

CentOS 6.3 下 Zabbix 监控 apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 7 下 Zabbix 3.0 安装详解 http://www.linuxidc.com/Linux/2017-03/141716.htm

64 位 CentOS 6.2 下安装 Zabbix 2.0.6   http://www.linuxidc.com/Linux/2014-11/109541.htm

ZABBIX 的详细介绍:请点这里
ZABBIX 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141921.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4664字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中