日志服务支持联合监控与无数据告警,本文将指导如何配置。
监控时效性说明
告警监控原理
基于告警的查询时间范围,根据检查频率定时执行配置的查询语句,并将查询结果作为告警条件的参数进行计算,如果计算结果为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种配置,具体如下所示:
不合并
需求
监控Nginx访问日志,每15分钟的5xx错误超过500次则触发告警,并且在告警内容中列出具体的出错的主机信息。
配置
结果
查询统计0的结果
统计15分钟内发生5xx错误的次数。
cnt
cnt
1234
查询统计1的结果
统计15分钟内发生5xx错误最多的Top5主机及对应的错误次数。
host
pv
host
pv
host1
60
host2
55
host3
47
host4
45
host5
30
集合操作结果
当选择集合操作为不合并时,集合操作结果为查询统计0的结果。
笛卡尔积
示例1
需求:
同时监控OSS访问日志和SLB访问日志,每15分钟统计一次OSS的4xx错误和SLB的5xx错误,当总次数达到1000次时触发告警。
配置:
结果:
查询统计0的结果
统计15分钟内出现OSS 4xx错误的次数。
pv
pv
890
查询统计1的结果
统计15分钟内出现SLB 5xx错误的次数。
pv
pv
567
集合操作结果
当选择集合操作为笛卡尔积时,集合操作结果如下:
$0.pv
$1.pv
$0.pv
$1.pv
890
567
其他示例
查询统计0结果
a
b
a
b
a1
b1
a2
b2
a5
b5
查询统计1结果
a
c
a
c
a1
c1
a3
c3
集合操作结果
当选择集合操作为笛卡尔积时,集合操作结果如下:
$0.a
b
$1.a
c
$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
拼接
示例1
需求
北京和上海地域分别有2个用于存储Nginx访问日志的Logstore,每15分钟统计一次5xx错误超过30次的主机数。当两个Logstore中符合条件的主机数超过10个时,触发告警。
配置
结果
查询统计0的结果
统计15分钟内发生5xx错误超过30次的主机及对应的错误次数。
host
pv
host
pv
host1
60
host2
55
host3
47
host4
45
host5
31
查询统计1的结果
统计15分钟内发生5xx错误超过30次的主机及对应的错误次数。
host
pv
host
pv
hosta
70
hostb
45
hostc
44
hostd
42
集合操作结果
当选择集合操作为拼接时,集合操作结果如下:
host
pv
host
pv
host1
60
host2
55
host3
47
host4
45
hosg5
31
hosta
70
hostb
45
hostc
44
hostd
42
其他示例
当2个查询统计结果中的字段不完全一致时,进行拼接后,无匹配的字段留空。
查询统计0结果
a
b
a
b
a1
b1
a2
b2
查询统计1结果
b
c
b
c
b1
c1
b2
c2
集合操作结果
a
b
c
a
b
c
a1
b1
无
a2
b2
无
无
b1
c1
无
b2
c2
当存在3个查询统计时,查询统计0和查询统计1的结果先完成集合操作,再与查询统计2结果拼接。
查询统计0结果
a
b
a
b
a1
b1
a2
b2
查询统计1结果
a
b
a
b
a1
b11
a2
b22
a3
b33
查询统计0结果与查询统计1结果的拼接结果
当选择集合操作为内联,$0.a == $1.a时,集合操作结果如下:
a
$0.b
$1.b
a
$0.b
$1.b
a1
b1
b11
a2
b2
b22
查询统计2结果
a
b
a
b
a3
b333
a4
b444
集合操作结果
当选择集合操作为拼接时,集合操作结果如下:
查询统计2结果中字段b与字段$0.b对齐。
a
$0.b
$1.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
pv
bucket_01
1600
bucket_02
1550
bucket_03
1470
bucket_04
1450
查询统计1的结果
Bucket的资源数据。
bucket
desc
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
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
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
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
client_ip
pv
192.0.2.6
47
192.0.2.7
45
其他示例
当2个查询统计结果中的非关联字段存在同名时,集合操作的结果集合自动为字段添加$0、$1前缀。
查询统计0结果
a
b
c
d
a
b
c
d
a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3
d3
查询统计1结果
a
b
c
a
b
c
a1
b11
c11
a2
b22
c22
集合操作结果
当选择集合操作为内联,$0.a == $1.a时,集合操作结果如下:
a
$0.b
$0.c
d
$1.b
$1.c
a
$0.b
$0.c
d
$1.b
$1.c
a1
b1
c1
d1
b11
c11
a2
b2
c2
d2
b22
c22
左联
查询统计0结果
a
b
a
b
a1
b1
a2
b2
a3
b3
查询统计1结果
a
b
c
a
b
c
a1
b11
c1
a2
b22
c2
集合操作结果
当选择集合操作为左联,$0.a == $1.a时,集合操作结果如下:
a
$0.b
$1.b
c
a
$0.b
$1.b
c
a1
b1
b11
c1
a2
b2
b22
c2
a3
b3
无
无
右联
查询统计0结果
a
b
c
a
b
c
a1
b11
c1
a2
b22
c2
查询统计1结果
a
b
a
b
a1
b1
a2
b2
a3
b3
集合操作结果
当选择集合操作为右联,$0.a == $1.a时,集合操作结果如下:
a
$0.b
c
$1.b
a
$0.b
c
$1.b
a1
b11
c1
b1
a2
b22
c2
b2
a3
无
无
b3
全联
查询统计0
a
b
c
a
b
c
a1
b1
c1
a2
b2
c2
a5
b5
c3
查询统计1结果
a
b
d
a
b
d
a1
b11
d1
a2
b22
d2
a3
b33
d3
集合操作结果
当选择集合操作为全联,$0.a == $1.a时,集合操作结果如下:
a
$0.b
c
$1.b
d
a
$0.b
c
$1.b
d
a1
b1
c1
b11
d1
a2
b2
c2
b22
d2
a5
b5
c3
无
无
a3
无
无
b33
d3
左斥
需求
监控除指定Bucket外的其他Bucket发生5xx错误的次数,当每15分钟内出现1000次5xx错误时触发告警。此需求中,需添加资源数据,用于维护Bucket黑名单。
配置
结果
查询统计0的结果
统计15分钟内出现5xx错误超过1000次的Bucket。
bucket
pv
bucket
pv
bucket_01
60
bucket_02
55
bucket_03
47
bucket_04
45
查询统计1的结果
Bucket的资源数据。
bucket
desc
bucket
desc
bucket_03
for dev team
bucket_04
for test team
集合操作结果
当选择集合操作为左斥,$0.bucket == $1.bucket时,集合操作结果如下:
bucket
pv
bucket
pv
bucket_01
60
bucket_02
55
右斥
需求
监控除指定Bucket外的其他Bucket发生5xx错误的次数,当每15分钟内出现1000次5xx错误时触发告警。此需求中,需添加资源数据,用于维护Bucket黑名单。
配置
结果
查询统计0的结果
Bucket的资源数据。
bucket
desc
bucket
desc
bucket_03
for dev team
bucket_04
for test team
查询统计1的结果
统计15分钟内出现5xx错误超过1000次的Bucket。
bucket
pv
bucket
pv
bucket_01
60
bucket_02
55
bucket_03
47
bucket_04
45
集合操作结果
当选择集合操作为右斥,$0.bucket == $1.bucket时,集合操作结果如下:
bucket
pv
bucket
pv
bucket_01
60
bucket_02
55
无数据告警
您可以使用无数据告警功能,避免采集过程中数据丢失无感知问题。例如您创建了一个告警监控规则用于监控各个主机的CPU指标,并希望发生如下情况时,收到告警通知。
CPU使用率超过95%。
查询和分析结果中无数据。
具体配置如下所示:
查询统计:例如统计CPU的使用率。
* | select promql_query_range('cpu_util') from metrics limit 1000
触发条件:有数据匹配,value>95,严重度:中
当查询和分析结果中存在value的值大于95时,触发中级别的告警。
连续触发阈值:当累计触发的告警次数达到该值时,产生一条告警。
无数据告警:打开无数据告警开关,并设置严重度和标注信息。
开启无数据告警功能后,如果查询和分析结果中无数据的次数超过连续触发阈值,将触发告警。
无数据告警具备独立的告警严重度和标注信息。
页面配置展示如下图:
- 本页导读 (1)
- 监控时效性说明
- 关联多个查询分析结果
- 不合并
- 笛卡尔积
- 拼接
- 内联
- 左联
- 右联
- 全联
- 左斥
- 右斥
- 无数据告警