觸發器例子

例子 :node

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
觸發器說明:
hosthost名稱
system.cpu.load[all,avg1]:item值,一份內cpu平均負載值
last(0):最新值
>5:最新值大於5
如上所示,www.zabbix.com這個主機的監控項,最新的CPU負載值若是大於5,那麼表達式會返回true,這樣一來觸發器狀態就改變爲「problem」了express

 

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

 

觸發器名稱:/etc/passwd has been changed 使用函數 diff():
{host:vfs.file.cksum[/etc/passwd].diff(0)}>0 tcp

/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 spa

當前主機網卡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 regexp

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

相關文章
相關標籤/搜索