日志服务支持联合监控与无数据告警,本文将指导如何配置。
监控时效性说明
告警监控原理:基于告警的查询时间范围,根据检查频率定时执行配置的查询语句,并将查询结果作为告警条件的参数进行计算,如果计算结果为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时,触发中级别的告警。
连续触发阈值:当累计触发的告警次数达到该值时,产生一条告警。
无数据告警:打开无数据告警开关,并设置严重度和标注信息。
开启无数据告警功能后,如果查询和分析结果中无数据的次数超过连续触发阈值,将触发告警。
无数据告警具备独立的告警严重度和标注信息。
页面配置展示如下图: