第五章:zabbix探究告警觸發器Triggers


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

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM