日志服務支持聯合監控與無數據告警,本文將指導如何配置。
監控時效性說明
告警監控原理:基于告警的查詢時間范圍,根據檢查頻率定時執行配置的查詢語句,并將查詢結果作為告警條件的參數進行計算,如果計算結果為true,則觸發告警。
監控時效性問題分析
數據索引延遲:數據從寫入日志服務到被查詢之間存在延時,即便延時很低,也存在數據漏查的風險。
例如:告警執行時間為12:03:30,查詢范圍為相對一分鐘時,檢查頻率為固定間隔1分鐘。則查詢時間范圍為[12:02:30,12:03:30),對于12:03:29秒寫入的日志,無法保證在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)查詢不到日志。
時效性優化建議:
追求準確性:如果您對告警的準確性要求高(不重復報警,不漏報)。
數據索引延遲問題:建議在查詢統計時,查詢區間的相對起始時間和相對結束時間設置早一點,如70秒前~10s前(相對),通過設置10秒的緩沖時間來避免因為索引速度過低導致漏查。
查詢不準確的問題:建議在查詢統計時,查詢區間選擇整點時間,如整點1分鐘、整點5分鐘和整點1小時等,并且將檢查頻率設置成一樣的時間,如1分鐘、5分鐘和1小時等。
追求實時性:如果對告警的實時性要求高(第一時間收到告警,能夠容忍重復報警)。
數據索引延遲問題:建議在查詢統計時,查詢區間的相對起始時間往前推移,如70秒(相對)。
查詢不準確的問題:建議在查詢統計時,查詢區間至少需要包含前一分鐘,如90秒(相對),同時設置檢查頻率為1分鐘。
關聯多個查詢分析結果
集合概念
日志服務告警監控系統將一個查詢和分析結果當做一個集合,并支持多個集合關聯監控,如下圖配置。
日志服務最多支持3個集合關聯監控。
默認只選取查詢和統計結果中的前1000條數據用于集合操作。當存在三個查詢和分析操作且集合操作不存在不合并選項時,只選取查詢和統計結果中的前100條數據。
當存在三個集合時,先對前兩個集合進行操作,該操作結果再與第三個集合進行集合操作。例如:
集合A左聯集合B左聯集合C:集合A和集合B先完成左聯操作,該結果再左聯集合C。
集合A拼接集合B內聯集合C:集合A和集合B完成拼接操作,該結果再內聯集合C。
集合A左斥集合B不合并集合C:集合A和集合B完成左斥操作,忽略集合C。
集合操作支持9種類型配置,具體說明如下。
集合操作 | 圖示 | 說明 |
不合并 | 兩個集合之間無關聯。 集合A為查詢和分析結果,集合B僅在告警信息中作為內容模板的變量被引用。 | |
笛卡爾積 | 無 | 集合A與集合B任意數據互相交叉組合,一般用于過濾評估。 |
拼接 | 集合B中的數據添加到集合A中,根據字段對齊。 | |
內聯 | 集合A中僅保留在集合B中存在的數據,即集合B是集合A的白名單。 | |
左聯 | 在集合A中補充部分來自集合B的信息,即集合B是A的維表。 | |
右聯 | 在集合B中補充部分來自集合A的信息,即集合A是集合B的維表。 | |
全聯 | 集合A和集合B互相補充信息。 | |
左斥 | 在集合A中刪除集合B中存在的數據,即集合B是集合A的黑名單。 | |
右斥 | 在集合B中刪除集合A中存在的數據,即集合A是集合B的黑名單。 |
操作示例
不合并
需求
監控Nginx訪問日志,每15分鐘的5xx錯誤超過500次則觸發告警,并且在告警內容中列出具體的出錯的主機信息。
配置
結果
查詢統計0的結果
統計15分鐘內發生5xx錯誤的次數。
cnt
1234
查詢統計1的結果
統計15分鐘內發生5xx錯誤最多的Top5主機及對應的錯誤次數。
host
pv
host1
60
host2
55
host3
47
host4
45
host5
30
集合操作結果
當選擇集合操作為不合并時,集合操作結果為查詢統計0的結果。
拼接
示例1
需求
北京和上海地域分別有2個用于存儲Nginx訪問日志的Logstore,每15分鐘統計一次5xx錯誤超過30次的主機數,兩個Logstore中符合條件的主機數超過10個時,觸發告警。
配置
結果
查詢統計0的結果
統計15分鐘內發生5xx錯誤超過30次的主機及對應的錯誤次數。
host
pv
host1
60
host2
55
host3
47
host4
45
host5
31
查詢統計1的結果
統計15分鐘內發生5xx錯誤超過30次的主機及對應的錯誤次數。
host
pv
hosta
70
hostb
45
hostc
44
hostd
42
集合操作結果
當選擇集合操作為拼接時,集合操作結果如下:
host
pv
host1
60
host2
55
host3
47
host4
45
hosg5
31
hosta
70
hostb
45
hostc
44
hostd
42
其他示例
當2個查詢統計結果中的字段不完全一致時,進行拼接后,無匹配的字段留空。
查詢統計0結果
a
b
a1
b1
a2
b2
查詢統計1結果
b
c
b1
c1
b2
c2
集合操作結果
a
b
c
a1
b1
無
a2
b2
無
無
b1
c1
無
b2
c2
當存在3個查詢統計時,查詢統計0和查詢統計1的結果先完成集合操作,再與查詢統計2結果拼接。
查詢統計0結果
a
b
a1
b1
a2
b2
查詢統計1結果
a
b
a1
b11
a2
b22
a3
b33
查詢統計0結果與查詢統計1結果的拼接結果
當選擇集合操作為內聯,$0.a == $1.a時,集合操作結果如下:
a
$0.b
$1.b
a1
b1
b11
a2
b2
b22
查詢統計2結果
a
b
a3
b333
a4
b444
集合操作結果
當選擇集合操作為拼接時,集合操作結果如下:
說明查詢統計2結果中字段b與字段$0.b對齊。
a
$0.b
$1.b
a1
b1
b11
a2
b2
b22
a3
b333
無
a4
b444
無
內聯
示例1
需求
監控指定Bucket中發生5xx錯誤的次數,當每15分鐘內出現1000次5xx錯誤時觸發告警。此需求中,需添加資源數據,用于維護Bucket白名單。
配置
結果
查詢統計0的結果
統計15分鐘內發生5xx錯誤次數超過1000次的Bucket。
bucket
pv
bucket_01
1600
bucket_02
1550
bucket_03
1470
bucket_04
1450
查詢統計1的結果
Bucket的資源數據。
bucket
desc
bucket_03
for dev team
bucket_04
for test team
bucket_05
for service team
bucket_06
for support team
集合操作結果
當選擇集合操作為內聯,$0.bucket == $1.bucket時,集合操作結果如下:
bucket
pv
desc
bucket_03
1470
for dev team
bucket_04
1450
for test team
示例2
需求
北京和上海地域分別有2個用于存儲Nginx訪問日志的Logstore,每15分鐘統計一次發生5xx錯誤超過30次的客戶端。北京和上海同時發生5xx錯誤,且北京的錯誤次數大于上海時觸發告警。
配置
結果
查詢統計0結果
統計15分鐘內北京地域發生5xx錯誤超過30次的客戶端及對應的錯誤數。
client_ip
pv
192.0.2.4
60
192.0.2.5
55
192.0.2.6
47
192.0.2.7
45
192.0.2.8
31
查詢統計1結果
統計15分鐘內上海地域發生5xx錯誤超過30次的客戶端及對應的錯誤數。
client_ip
pv
192.0.2.5
70
192.0.2.6
45
192.0.2.7
44
192.0.2.8
42
192.0.2.9
42
集合操作結果
當選擇集合操作為內聯,$0.client_ip == $1.client_ip,$0.pv > $1.pv時,集合操作結果如下:
client_ip
pv
192.0.2.6
47
192.0.2.7
45
其他示例
當2個查詢統計結果中的非關聯字段存在同名時,集合操作的結果集合自動為字段添加$0、$1前綴。
查詢統計0結果
a
b
c
d
a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3
d3
查詢統計1結果
a
b
c
a1
b11
c11
a2
b22
c22
集合操作結果
當選擇集合操作為內聯,$0.a == $1.a時,集合操作結果如下:
a
$0.b
$0.c
d
$1.b
$1.c
a1
b1
c1
d1
b11
c11
a2
b2
c2
d2
b22
c22
左斥
需求
監控除指定Bucket外的其他Bucket發生5xx錯誤的次數,當每15分鐘內出現1000次5xx錯誤時觸發告警。此需求中,需添加資源數據,用于維護Bucket黑名單。
配置
結果
查詢統計0的結果
統計15分鐘內出現5xx錯誤超過1000次的Bucket。
bucket
pv
bucket_01
60
bucket_02
55
bucket_03
47
bucket_04
45
查詢統計1的結果
Bucket的資源數據。
bucket
desc
bucket_03
for dev team
bucket_04
for test team
集合操作結果
當選擇集合操作為左斥,$0.bucket == $1.bucket時,集合操作結果如下:
bucket
pv
bucket_01
60
bucket_02
55
右斥
需求
監控除指定Bucket外的其他Bucket發生5xx錯誤的次數,當每15分鐘內出現1000次5xx錯誤時觸發就告警。此需求中,需添加資源數據,用于維護Bucket黑名單。
配置
結果
查詢統計0的結果
Bucket的資源數據。
bucket
desc
bucket_03
for dev team
bucket_04
for test team
查詢統計1的結果
統計15分鐘內出現5xx錯誤超過1000次的Bucket。
bucket
pv
bucket_01
60
bucket_02
55
bucket_03
47
bucket_04
45
集合操作結果
當選擇集合操作為右斥,$0.bucket == $1.bucket時,集合操作結果如下:
bucket
pv
bucket_01
60
bucket_02
55
笛卡爾積
示例1
需求:
同時監控OSS訪問日志和SLB訪問日志,每15分鐘統計一次OSS的4xx錯誤和SLB的5xx錯誤,當總次數達到1000次時觸發告警。
配置:
結果:
查詢統計0的結果
統計15分鐘內出現OSS 4xx錯誤的次數。
pv
890
查詢統計1的結果
統計15分鐘內出現SLB 5xx錯誤的次數。
pv
567
集合操作結果
當選擇集合操作為笛卡爾積時,集合操作結果如下:
$0.pv
$1.pv
890
567
其他示例
查詢統計0結果
a
b
a1
b1
a2
b2
a5
b5
查詢統計1結果
a
c
a1
c1
a3
c3
集合操作結果
當選擇集合操作為笛卡爾積時,集合操作結果如下:
$0.a
b
$1.a
c
a1
b1
a1
c1
a1
b1
a3
c3
a2
b2
a1
c1
a2
b2
a3
c3
a5
b5
a1
c1
a5
b5
a3
c3
左聯
查詢統計0結果
a
b
a1
b1
a2
b2
a3
b3
查詢統計1結果
a
b
c
a1
b11
c1
a2
b22
c2
集合操作結果
當選擇集合操作為左聯,$0.a == $1.a時,集合操作結果如下:
a
$0.b
$1.b
c
a1
b1
b11
c1
a2
b2
b22
c2
a3
b3
無
無
右聯
查詢統計0結果
a
b
c
a1
b11
c1
a2
b22
c2
查詢統計1結果
a
b
a1
b1
a2
b2
a3
b3
集合操作結果
當選擇集合操作為右聯,$0.a == $1.a時,集合操作結果如下:
a
$0.b
c
$1.b
a1
b11
c1
b1
a2
b22
c2
b2
a3
無
無
b3
全聯
查詢統計0
a
b
c
a1
b1
c1
a2
b2
c2
a5
b5
c3
查詢統計1結果
a
b
d
a1
b11
d1
a2
b22
d2
a3
b33
d3
集合操作結果
當選擇集合操作為全聯,$0.a == $1.a時,集合操作結果如下:
a
$0.b
c
$1.b
d
a1
b1
c1
b11
d1
a2
b2
c2
b22
d2
a5
b5
c3
無
無
a3
無
無
b33
d3
無數據告警
您可以使用無數據告警功能,避免采集過程中數據丟失無感知問題。例如您創建了一個告警監控規則用于監控各個主機的CPU指標,并希望發生如下情況時,收到告警通知。
CPU使用率超過95%。
查詢和分析結果中無數據。
具體配置如下所示:
查詢統計:
* | select promql_query_range('cpu_util') from metrics limit 1000
該查詢和分析語句用于統計CPU的使用率。
觸發條件:有數據匹配,value>95,嚴重度:中
當查詢和分析結果中存在value的值大于95時,觸發中級別的告警。
連續觸發閾值:當累計觸發的告警次數達到該值時,產生一條告警。
無數據告警:打開無數據告警開關,并設置嚴重度和標注信息。
開啟無數據告警功能后,如果查詢和分析結果中無數據的次數超過連續觸發閾值,將觸發告警。
無數據告警具備獨立的告警嚴重度和標注信息。
頁面配置展示如下圖: