设置查询统计语句

日志服务支持联合监控与无数据告警,本文将指导如何配置。

监控时效性说明

  1. 告警监控原理:基于告警的查询时间范围,根据检查频率定时执行配置的查询语句,并将查询结果作为告警条件的参数进行计算,如果计算结果为true,则触发告警。

  2. 监控时效性问题分析

    1. 数据索引延迟:数据从写入日志服务到被查询之间存在延时,即便延时很低,也存在数据漏查的风险。

      例如:告警执行时间为12:03:30,查询范围为相对一分钟时,检查频率为固定间隔1分钟。则查询时间范围为[12:02:30,12:03:30),对于12:03:29秒写入的日志,无法保证在12:03:30这次时间点查询到。

    2. 查询准确性:写入包含同一分钟不同时间的日志时,由于日志服务的索引构建方式,可能会存在较晚的日志的索引写入较早的日志时间点。

      例如:告警执行时间为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)查询不到日志。

  3. 时效性优化建议:

    • 追求准确性:如果您对告警的准确性要求高(不重复报警,不漏报)。

      • 数据索引延迟问题:建议在查询统计时,查询区间的相对起始时间和相对结束时间设置早一点,如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时,触发中级别的告警。

  • 连续触发阈值:当累计触发的告警次数达到该值时,产生一条告警。

  • 无数据告警:打开无数据告警开关,并设置严重度和标注信息。

    开启无数据告警功能后,如果查询和分析结果中无数据的次数超过连续触发阈值,将触发告警。

    无数据告警具备独立的告警严重度和标注信息。

页面配置展示如下图:

无数据告警