當您建立警示規則時,如果需要配置複雜的警示條件,則需要通過警示規則運算式來實現。本文為您介紹警示規則運算式的基本元素、歷史函數和應用情境。
基本元素
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為userId
和instanceId
,監控指標CPUUtilization的執行個體ID的警示規則運算式為@CPUUtilization[60].$instanceId
。說明關於如何查詢某個雲產品的監控指標的成員,請參見Elastic Compute Service中的Dimensions和Statistics列。
運算
計算監控資料是否達到警示條件。
基本運算子
運算子分類
運算子及其說明
數學運算子
+
:加。-
:減。*
:乘。/
:除。%
:模數。**
:指數。
比較子
==
:等於。!=
:不等於。>
:大於。>=
:大於等於。<
:小於。<=
:小於等於。
邏輯運算子
&&
或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]
userld
是120886317861****
或20654616023382****
。"foo"in{'foo':1,'bar':2}
foo是
foo
或bar
。
not in
不包含。
userld not in [120886317861****,425876]
userld
不是120886317861****
和20654616023382****
。"foo"in{'foo1':1,'bar':2}
foo不是
foo1
和bar
。
三元運算
?:
:效果與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
布爾值。
true
或false
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平均值>50%且memory_usage平均值>80%時,觸發警示。 |
指標延遲上報警示 |
| 當心跳逾時大於1分鐘時,觸發警示。 說明 reportTime為監控指標的上報時間,是指標內建欄位。 |