Trigger表達式:
Zabbix Trigger的表達式高度靈活,可以建立出非常複雜的測試條件,基本的觸發器表達式如下:
{<server>:<key>.<function>(parameter)}<operator><constant> constant 常數
例如:{10.10.10.202:net.tcp.service[http,,80].last()}=0
server:主機名稱;
key:主機上關聯的相應監控項的key;
function:評估采集到的資料是否存在合理範圍内時 所使用的函數;評估過程可以根據采集的資料、目前時間及其它因素進行
目前觸發器所支援的函數有avg、count、change(改變值大小)、date(時間)、dayofweek(星期幾)、delta、diff(不同之處)、iregexp(基于正規表達式比對)、last(最後一次采樣)、max、min、nodata(沒采集到資料)、now、sum等
patameter:函數參數;大多數數值函數可以接受秒數為其參數,而如果再參數使用之前使用“#” 作為字首,則表示為最近幾次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10) 則表示最近10次取值之和;此外,avg、count、last、min和max還支援使用第二個參數,用于完成時間限定,例如,max(1h,7d)将傳回一周之前一小時内的最大值
建立觸發器可用的各屬性說明
Name:觸發器名稱,可使用宏,如$1、$2....$9等
Expression:邏輯表達式,用于評估觸發器狀态
Multiple PROBLEM events generation:依賴于目前觸發器“Problem”狀态生成其他事件;
Description:目前觸發器的描述資訊;
URL:在screen的“Status of Trigger“中顯示的内容的連結;
Severity:目前觸發器的嚴重級别
Enabled:是否啟用目前觸發器
<a href="http://s2.51cto.com/wyfs02/M02/82/BF/wKiom1df0HXju3K7AAGxt0rh-qE261.png" target="_blank"></a>
Trigger運算符:
Trigger支援的運算符如下:
<a href="http://s2.51cto.com/wyfs02/M01/82/BE/wKioL1df0ebwVuQ4AAHDLLPqKdE020.png" target="_blank"></a>
觸發器的函數表達式
函數表達式也算是表達式中的一部分,不過内容比較多,這裡單獨拿出來總結 。
abschange
參數:忽略
支援類型:float,int,str,text,log
作用:傳回最近獲得的值與之前獲得值差的絕對值,對于字元串類型:0表示相等,1表示不同
avg
參數:秒或#num
支援類型:float,int
作用:傳回一段時間的平均值
舉例:
avg(5):最後5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一周前的一個小時内的平均值
如果僅有一個參數,表示指定時間的平均值,從現在開始算起,如果有第二個參數,表示漂移,從第二個參數前開始算時間,
#n表示最近n次的值
max
參數:秒或#num
支援值類型:float,int
描述:傳回指定時間間隔的最大值.時間間隔作為第一個參數可以是秒或收集值的數目(字首為#).從Zabbix1.8.2開始,函數支援第二個可選參數time_shift,可以檢視avg()函數擷取它的使用方法.
min
描述:傳回指定時間間隔的最小值.時間間隔作為第一個參數可以是秒或收集值的數目(字首為#).從Zabbix1.8.2開始,函數支援第二個可選參數time_shift,可以檢視avg()函數擷取它的使用方法.
sum
描述:傳回指定時間間隔中收集到的值的總和.時間間隔作為第一個參數支援秒或收集值的數目(以#開始).從Zabbix1.8.2開始,本函數支援time_shift作為第二個參數。可以檢視avg函數擷取它的用法
change
作用:傳回最近獲得值與之前獲得值的內插補點,對于字元串0表示相等,1表示不同
change(0)>n:忽略參數一般輸入0,表示最近得到的值與上一個值的內插補點大于n
count
作用:傳回指定時間間隔内數值的統計,
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: 内容比對
diff
參數:忽略
支援值類型:float,int,str,text,log
作用:傳回值為1表示最近的值與之前的值不同,0為其他情況
last
作用:最近的值,如果為秒,則忽略,#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()函數擷取它的使用方法
logeventid
參數:string
支援值類型:log
描述:檢查最近的日志條目的EventID是否比對正規表達式.參數為正規表達式,POSIX擴充樣式.當傳回值為0時表示不比對,1表示比對。該函數從Zabbix1.8.5起開始支援.
logseverity
描述:傳回最近日志條目的日志等級(logseverity).當傳回值為0時表示預設等級,N為具體對應等級(整數,常用于Windowseventlogs).Zabbix日志等級來源于Windowseventlog的Information列.
logsource
描述:檢查最近的日志條目是否比對參數的日志來源.當傳回值為0時表示不比對,1表示比對。通場用于Windowseventlogs監控.例如logsource["VMWareServer"]
prev
描述:傳回之前的值,類似于last(#2)
regexp
參數:第一個參數為string,第二個參數為秒或#num
支援值類型:str,log,text
描述:檢查最近的值是否比對正規表達式,參數的正規表達式為POSIX擴充樣式,第二個參數為秒數或收集值的數目,将會處理多個值.本函數區分大小寫。當傳回值為1時表示找到,0為其他.
str
描述:查找最近值中的字元串。第一個參數指定查找的字元串,大小寫敏感。第二個可選的參數指定秒數或收集值的數目,将會處理多個值。當傳回值為1時表示找到,0為其他.
strlen
描述:指定最近值的字元串長度(并非位元組),參數值類似于last函數.例如strlen(0)等價于strlen(#1),strlen(#3)表示最近的第三個值,strlen(0,86400)表示一天前的最近的值.該函數從Zabbix1.8.4起開始支援
time
支援值類型:any
描述:傳回目前時間,格式為HHMMSS,例如123055
date
支援類型:any
作用:傳回目前的時間,格式YYYYMMDD
dayofmonth
傳回目前是本月的第幾天
dayofweek
傳回目前是本周的第幾天
delta
支援類型:float,int
作用:傳回時間間隔内的最大值與最小值的內插補點
nodata
參數:秒
描述:當傳回值為1表示指定的間隔(間隔不應小于30秒)沒有接收到資料,0表示其他.
now
描述:傳回距離Epoch(1970年1月1日00:00:00UTC)時間的秒數
fuzzytime
作用:傳回值為1表示監控項值的時間戳與ZabbixServer的時間多N秒,0為其他.常使用system.localtime來檢查本地時間是否與Zabbixserver時間相同.
trigger表達式舉例:
{www.magedu.com:system.cpu.load[all,avg1].last(0)}>3
對于last函數來說,last(0)相當于last(#1)
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5
#系統負載大于5就報警
{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分鐘負載大于2的時候都會報警。
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0
#/etc/passwd檔案改變會報警
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K
#在最後5分鐘,網卡eth0的流量大于100K報警
{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0
#兩個節點上的smtp服務都當機才會報警,該表達式用了兩個主機
{zabbix.zabbix.com:icmpping.count(30m,0)}>5
#在最後30分鐘主機不能ping通的次數大于5就報警
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1789212,如需轉載請自行聯系原作者