警示監控規則根據評估運算式的執行結果來判斷是否滿足觸發警示條件,以及評估動態警示嚴重度。本文介紹評估運算式的使用方法。
概覽
您查詢語句的執行結果將作為輸入,集合操作結果的欄位作為變數,當評估運算式條件為真,則觸發警示。
限制說明
警示監控規則的評估運算式相關限制說明如下所示:
負數使用括弧包裹,例如
x+(-100)<100
。數實值型別都被轉換為64位浮點數,如果使用比較操作(例如等於)可能存在誤差。
變數名只能包含字母和數字,且必須以字母開頭。
評估運算式長度為1~128個字元。
僅當評估運算式的值為true且滿足連續觸發閾值時,才會觸發警示。例如評估運算式為
100+100
,計算結果為200,由於其結果是數字不是true,故不會觸發警示。true、false、貨幣符號($)和半形句號(.)是評估運算式的保留詞,不能作為變數使用。
基礎文法
警示監控規則的評估運算式支援如下文法類型。
欄位名稱為結果集中的欄位名稱,建議使用英文字串,不推薦使用純數字、特殊符號(例如%)。如果欄位名稱為純數字或者含有特殊符號,需使用英文中括弧包裹。例如:
[5xx比例(%)] > 20
[404] > 20
文法類型 | 運算子 | 運算方式 | 樣本 | ||
變數與變數運算 | 非String常量與變數運算 | String常量與變數運算 | |||
基礎運算子 | 四則運算,支援加減乘除、模數(+-*/%) | 左右值轉Number後運算。 | 左右值轉Number後運算。 | 不支援。 |
|
比較子 | 比較運算: 大於(>)、大於等於(>=)、小於(<)、小於等於(<=)、等於(==)、不等於(!=) | 按照以下優先順序確定運算順序:
| 左右值轉Number後運算。 | 左右值按String類型運算(字典序)。 |
|
正則是否匹配: 正則匹配 (=~)、 正則不匹配(!~) 說明
| 左右值按String類型運算。 | 不支援。 | 左右值按String類型運算。 | 正則匹配: | |
邏輯操作符 | 邏輯運算: 與(&&)、或(||) | 左右值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 | 左右值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 | 左右值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 |
|
取反首碼操作 | 取反首碼(!) | 被取反的值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 不支援對集合操作結果的欄位直接使用該運算子。 | 被取反的值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 不支援對集合操作結果的欄位直接使用該運算子。 | 被取反的值必須為子運算式,且運算結果為布爾值。例如,評估運算式為 不支援對集合操作結果的欄位直接使用該運算子。 |
|
contains函數 | 字串尋找(contains) | 左右值轉String類型後進行運算。 | 不支援。 | 左右值按String類型運算。 |
|
括弧 | 括弧() | 決定運算結合順序與優先順序。 | 決定運算結合順序與優先順序。 | 決定運算結合順序與優先順序。 |
|
對集合操作結果進行評估
Log Service支援3個集合關聯監控以及評估集合操作結果。
集合操作結果
查詢語句的執行結果作為輸入,集合操作結果的欄位作為變數,進行警示評估。有關集合操作更多資訊,請參見關聯多個查詢分析結果,如下對集合操作結果進行說明。
評估查詢和分析結果是針對集合操作(例如笛卡爾積、左串連等)後的最終集合結果進行評估。
如果多個查詢和分析結果中不含重複欄位,則在評估運算式中引用欄位時,可以不加$0、$1、$2等首碼。例如
name == 'sls'
。如果多個查詢和分析結果中包含重複欄位,則在評估運算式中引用欄位時,必須加$0、$1、$2等首碼。例如
$0.name == 'sls' || $1.name == 'ecs'
。
類別 | 子類 | 說明 |
日誌 | 無SELECT語句 | 僅使用查詢語句進行查詢操作。 設定觸發條件運算式時可引用查詢結果中的欄位。 |
使用SELECT * FROM log | 設定觸發條件運算式時可引用所有已開啟統計功能的欄位。 | |
使用SELECT子查詢(包含SELECT * FROM (SELECT...)) | 設定觸發條件運算式時可引用SELECT子查詢中的欄位。 | |
時序資料 | 使用SELECT promql(...) | 通過promql_query(string)、promql_query_range(string, string)函數返回固定欄位metric、labels、time和value。其中Log Service會將labels欄位按照Map格式展開。 設定觸發條件運算式時可引用metric、labels、time、value欄位以及labels欄位中的子欄位。 |
使用SELECT a, b FROM (SELECT promql(...)) | 設定觸發條件運算式時可引用所有已開啟統計功能的欄位。 | |
使用SELECT * FROM log | 設定觸發條件運算式時可引用所有已開啟統計功能的欄位。 | |
資源資料 | 無 | 資源資料中的欄位只支援簡單類型(例如字串,浮點數,數字),不支援複雜類型(例如JSON)。 設定觸發條件運算式時可引用資源資料中的欄位ID。 |
配置觸發條件
警示監控規則在評估集合操作結果時,如果集合操作結果滿足觸發條件,則表示評估通過,產生一條警示。觸發條件包括如下選項:
有資料:對集合操作結果中的資料條數進行判斷,只要有1條資料,就滿足觸發條件。
有特定條資料:對集合操作結果中的資料條數進行判斷,支援的運算子包括大於、小於、等於等。當資料條數滿足特定條資料時,滿足觸發條件。例如集合操作結果中有4條資料,觸發條件為有特定條資料>10條,則表示集合操作結果未滿足觸發條件,不會產生警示。
有資料匹配:對集合操作結果中的資料內容進行判斷,只要有1條資料的內容匹配評估運算式,就滿足觸發條件。例如集合操作結果為1條資料(pv=900),觸發條件為有資料匹配,pv > 1000,則表示集合操作結果未滿足觸發條件,不會產生警示。
有特定條資料匹配:對集合操作結果中的資料條數和資料內容進行判斷。當有特定條資料的內容匹配評估運算式時,才會觸發警示。例如集合操作結果中有4條資料(pv=900、pv=1100、pv=1200、pv=1001),觸發條件為有特定條資料>3條,pv > 1000,則表示集合操作結果滿足觸發條件,產生警示。
樣本
樣本1
如果15分鐘(相對)內請求成功率低於90%且平均回應時間高於60s則產生警示。配置如下:
查詢統計:
s0:計算請求的成功比率(success_ratio)。查詢分析語句為
* | select round(sum(if(status < 300, 1, 0)) * 100.0 / count(1) , 2) as success_ratio
s1:計算每分鐘的平均請求回應時間。查詢分析語句為
* | select date_format(date_trunc('minute',__time__), '%m-%d %H:%i') as t,avg(request_time) as "平均回應時間(s)" group by t order by t asc limit 2000
觸發條件:警示評估運算式配置為$0.success_ratio < 90 && $1.平均回應時間\(s\) > 60
樣本2
如果15分鐘內狀態代碼500出現10次則產生警示。配置如下:
查詢統計:統計每種狀態代碼出現次數。查詢分析語句為* | select status, COUNT(*) as total group by status
觸發條件:警示評估運算式配置為status == 500 && total > 10