觸發器使用邏輯表達式來評估經過item獲取的數據是處於哪一種狀態,php
觸發器中的表達式使用很靈活,咱們能夠建立一個複雜的邏輯測試監控,觸發器表達式形式以下:node
{<server>:<key>.<function>(<parameter>)}<operator><constant>
{主機:key.函數(參數)} <表達式> 常數 express
觸發器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()就是倒數第一個值。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
一小時內平均值超過昨天同一時刻的兩倍十觸發告警
簡單的說觸發器狀態轉變爲problem須要一個條件,從problem轉變回來還須要一個條件才行。通常觸發器只須要不知足觸發器爲problem條件便可恢復。
有時候觸發器須要使用不一樣的條件來表示不一樣的狀態,舉個官網頗有趣的例子:機房溫度正常穩定爲15-20°,當溫度超過20°,觸發器值爲problem,直到溫度低於15°纔會接觸警報,異常會解除。
在zabbix3.2及其以上版本配置觸發器時就能夠設置Problem expression和Recovery 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