zabbix觸發器表達式

zabbix觸發器表達式

觸發器使用邏輯表達式來評估經過item獲取的數據是處於哪一種狀態,php

觸發器中的表達式使用很靈活,咱們能夠建立一個複雜的邏輯測試監控,觸發器表達式形式以下:node

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

{主機:key.函數(參數)} <表達式> 常數 express

Functions函數

觸發器functions完整連接:服務器

Function參數

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()就是倒數第一個值。app

AVG,count,last,min和max函數還支持額外的參數,以秒爲單位的參數time_shift(時間偏移量)。例如avg(1h,1d),那麼將會獲取到昨天的1小時內的平均數據。tcp

[warning]備註:觸發器表達式須要使用history歷史數據來計算,若是history不可用(time_shift時間偏移量參數沒法使用),所以history記錄必定要保留長久一點,至少要保留須要用的記錄。[/warning]
觸發器表達式能夠使用單位符號來替代大數字,例如5m替代300,或者1d替代86400,1k替代1024字節等等。函數

操做符

3.2及以上版本測試

PRIORITY OPERATOR DEFINITION Notes for unknown values
1 - Unary minus -Unknown → Unknown
2 not Logical NOT not Unknown → Unknown
3 ***** Multiplication 0 ***** Unknown → Unknown (yes, Unknown, not 0 - to not lose Unknown in arithmetic operations) 1.2 ***** Unknown → Unknown
/ Division Unknown / 0 → error Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown
4 + Arithmetical plus 1.2 + Unknown → Unknown
- Arithmetical minus 1.2 - Unknown → Unknown
5 < Less than. The operator is defined as: A<B ⇔ (A<B-0.000001) since Zabbix 3.4.9 A<B ⇔ (A≤B-0.000001) before Zabbix 3.4.9 1.2 < Unknown → Unknown
<= Less than or equal to. The operator is defined as: A<=B ⇔ (A≤B+0.000001) since Zabbix 3.4.9 A<=B ⇔ (A<B+0.000001) before Zabbix 3.4.9 Unknown <= Unknown → Unknown
> More than. The operator is defined as: A>B ⇔ (A>B+0.000001) since Zabbix 3.4.9 A>B ⇔ (A≥B+0.000001) before Zabbix 3.4.9
>= More than or equal to. The operator is defined as: A>=B ⇔ (A≥B-0.000001) since Zabbix 3.4.9 A>=B ⇔ (A>B-0.000001) before Zabbix 3.4.9
6 = Is equal. The operator is defined as: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) since Zabbix 3.4.9 A=B ⇔ (A>B-0.000001) and (A<B+0.000001) before Zabbix 3.4.9
<> Not equal. The operator is defined as: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) since Zabbix 3.4.9 A<>B ⇔ (A≤B-0.000001) or (A≥B+0.000001) before Zabbix 3.4.9
7 and Logical AND 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown
8 or Logical OR 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown

3.0及其如下版本spa

優先級 操做 定義
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 | 邏輯或

觸發器示例

示例一prototype

觸發器名稱: 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(o)     最新值
>5      大於5

如上所示,www.zabbix.com這個主機的監控項,最新的CPU負載值若是大於5,那麼表達式會返回true,這樣一來觸發器狀態就改變爲「problem」了。

示例二

觸發器名稱:www.zabbix.com is overloaded

表達式:

{www.zabbix.com:system.cpy.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].last(10m)}>2

當前cpu負載大於5或者最近10份內的cpu負載大於2,那麼表達式將會返回true。

示例三

觸發器名稱:/etc/passwd has been changed

表達式:

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

/etc/passwd最新的checksum與上一次獲取到的checksum不一樣,表達式將會返回true. 咱們能夠使用一樣的方法監控系統重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等

示例四

觸發器名稱:Someone is downloading a large file from the Internet

表達式:

{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

表達式:

{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

表達式:

{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

表達式:

{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

表達式:

{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

一小時內平均值超過昨天同一時刻的兩倍十觸發告警

Hysteresis(遲滯,滯後)

簡單的說觸發器狀態轉變爲problem須要一個條件,從problem轉變回來還須要一個條件才行。通常觸發器只須要不知足觸發器爲problem條件便可恢復。

有時候觸發器須要使用不一樣的條件來表示不一樣的狀態,舉個官網頗有趣的例子:機房溫度正常穩定爲15-20°,當溫度超過20°,觸發器值爲problem,直到溫度低於15°纔會接觸警報,異常會解除。

在zabbix3.2及其以上版本配置觸發器時就能夠設置Problem expressionRecovery expression

示例一

觸發器名稱:Temperature in server room is too high

表達式

({TRIGGER.VALUE}=0&{server:temp.last()}>20)|({TRIGGER.VALUE}=1&{server:temp.last()}>15)

如上有兩個小括號,前面一個表示觸發異常的條件,後面一個表達式的反面表示解除異常的條件。

示例二

觸發器名稱: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)

示例三

觸發器名稱:接口[{#PORT}]入口帶寬佔用率太高

表達式:

({TRIGGER.VALUE}=0 and {7750_ip_route:port_bandwidth_in_ratio[{#PORT}].last()}>75) or ({TRIGGER.VALUE}=1 and {7750_ip_route:port_bandwidth_in_ratio[{#PORT}].max(3600)}>60)

監控項原型以下:

名稱 鍵值 間隔 歷史記錄 趨勢 類型 應用集 狀態
[接口{#PORT}]入口帶寬佔用率 port_bandwidth_in_ratio[{#PORT}] 5m 7d 90d Service Robot採集器 ML_APPLICATION, 接口帶寬佔用率 已啓用

告警條件:入口帶寬佔用率(>75%)
恢復條件:一個小時入口帶寬佔用率(<60%)

參考:

http://www.ttlsa.com/zabbix/zabbix-trigger-expression/

https://www.zabbix.com/documentation/3.4/manual/config/triggers

相關文章
相關標籤/搜索