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