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