舊版警示設定
Log Service支援根據儀錶盤中的統計圖表設定警示,實現即時的服務狀態監控。
警示的查詢區間和執行間隔
Log Service根據執行間隔定時執行您所配置的查詢和分析語句,並將查詢和分析結果作為警示條件的參數進行計算。如果計算結果為true,則警示觸發。
請勿將查詢和分析的時間範圍設定成與執行間隔一致的相對時間。原因如下(以執行間隔為1分鐘為例):
-
資料寫入Log Service到能夠被查詢到,這期間存在延時(一般少於3秒)。即使延時很低,也存在資料漏查的風險。例如警示執行時間為12:03:30,查詢和分析的時間範圍為相對一分鐘,即[12:02:30,12:03:30),對於12:03:29秒寫入的日誌,不能保證在12:03:30肯定能夠查詢到。
-
如果對警示準確性要求高(不重複警示、不漏報),將查詢和分析時間範圍中的起止時間都往前推移。例如警示執行時間為12:03:30,則查詢和分析的時間範圍為[12:02:20,12:03:20),通過設定10秒的緩衝時間來避免因為索引速度導致的漏查。
-
如果對警示的即時性要求高(第一時間收到警示,能夠容忍重複警示),查詢和分析時間範圍中的開始時間往前推移。例如警示執行時間為12:03:30,查詢和分析的時間範圍設定為[12:02:20,12:03:30)。
-
-
同一分鐘內包含不同時間的日誌時,由於日誌索引的構建,時間較遲的日誌的索引可能落盤到較早的時間點。例如警示執行時間為12:03:30,查詢範圍為相對一分鐘,即[12:02:30,12:03:30)。如果在12:02:50秒寫入日誌,這些日誌時間為12:02:20、12:02:50等,那麼這些日誌的索引可能落盤在12:02:20這個時間點,導致在[12:02:30,12:03:30)期間查詢不到日誌。
-
如果對警示的準確性要求高(不重複警示,不漏報),查詢和分析的時間範圍使用整點時間,例如整點1分鐘、整點5分鐘、整點1小時等,並且將執行間隔設定為一致的時間,例如1分鐘、5分鐘、1小時等。
-
如果對警示的即時性要求高(第一時間收到警示,能夠容忍重複警示),查詢和分析的時間範圍至少需要包含前一分鐘。例如警示執行時間為12:03:30,查詢和分析的時間範圍可以設定為相對90秒,那麼實際的查詢和分析的時間範圍為[12:02:00,12:03:30),同時設定執行間隔為1分鐘。
-
基於查詢結果警示
基於查詢結果設定警示時,只要查詢結果不為空白就認為滿足警示條件,即設定警示觸發條件為判斷任意欄位存在即可。
例如您希望當日誌中包含索引值對client_ip: 192.0.2.1就產生警示,則您可以按照如下配置建立警示。具體操作,請參見設定警示。假設client_ip欄位在每條日誌都存在且不為空白字串,則只要client_ip欄位不為空白就觸發警示。
在警示監控規則配置中,觸發條件設定為 client_ip !="",表示只要該欄位不為空白字串即觸發警示。
基於分析結果警示
基於分析結果設定警示是最常見的情境。例如您希望包含ERROR關鍵字的日誌條數達到閾值即觸發警示,則您可以按照如下配置建立警示。具體操作,請參見設定警示。
在警示監控規則彈窗中,設定規則名稱為網站警示,檢查頻率為固定間隔 15 分鐘,儀錶盤選擇建立並輸入test,圖表名稱為test,查詢語句為ERROR | select count(1) as errorCount,查詢區間為15分鐘(相對),觸發條件為errorCount > 0。
關聯多個圖表
當您基於儀錶盤建立警示時,Log Service支援同時對1~3個查詢和分析結果設定警示。
-
多個圖表之間的查詢區間相互獨立。
-
關聯多個圖表時,觸發條件中需要使用${編號}.{欄位}方式引用查詢和分析結果中的欄位。例如
$0.pv > 100000 && $1.uv < 1000,其中$0表示編號為0的圖表,$1表示編號為1的圖表。更多資訊,請參見如何查看圖表編號。 -
多個觸發條件之間使用2個and符號(&&)串連,例如
pv%100 > 0 && uv > 0。
-
對不同時間範圍的查詢和分析結果進行組合警示。
例如您希望15分鐘內的PV大於100000,一小時內的UV小於1000時觸發警示,則您可以按照如下配置建立警示。具體操作,請參見設定警示。例如,在關聯圖表中添加兩個圖表:編號0的圖表名稱為PV,查詢語句為
* | select count(*) as pv,查詢區間為15分鐘(相對);編號1的圖表名稱為UV,查詢語句為* | select count(distinct client_ip) as uv,查詢區間為1小時(相對)。設定頻率為固定間隔15分鐘,設定觸發條件為$0.pv>100000&&$1.uv<1000,即當PV超過100000且UV低於1000時觸發警示。觸發條件支援加減乘除模數運算子及大於、大於等於、小於、小於等於、等於、不等於比較子。 -
基於部分圖表警示,其他圖表的查詢結果作為輔助資訊。
例如,您希望基於記錄層級為ERROR的日誌條數觸發警示,與此同時,希望能夠在警示通知中看到實際的記錄層級為ERROR的日誌,則您可以按照如下配置建立警示。具體操作,請參見設定警示。
警示配置樣本:在關聯圖表中添加兩個圖表,編號0圖表名稱為UV,查詢語句為
level: ERROR | select count(1) as errorCount,查詢區間為1小時(相對);編號1圖表名稱為PV,查詢語句為level: ERROR,查詢區間為1小時(相對)。頻率選擇固定間隔,設定為15分鐘。觸發條件設定為errorCount > 10。在警示通知中只需要設定如下內容,即可看到實際記錄層級為ERROR的日誌。
${results[1].RawResultsAsKv}
警示抑制
當警示觸發時,可能會在一段時間內多次收到通知。為了防止因為資料抖動導致的誤判和重複警示,可以通過設定連續通知門檻或通知間隔來對警示進行抑制。 具體操作,請參見設定警示。
-
設定連續通知門檻。
只有在連續多次檢查中都滿足警示條件才會觸發警示。
例如警示執行間隔為1分鐘,觸發閾值為5,則表示在連續5次即5分鐘內每次警示檢查結果都滿足警示條件才會發送通知。只要有一次沒有滿足觸發條件,計數將重設。
-
設定通知間隔。
當警示設定的執行間隔較小時,為了防止頻繁收到通知,您可以設定兩次通知之間的最小間隔。例如警示執行間隔為1分鐘,通知間隔為30分鐘,即使30分鐘內有警示觸發,也不會收到任何通知。
使用模板變數豐富通知內容
您在配置通知方式時,可在發送內容和主題中,通過${fieldName}方式引用模板變數。Log Service發送警示通知時,會將發送內容和主題中的模板變數替換為真實值。例如${Project}替換為警示規則所屬的Project名稱。更多資訊,請參見舊版警示的模板變數。
-
對於頂層的變數如Project、AlertName、Dashboard,可以直接使用${fieldName}方式引用,不區分大小寫。
-
每次產生警示時,系統自動產生警示上下文資訊,儲存於Results欄位(數群組類型)中。數組中的每個元素對應警示關聯的一個圖表(對於大多數情境,可能只有一個元素)。更多資訊,請參見警示日誌欄位。Results中的欄位可以通過如下方式引用:
-
數群組類型的欄位通過${fieldName[{index}]}方式引用,其中{index}表示數組下標,從0開始。例如${results[0]}表示引用Results數組中的第1個元素。
-
物件類型的欄位通過${object.key}引用。例如${results[0].StartTimeTs}的結果為1542453580。
說明RawResults和FireResult內的欄位為查詢結果,區分大小寫,其他欄位均不區分大小寫。
{ "EndTime": "2006-01-02 15:04:05", "EndTimeTs": 1542507580, "FireResult": { "__time__": "1542453580", "field": "value1", "count": "100" }, "FireResultAsKv": "[field:value1,count:100]", "Truncated": false, "LogStore": "test-logstore", "Query": "* | SELECT field, count(1) group by field", "QueryUrl": "http://xxxx", "RawResultCount": 2, "RawResults": [ { "__time__": "1542453580", "field": "value1", "count": "100" }, { "__time__": "1542453580", "field": "value2", "count": "20" } ], "RawResultsAsKv": "[field:value1,count:100],[field:value2,count:20]", "StartTime": "2006-01-02 15:04:05", "StartTimeTs": 1542453580 } -