轉載:https://www.cnblogs.com/leoyang63/articles/12965677.html
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> 持續性,選填
Zabbix支持的function
參考官網:https://www.zabbix.com/documentation/2.2/manual/appendix/triggers/functions
1.abschange 參數:忽略 支持類型:float,int,str,text,log 作用:返回最近獲得的值與之前獲得值差的絕對值,對於字符串類型:0表示相等,1表示不同
2.avg 參數:秒或#num 支持類型:float,int 作用:返回一段時間的平均值 舉例: avg(5):最后5秒的平均值 avg(#5):表示最近5次得到值的平均值 avg(3600,86400):表示一天前的一個小時的平均值 如果僅有一個參數,表示指定時間的平均值,從現在開始算起,如果有第二個參數,表示漂移,從第二個參數前開始算時間, #n表示最近n次的值
3.change 參數:忽略 支持類型:float,int,str,text,log 作用:返回最近獲得值與之前獲得值的差值,對於字符串0表示相等,1表示不同 舉例: change(0)>n:忽略參數一般輸入0,表示最近得到的值與上一個值的差值大於n
4.count 參數:秒或#num 支持類型:float,int,str,text,log 作用:返回指定時間間隔內數值的統計, 舉例: 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")-thenumberofvaluesforlast10minuteshaving'110'(inbinary)inthe3leastsignificantbits. count(600,,,86400)24小時之前的10分鍾數據值的個數 第一個參數:指定時間段 第二個參數:樣本數據 第三個參數:操作參數 第四個參數:漂移參數 #支持的操作類型 eq: 相等 ne: 不相等 gt: 大於 ge: 大於等於 lt: 小於 le: 小於等於 like: 內容匹配
5.date 參數:忽略 支持類型:any 作用:返回當前的時間,格式YYYYMMDD
6.dayofmonth 返回當前是本月的第幾天
7.dayofweek 返回當前是本周的第幾天
8.delta 參數:秒或#num 支持類型:float,int 作用:返回時間間隔內的最大值與最小值的差值
9.diff 參數:忽略 支持值類型:float,int,str,text,log 作用:返回值為1表示最近的值與之前的值不同,0為其他情況
10.fuzzytime 參數:秒 支持值類型:float,int 作用:返回值為1表示監控項值的時間戳與ZabbixServer的時間多N秒,0為其他.常使用system.localtime來檢查本地時間是否與Zabbixserver時間相同.
11.last 參數:秒或#num 支持值類型:float,int,str,text,log 作用:最近的值,如果為秒,則忽略,#num表示最近第N個值,請注意當前的#num和其他一些函數的#num的意思是不同的 last(0)等價於last(#1)last(#3)表示最近**第**3個值(並不是最近的三個值) 本函數也支持第二個參數**time_shift**,例如 last(0,86400)返回一天前的最近的值 如果在history中同一秒中有多個值存在,Zabbix不保證值的精確順序 #num從Zabbix1.6.2起開始支持,timeshift從1.8.2其開始支持,可以查詢avg()函數獲取它的使用方法
12.logeventid 參數:string 支持值類型:log 描述:檢查最近的日志條目的EventID是否匹配正則表達式.參數為正則表達式,POSIX擴展樣式.當返回值為0時表示不匹配,1表示匹配。該函數從Zabbix1.8.5起開始支持.
13.logseverity 參數:忽略 支持值類型:log 描述:返回最近日志條目的日志等級(logseverity).當返回值為0時表示默認等級,N為具體對應等級(整數,常用於Windowseventlogs).Zabbix日志等級來源於Windowseventlog的Information列.
14.logsource 參數:string 支持值類型:log 描述:檢查最近的日志條目是否匹配參數的日志來源.當返回值為0時表示不匹配,1表示匹配。通場用於Windowseventlogs監控.例如logsource["VMWareServer"]
14.max 參數:秒或#num 支持值類型:float,int 描述:返回指定時間間隔的最大值.時間間隔作為第一個參數可以是秒或收集值的數目(前綴為#).從Zabbix1.8.2開始,函數支持第二個可選參數time_shift,可以查看avg()函數獲取它的使用方法.
15.min 參數:秒或#num 支持值類型:float,int 描述:返回指定時間間隔的最小值.時間間隔作為第一個參數可以是秒或收集值的數目(前綴為#).從Zabbix1.8.2開始,函數支持第二個可選參數time_shift,可以查看avg()函數獲取它的使用方法.
16.nodata 參數:秒 支持值類型:any 描述:當返回值為1表示指定的間隔(間隔不應小於30秒)沒有接收到數據,0表示其他.
17.now 參數:忽略 支持值類型:any 描述:返回距離Epoch(1970年1月1日00:00:00UTC)時間的秒數
18.prev 參數:忽略 支持值類型:float,int,str,text,log 描述:返回之前的值,類似於last(#2)
19.regexp 參數:第一個參數為string,第二個參數為秒或#num 支持值類型:str,log,text 描述:檢查最近的值是否匹配正則表達式,參數的正則表達式為POSIX擴展樣式,第二個參數為秒數或收集值的數目,將會處理多個值.本函數區分大小寫。當返回值為1時表示找到,0為其他.
20.str 參數:第一個參數為string,第二個參數為秒或#num 支持值類型:str,log,text 描述:查找最近值中的字符串。第一個參數指定查找的字符串,大小寫敏感。第二個可選的參數指定秒數或收集值的數目,將會處理多個值。當返回值為1時表示找到,0為其他.
21.strlen 參數:秒或#num 支持值類型:str,log,text 描述:指定最近值的字符串長度(並非字節),參數值類似於last函數.例如strlen(0)等價於strlen(#1),strlen(#3)表示最近的第三個值,strlen(0,86400)表示一天前的最近的值.該函數從Zabbix1.8.4起開始支持
22.sum 參數:秒或#num 支持值類型:float,int 描述:返回指定時間間隔中收集到的值的總和.時間間隔作為第一個參數支持秒或收集值的數目(以#開始).從Zabbix1.8.2開始,本函數支持time_shift作為第二個參數。可以查看avg函數獲取它的用法
23.time 參數:忽略 支持值類型:any 描述:返回當前時間,格式為HHMMSS,例如123055
<parameter>參數
參考官網:https://www.zabbix.com/documentation/2.2/manual/config/triggers/suffixes
常用的時間參數有以下幾種:
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中的進行替換:
{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
對於Zabbix觸發器的邏輯語法,參考官網:https://www.zabbix.com/documentation/2.2/manual/config/triggers/expression
官網對於運算符的說明:
在表達式中#可以有更多的作用:
sum(600):表示在600秒之內接收到所有值的和
sum(#5):表示最后5個值的和
如果最近的獲取的5個值為3, 7, 2, 6, 5
last(#2) would return 7
last(#5) would return 5.
1、A parameter must be given even for those functions which ignore it. Example: last(0)
官網的這句話沒理解,大概意思是那些可以忽略參數的functions必須給指定偶數?
2、avg, count, last, min and max functions support an additional, second time_shift parameter. This parameter allows to reference data from a period of time in the past. For example, avg(1h,1d) will return the average value for an hour one day ago.
avg, count, last, min and max functions支持一個額外的,第二個time_shift參數。該參數允許是一個時間周期,將過去的數據作為參照。例如,avg(1h,1d) 將前一天同一個小時的平均值返回。
3、Triggers only evaluate history information. If history is not available (especially relevant for time shift), trend information is not used, thus history must be kept for at least the period trigger functions expect it.
官網實例的表達式舉例:
示例1:
觸發器名稱: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”了。
示例2:
觸發器名稱: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.
示例3:
觸發器名稱:/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一般都會自帶,沒帶的你自己加上吧。
示例4:
觸發器名稱: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
示例5:
觸發器名稱: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.
示例6:
觸發器名稱:Zabbix agent needs to be upgraded 使用函數str(): {zabbix.zabbix.com:agent.version.str("beta8")}=1
如果當前zabbix agent版本包含beta8(假設當前版本為1.0beta8),這個表達式會返回true.
示例7:
觸發器名稱:Server is unreachable {zabbix.zabbix.com:icmpping.count(30m,0)}>5
如上表達式表示最近30分鍾zabbix.zabbix.com這個主機超過5次不可到達。
示例8:
觸發器名稱: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”。
示例9:
觸發器名稱: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”
示例10:
觸發器名稱: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”
示例11:
觸發器名稱: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。(慢慢理解,這個表達式有點繞) 為了達到這個效果,我們需要使用如下觸發器表達式:
示例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 ({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) | ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}