全部產品
Search
文件中心

CloudMonitor:警示規則運算式說明

更新時間:Jun 19, 2024

當您建立警示規則時,如果需要配置複雜的警示條件,則需要通過警示規則運算式來實現。本文為您介紹警示規則運算式的基本元素、歷史函數和應用情境。

基本元素

CloudMonitor通過警示規則運算式對監控指標的彙總資料或監控指標的某個執行個體進行計算,當監控資料滿足該運算式時,觸發警示。警示規則運算式包括:監控指標、監控指標的成員、運算子、函數和監控資料,例如:@cpu_total[60].$instanceId != 'i-2ze3jvsy7620giru****' && @cpu_total[60].$Average > 60

  • 監控指標

    各雲產品的監控指標名稱,請參見雲產品監控項

    監控指標的警示規則運算式為@監控指標名稱[彙總周期],例如:Elastic Compute Service的監控指標為CPUUtilization,警示規則運算式為@CPUUtilization[60]

    說明
    • 關於如何查詢某個雲產品的監控指標的彙總周期,請參見Elastic Compute Service中的Min Periods列。

    • 監控指標名稱需要符合Regex[a-zA-Z][_a-zA-Z0-9]*,不符合該Regex的監控指標需要用@(監控指標名稱)[彙總周期]來代替,例如:@('vm.DiskIORead')[60]

    在警示規則運算式中,監控指標不能單獨出現,需要配合監控指標成員來確定具體的監控資料。

  • 監控指標成員

    監控指標成員確定監控指標的某個資料。監控指標成員需要以$開頭,在警示規則運算式中的訪問方式是@指標[彙總周期].$指標成員,例如:Elastic Compute Service的監控指標CPUUtilization的Statistics為Average、Minimum和Maximum,監控指標CPUUtilization的平均值的警示規則運算式為@CPUUtilization[60].$Average;Elastic Compute Service的監控指標CPUUtilization的Dimensions為userIdinstanceId,監控指標CPUUtilization的執行個體ID的警示規則運算式為@CPUUtilization[60].$instanceId

    說明

    關於如何查詢某個雲產品的監控指標的成員,請參見Elastic Compute Service中的DimensionsStatistics列。

  • 運算

    計算監控資料是否達到警示條件。

    • 基本運算子

      運算子分類

      運算子及其說明

      數學運算子

      • +:加。

      • -:減。

      • *:乘。

      • /:除。

      • %:模數。

      • **:指數。

      比較子

      • ==:等於。

      • !=:不等於。

      • >:大於。

      • >=:大於等於。

      • <:小於。

      • <=:小於等於。

      邏輯運算子

      • &&and:邏輯與。

      • ||or:邏輯或。

      • !not:邏輯非。

      樣本:$Average > 50 && $instanceId != 'i-not-exist'

      說明

      當數學運算子或比較子兩邊不是同一類型時,string類型轉為number類型,例如:'123' + 321 == 123 + '321' == 444

    • 字串操作

      字串操作

      說明

      樣本

      matches

      正則表達匹配。

      通過邏輯非和matches運算子來判斷一個字串是否匹配某個Regex。

      !("hello" matches "^fo.+")

      說明

      由於!的優先順序比matches高,因此必須使用括弧。

      contains

      包含字串。

      'abcdef' contains 'cde'

      startsWith

      字串指定首碼。

      'abcdef' startsWith 'abc'

      endsWith

      字串指定尾碼。

      'abcdef' endsWith 'def'

    • 成員關係運算子

      成員關係運算子

      說明

      樣本

      in

      包含。

      • userld in [120886317861****,425876]

        userld120886317861****20654616023382****

      • "foo"in{'foo':1,'bar':2}

        foo是foobar

      not in

      不包含。

      • userld not in [120886317861****,425876]

        userld不是120886317861****20654616023382****

      • "foo"in{'foo1':1,'bar':2}

        foo不是foo1bar

    • 三元運算

      ?::效果與C++和Java語言中的三元運算相同,例如:@CPUUtilization[60].$Average > 30? "ok": "lower"

  • 資料操作

    • 資料類型

      資料類型

      說明

      樣本

      string

      單引號或雙引號內的字串。

      "hello", 'hello'

      number

      數值。可以是整數或浮點數。

      說明

      當數值為整數時,可以使用數字分隔字元,便於維護和閱讀。

      • 103, 2.5, .5, 2e+6

      • 1_000_000

      array

      數組。

      [1, 2, 3]

      map或dict

      字典。

      {"foo":"bar"}

      bool

      布爾值。

      truefalse

      nil

      空值,即無資料。

      nil

    • 內建函數

      內建函數

      說明

      len(array|map|string)

      Array、Map或字串的長度。

      now()

      返回毫秒級的時間戳記(UTC)。

      abs(number)

      絕對值,返回浮點數。

      rand()

      返回一個介於[0, 1)的浮點數。

      rand(N)

      返回一個介於[0, N)的浮點數。

      toLower(string)

      字串轉小寫。

      toUpper(string)

      字串轉大寫。

    • 同比環比

      說明
      • 指標,例如:@cpu_total[60]

      • 彙總方式(字串),例如:'$Average'

      • 對比結果(布爾值),本周期大於上個周期為true,小於上個周期為false

      函數

      說明

      CompareLastPeriod(指標, 彙總方式, 對比結果)

      環比上個周期,例如:CompareLastPeriod(@cpu_total[60], '$Average', true)

      假設本周期cpu_total的平均值為20%,上周期cpu_total的平均值為15%,對比結果不同取值的計算方法如下:

      • 當為true時,該運算式的結果為(20-15)× 100÷20。

      • 當為false時,該運算式的結果為(15-20)× 100÷20。

      CompareLastHour(指標, 彙總方式, 對比結果)

      同比上個小時。

      CompareLastHour(@cpu_total[60], '$Average', true) > 10:表示當cpu_total的平均值同比上個小時上漲10%時,觸發警示。

      CompareYesterday(指標, 彙總方式, 對比結果)

      同比昨天。

      CompareYesterday(@cpu_total[60], '$Average', true) > 10:表示當cpu_total的平均值同比昨天上漲10%時,觸發警示。

      CompareLastWeek(指標, 彙總方式, 對比結果)

      同比上周。

      CompareLastWeek(@cpu_total[60], '$Average', true) > 10:表示當cpu_total的平均值同比上周上漲10%時,觸發警示。

      ComparePast(指標, 彙總方式, 對比結果, seconds)

      同比seconds之前的資料,該函數是同比和環比的完整形式。

      以上四個函數是該函數的簡化調用,例如:

      • CompareLastHour(@cpu_total[60], '$Average', true) 等價於ComparePast(@cpu_total[60], '$Average', true, 3600)

      • CompareYesterday(@cpu_total[60], '$Average', true) 等價於ComparePast(@cpu_total[60], '$Average', true, 24*60*60)

      • CompareLastWeek(@cpu_total[60], '$Average', true) 等價於ComparePast(@cpu_total[60], '$Average', true, 7*24*60*60)

    • 歷史函數

      函數

      說明

      LastPeriod(指標)

      取上個周期的資料,例如:LastPeriod(@cpu_total[60]).$Average > 75 表示cpu_total上個周期的平均值大於75%,觸發警示。

      LastHour(指標)

      取一小時之前的資料,例如:LastHour(@cpu_total[60]).$Average > 75表示cpu_total一小時之前的平均值大於75%,觸發警示。

      Yesterday(指標)

      取昨天相同時刻的資料,例如:Yesterday(@cpu_total[60]).$Average > 75表示cpu_total昨天相同時刻的平均值大於75%,觸發警示。

      LastWeek(指標)

      取上周相同時刻的資料,例如:LastWeek(@cpu_total[60]).$Average > 75表示cpu_total上周相同時刻的平均值大於75%,觸發警示。

      Past(指標, seconds)

      取seconds秒之前的資料,seconds應為指標彙總周期的整數倍,該函數是上述歷史函數的完整形式,例如:Past(@cpu_total[60], 3600) > 75等價於LastHour(@cpu_total[60]).$Average > 75

