天天看点

Trace告警配置最佳实践

背景

近两年系统可观测性可算是火爆的概念,从2017年 Peter Bourgon编写的《Metrics, Tracing, and Logging》系统地阐述了这三者的定义、特征,以及它们之间的关系与差异,受到了业界的广泛认可。由此确认了可观测性的三大支柱数据。可观测性平台旨在将三类数据数据采集,通过专家经验进行融合分析,输出成各种Dashboard,运维或者研发同学可通过Dashboard可以快速的定位和发现隐藏的问题。

阿里云日志服务(SLS)提供了Log,Metric,Trace等三种数据快速接入的能力,同时也提供了丰富的分析功能和可定制化的Dashboard的能力,客户可以利用SLS快速的搭建可观测性平台,让用户更加关注于分析,降低用户接入各类数据的门槛。

本文主要讲述应用接入SLS Trace服务后,针对各种场景化如何配置告警。

配置告警流程

  1. 点击Trace实例的project,进入存放trace数据的logstore。例如trace实例名称为sls-mall,存放trace数据的logstore名字就叫sls-mall-traces
  2. 添加执行告警SQL,下图以服务延迟告警为例,实现效果:当服务方法的平均延迟超过2秒则告警。
Trace告警配置最佳实践
  1. 另存为新版告警
Trace告警配置最佳实践
  1. 配置告警监控规则,同时添加触发条件
Trace告警配置最佳实践
  1. 新增行动策略
Trace告警配置最佳实践
  1. 配置行动列表,这里以钉钉消息为例,
Trace告警配置最佳实践

当触发告警后,配置的钉钉号将会收到相应告警消息,如下图。以上便是添加SLS Trace告警的流程,接下来将会带来针对性Trace场景告警的SQL。

Trace告警配置最佳实践

告警SQL最佳实践

服务方法告警

  • 针对服务错误率告警
service:* and parentSpanID: "" | select sum(error) * 1.0 /count(1) as errorRate, service from (select CASE when statusCode = 'ERROR' then 1 ELSE 0 END as error, service from log ) group by service      
  • 针对服务请求QPS告警,注意:执行下面SQL,时间选择为:1分钟,如果是其他时间,调整分母即可
service : * and parentSpanID: "" | select count(1)/60 as QPS, service from log group by service      
  • 针对服务P90, P95, P99延迟(ms)告警
    • P90
service:* | select approx_percentile(duration, 0.9) as avg, service from log group by service, name      
    • P95
service:* | select approx_percentile(duration, 0.95) as avg, service from log group by service, name      
    • P99
service:* | select approx_percentile(duration, 0.99) as avg, service from log group by service, name      
  • 针对入口事务的平均延迟(ms)告警
service : * and parentSpanID: "" | select round(avg(duration) / 1000.0, 2) as total, service from log group by service      
  • 针对单个方法平均延迟(ms)告警
service : * | select round(avg(duration) / 1000.0, 2) as avg, service, name from log group by service, name      

DB/NoSQL告警

  • 针对DB平均延迟(ms)告警,本条SQL同样也适用于NoSQL(Redis,Cassandra,MongoDB,Elasticsearch)
attribute.db.system : * | select round(avg(duration) / 1000.0, 2) as avg, service, json_extract_scalar(attribute, '$["db.statement"]') as statement from log group by service, name, sql      

服务调用告警

  • 针对Http平均延迟(ms)告警
kind: client and attribute.http.method: * | select round(avg(duration) / 1000.0, 2) as avg, service, json_extract_scalar(attribute, '$["http.url"]') as url from log group by service, name, url      

消息中间件

  • 针对消息处理平均延迟(ms)告警
kind:consumer and attribute.messaging.system: * | select round(avg(duration) / 1000.0, 2) as avg, service from log group by service, name      

FAQ

  1. 如何单个服务进行告警?

只需要在告警sql中添加

service: XXX

即可

  1. DB/NoSQL指标能否支持P90告警

可以,只需将上述的avg算子替换成使用

approx_percentile

算子即可

获得第一手资料与支持:

Trace告警配置最佳实践