Triggers函數的分類
功能 | 函數 |
值的比較與查找 | abschange、delta、diff、band、change、nodata、last、prev |
值的計算 | max、min、avg、sum、count |
時間 | now、time、date、dayofmonth、dayofwek、fuzzytime |
日志 | logeventid、logseverity、logsource |
字符串匹配 | iregexp、regexp、str、strlen |
趨勢預測 | percentile、forecast、timeleft |
Trigger函數----比較 與查找
求最近兩值差的絕對值----abschange
- 函數功能
返回最近兩值差的絕對值,即最近獲取到的值與前一個值的差的絕對值,數學表達式為|last_value - prev_value|。如果值為字符串類型,則其絕對值返回0或1,其中0表示值相等,1表示值不等。該函數常用於在一個范圍波動的場合。
- 函數參數
不支持任何參數的傳入 - 支持數據類型
支持float、int、str、text
求最大值與最小值的差----delta
- 函數功能
在指定的一段時間內,或者指定數據個數,用其中的最大值減去最小值得出的差(max-min),數學表達式為max{v1,v2,...vn}-min{v1,v2...vn},其中v1,v2,....vn為時間T內的數值。該函數適用於最大值和最小值比較的場合,如系統的最高負載和最低負載的差值。
- 函數用法
delta(sec|#num,<time_shift>)>N #最大值與最小值的差值大於N
delta(sec|#num,<time_shift>)<N #最大值與最小值的差值小於N
delta(sec|#num,<time_shift>)=N #最大值與最小值的差值等於N
delta(sec|#num,<time_shift>)<>N #最大值與最小值的差值不等於N
delta(10m,1d)>10 # 表示1天前的10分鍾數據的最大值與最小值的差大於10
delta(#5,1d)>10 # 表示1天前的連續5個數據的最大值與最小值的差大於10
delta(10m)>10 # 表示最近10分鍾內的數據的最大值與最小值的差大於10
delta(#5)>10 # 表示最近連續5個數值的最大值與最小值的差大於10
- 函數參數
第一個參數為秒或#num
第二個參數為某個時間段前(time_shift)
- 數據類型
支持float和int數據類型
判斷最近兩值是否相同----diff
- 函數功能
比較最近數據的值和前一個數據的值,如果兩值相同,函數運行結果則為0,不同則為1.通過比較最近兩次的數值是否相同,從而判斷出運行狀態,如檢測主機名,系統版本是否發生變化等。
- 函數用法
diff()=0 #最近兩值相同
diff()=1 #最近倆值不同
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
求最近兩值的變化量----change
- 函數功能
返回最近數據值與前一次數據值的差,顧其運算結果的值可以是正數(>0),也可以是負數(<0)。當數據類型為字符串是,如果最近兩值相等,則結果為0,如果不相等,則結果為1.比如系統啟動時間小於上一次,則說明系統已經發生重啟。
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型。
數據失聯----nodata
- 函數功能
檢測一段時間內是否接收到數據,返回值為1表示沒有接收到數據,返回值為0表示接收到數據了。
- 函數參數
只支持一個時間參數,如30S、5m、1h,時間參數必須大於或等於30S,這是因為歷史數據同步進程(History Syncer Process)是每隔30S執行一次這個函數的。
- 數據類型
支持float、int、str、text和log數據類型。
獲取最新數據----last
- 函數功能
獲取最近一段時間內或指定個數的數據,如求最近系統的允許進程數量。
- 函數用法
last(sec|#num,<time_shift>)
last(3m)=N #最近3分鍾監控數值等於N
last(#3)>N # 第3次的監控數值大於N
last(#3,3m)<N #最近3分鍾第3次的監控數值小於N
注意:#num表示最近的第N個值,與其他函數#num的意思是不同的
- 數據類型
支持float、int、str、text和log數據類型
求前一個值----prev
- 函數功能
求前一個數據的值,等同於last(#2)
- 函數用法
prev()=N #前一個值等於N
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
Trigger函數----計算
求最大值----max
- 函數功能
在指定的一段時間內,或者指定數據個數,找出最大值,數學表達式為max{v1,v2,....vn},其中Vn為時間T內的數值。判斷取值是否都為0,如3次取值的最大值都為0。
- 函數用法
max(sec|#num,<time_shift>)
max(5m)>N #最近5分鍾內取值的最大值
max(#3)=N #最近3次取值的最大值
max(#3,10m)<>N #10分鍾前3次取值的最大值
max(10m,1d)<>N #1天之前10分鍾內取值的最大值
- 函數參數
第一個參數為秒或#num(監控指標數值的個數)
第二個參數為某個時間段前
- 數據類型
支持float和int數據類型
求最小值----min
- 函數功能
在指定的一段時間內,或者指定數據個數,找出最小值,數學表達式為min{v1,v2..vn},其中v1,v2...vn為時間T內的數值。判斷取值是否都為0。
- 函數用法
min(sec|#num,<time_shift>)
min(5m)>N #最近5分鍾內取值的最小值
min(#3)=N #最近3次取值的最小值
min(#3,10m)<>N #10分鍾前3次取值的最小值
min(10m,1d)<>N #1天之前10分鍾內取值的最小值
- 函數參數
第一個參數為秒或#num(監控指標數值的個數)
第二個參數為某個時間段前
- 數據類型
支持float和int數據類型
求平均值----avg
- 函數功能
在指定的一段時間內,或者指定數據個數,求平均值,數學表達式為avg{v1,v2...vn},其中v1,v2...vn為時間T內的數值。判斷取值是否都為0,如3次取值的平均值為0。
- 函數用法
avg(sec|#num,<time_shift>)
avg(5m)>N #最近5分鍾內取值的平均值
avg(#3)=N #最近3次取值的平均值
avg(#3,10m)<>N #10分鍾前3次取值的最平均值
avg(10m,1d)<>N #1天之前10分鍾內取值的平均值
- 函數參數
第一個參數為秒或#num(監控指標數值的個數)
第二個參數為某個時間段前
- 數據類型
支持float和int數據類型
值求和----sum
- 函數功能
在指定的一段時間內,或者指定數據個數,求所有值的和,數學表達式為sum{v1,v2...vn},其中v1,v2...vn為時間T內的數值。
- 函數用法
sum(sec|#num,<time_shift>)
sum(5m)>N #最近5分鍾內取值的所有數據相加求和
sum(#3)=N #最近3次取值的所有數據相加求和
sum(#3,10m)<>N #10分鍾前3次取值的所有數據相加求和
sum(10m,1d)<>N #1天之前10分鍾內取值的所有數據相加求和
- 函數參數
第一個參數為秒或#num(監控指標數值的個數)
第二個參數為某個時間段前
- 數據類型
支持float和int數據類型
統計個數----count
- 函數功能
在指定的一段時間內,或者指定數據個數,統計數值個數,數學表達式為count{v1,v2....Vn},其中v1,v2....Vn為時間T內的數值
- 函數用法
count(sec|#num,<pattern>,<operator>,<time_shift>)
count(10m) #最近10分鍾內數值的個數
count(600,12) #最近10分鍾內數值等於12的個數
count(10m,"error",eq) #最近10分鍾內等於“error”的值的數量
count(10m,12,gt) #最近10分鍾內超過12的值的數量
count(#10,12,gt) #最近10個值超過12的值數量
count(10m,12,gt,1d) #1天前10的最近10分鍾內超過12的值的數量
count(10m,6/7,band) #最近10分鍾的值數,其中3個最低有效位為‘110’(二進制)
count(10m,,,1d) #1天前的最近10分鍾的值的數量
- 函數參數
eq:相等
ne:不相等
gt:大於
ge:大於或等於
lt:小於
le:小於或等於
like:內容匹配
band:位與運算
regexp:正則表達式匹配
iregexp:忽略大小寫的正則表達式匹配
運算符支持的數據類型如下:
eq(默認)、ne、gt、ge、lt、le、band、regexp、iregexp支持整數
eq(默認)、ne、gt、ge、lt、le、regexp、iregexp支持浮點數
like(默認)、eq、ne、regexp、iregexp支持字符串、文本、日志
- 數據類型
支持float、int、str、text和log數據類型
Trigger函數----時間
返回當前時間(年月日時分秒) ----now
- 函數功能
返回當前時間,距離Epoch(1970年1月1日 00:00:00UTC)時間的秒數。
- 函數用法
now()=1535877351 # 當前時間的時間戳等於1535877351
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
返回當前日期(年月日)----date
- 函數功能
返回當前日期(格式為YYYYMMDD),例如20190102.
- 函數用法
date()=20190102 # 當前日期等於20190102
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
返回當前時間(時分秒)----time
- 函數功能
返回當前時間,格式為HHMMSS,例如123055
- 函數用法
time()=123055 #當前時間等於12:30:55
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
本月第幾天-----dayofmonth
- 函數功能
返回當前時間是本月第幾天(數值范圍為1~31)
- 函數用法
dayofmoth()-30 # 當前時間等於當月第30
- 函數參數
不支持任何參數的傳入
- 數據類型
支持float、int、str、text和log數據類型
本周第幾天----dayofweek
- 函數功能
返回當前時間是本周第幾天(數值范圍為1~7),星期一是1,星期天是7。
- 函數用法
dayofweek()=3 # 當前時間等於周三
- 函數參數
不支持任何參數的傳入
- 數據類型
所有數據類型
時間對比----fuzzytime
- 函數功能
將zabbix-agent的時間戳與zabbix-server的時間戳進行比較,如果差異超過指定的時間段,則函數返回值為0;如果時間戳小於間隔值,則函數返回值為1.
通常使用system.localtime來檢查zabbix-agent端的時間與zabbix-server端的時間是否存在差異。
- 函數用法
fuzzytime(sec)
fuzzytime(5m)=0 #監控項的時間與zabbix-server的時間相差大於5分鍾
- 函數參數
支持一個參數,即時間,如fuzzytime(5m)
- 數據類型
支持float和int數據類型
Trigger函數----日志
日志ID----logeventid
- 函數功能
檢查最近的日志條目的event id是否與正則表達式匹配。參數為正則表達式,POSIX擴展樣式。當返回值為0時,表示不匹配,當返回值為1時,表示匹配。
- 函數用法
logeventid(pattern)
- 函數參數
支持一個參數,可以使用正則表達式
- 數據類型
僅支持log數據類型
獲取日志等級----logseverity
- 函數功能
返回最近的日志條目的日志等級N(log serverity)。當返回值為0時,表示默認等級,N為具體對應的等級(整數)。通常用於Windows event logs監控。Zabbix日志等級來源於Windows event logs的Information列。
- 函數功能
logseverity()=0 #日志等級為0
- 函數參數
不支持任何參數的傳入
- 數據類型
僅支持log數據類型
獲取日志來源----logsource
- 函數功能
檢查最近的日志數據來源是否與正則表達式匹配。當返回值為0時,表示不匹配;當返回值為1時,表示匹配。通常用於windows event logs監控,例如logsource["VMWare Server"]
- 函數用法
logsource(pattern)
logsource("web") = 0 # 未匹配到web日志源
- 函數參數
支持一個參數,可以使用正則表達式
- 數據類型
僅支持log數據類型
Trigger函數----字符串匹配
正則表達式不區分大小寫----iregexp
- 函數功能
從值中查找與正則表達式匹配的數值,不區分大小寫。當正則表達式匹配數值時,結果為1,當正則表達式不匹配數值時,結果為0。通常用於從字符串中正則匹配數據,如從日志中匹配報錯、異常、關鍵字等。
- 函數用法
iregexp(pattern,<sec|#num>)
iregexp(green) <>1 # 未檢測到green字符串
- 函數參數
第一個參數為匹配的字符串
第二個參數為秒或#num(監控指標數值的個數)
- 數據類型
支持str、log和text數據類型
正則表達式區分大小寫----regexp
- 函數功能
從值中查找與正則表達式匹配的數值,區分大小寫。當正則表達式匹配數值時,結果為1,當正則表達式不匹配數值時,結果為0。通常用於從字符串中正則匹配數據,如從日志中匹配報錯、異常、關鍵字等。
- 函數用法
regexp(pattern,<sec|#num>)
regexp(ON,#3) <>1 # 3次結果都未檢測到ON字符串
- 函數參數
第一個參數為匹配的字符串
第二個參數為秒或#num(監控指標數值的個數)
- 數據類型
支持str、log和text數據類型
字符串匹配-----str
- 函數功能
從值中查找字符串,區分大小寫。當從數值中找到匹配值時,結果為1;如果未找到匹配的值,則結果為0。該函數在日志、文本、字符等場景中使用,可以通過此函數來判斷版本、角色等信息。
- 函數用法
str(pattern,<sec|#num>)
- 函數參數
第一個參數匹配的字符串,大小寫敏感
第二個參數為秒或#num(監控指標數值的個數)
- 支持str、log和text數據類型
字符串長度----strlen
- 函數功能
判斷字符串長度與預期是否相同,比如獲取md5值,應該是32位的,如果不是32位的,則說明該數據與預期不匹配。
- 函數用法
strlen(sec|#num,<time_shift>)
- 數據類型
支持str、log和text數據類型
Trigger函數----趨勢預測
百分線----percentile
- 函數功能
在指定的一段時間內,取出百分線值數。比如網絡帶寬流量,在某段時間內會有毛刺,去掉最高的幾個值,計算出次高的值。
- 函數用法
percentile(sec|#num,<time_shift>,percentage)
- 數據類型
支持float和int數據類型
趨勢預測----forecast
- 函數功能
預測監控指標未來的最大值、最小值、增量值或平均值,用於評估從現在開始到未來一段時間的數值變化情況。
- 函數用法
forecast(sec|#num,<time_shift>,time,<fit>,<mode>)
forecast(10m,,1h,linear,value)
- 函數參數
第一個參數為秒或#num(監控指標數值的個數),以最新采集到的數據為依據,以HASH標記開開頭;
第二個參數為某個時間段前(time_shift),如1h之前的時間
第三個參數為時間(time),以秒為單位,即從現在往后的時間。如果是之前的歷史數據,則為負數,如-20m表示20分鍾之前的數據
第四個參數為可選的歷史數據計算函數(fit),其支持的參數如下:
linear:線性函數
polynomialN:N次多項式(1<=N<=6)
exponential: 指數函數
logarithmic:對數函數
power:乘方(冪)函數
第五個參數為值的處理模式(mode).其中支持的參數如下
value:值(默認)
max:最大值
min:最小值
delta:最大值-最小值
avg:平均值
- 數據類型
支持float和int數據類型
剩余時間----timeleft
- 函數功能
監控指標達到設定的閾值所需要的時間(以秒為單位)
- 函數用法
timeleft(sec|#num,<time_shift>,threshold,<fit>)
- 函數參數
第一個參數為秒或#num(監控指標數值的個數),以最新采集到的數據為依據,以HASH標記開頭
第二個參數為某個時間段前(time_shift)
第三個參數為閾值(threshold),即所定義的趨勢閾值
第四個參數為可選的歷史數據計算函數(fit),請參考forecast參數
- 數據類型
支持float和int數據類型
參考資料:
zabbix官方文檔鏈接;https://www.zabbix.com/documentation/4.0/manual/appendix/triggers/functions
https://zabbix.org/mw/images/1/18/Prediction_docs.pdf