應用情境

警示規則運算式的應用情境及其說明如下表所示。

應用情境

警示規則運算式

說明

應用分組中某個特殊執行個體使用高優先順序的排他性閾值(多閾值)

@cpu_total[60].$Average > (@cpu_total[60].$instanceId == 'i-io8kfvcpp7x5****'? 80: 50)

僅執行個體為i-io8kfvcpp7x5****時,cpu_total的平均值大於80,才會觸發警示;其他執行個體的cpu_total的平均值大於50,就會觸發警示。

局部黑名單

@cpu_total[60].$instanceId != 'i-io8kfvcpp7x5****' && @cpu_total[60].$Average > 50

當執行個體為i-io8kfvcpp7x5****時,返回false,不會觸發警示;其他執行個體的cpu_total平均值大於50,就會觸發警示。

多指標組合

@cpu_total[60].$Average > 50 && @memory_usage[60].$Average > 80

當執行個體的cpu_total平均值>50%且memory_usage平均值>80%時,觸發警示。

指標延遲上報警示

now() - @heartbeat[60].$reportTime > 60_000

當心跳逾時大於1分鐘時,觸發警示。

說明

reportTime為監控指標的上報時間,是指標內建欄位。now()函數為系統內建函數,返回目前時間為毫秒級UTC時間戳記。