背景
近两年系统可观测性可算是火爆的概念,从2017年 Peter Bourgon编写的《Metrics, Tracing, and Logging》系统地阐述了这三者的定义、特征,以及它们之间的关系与差异,受到了业界的广泛认可。由此确认了可观测性的三大支柱数据。可观测性平台旨在将三类数据数据采集,通过专家经验进行融合分析,输出成各种Dashboard,运维或者研发同学可通过Dashboard可以快速的定位和发现隐藏的问题。
阿里云日志服务(SLS)提供了Log,Metric,Trace等三种数据快速接入的能力,同时也提供了丰富的分析功能和可定制化的Dashboard的能力,客户可以利用SLS快速的搭建可观测性平台,让用户更加关注于分析,降低用户接入各类数据的门槛。
本文主要讲述应用接入SLS Trace服务后,针对各种场景化如何配置告警。
配置告警流程
- 点击Trace实例的project,进入存放trace数据的logstore。例如trace实例名称为sls-mall,存放trace数据的logstore名字就叫sls-mall-traces
- 添加执行告警SQL,下图以服务延迟告警为例,实现效果:当服务方法的平均延迟超过2秒则告警。
- 另存为新版告警
- 配置告警监控规则,同时添加触发条件
- 新增行动策略
- 配置行动列表,这里以钉钉消息为例,
当触发告警后,配置的钉钉号将会收到相应告警消息,如下图。以上便是添加SLS Trace告警的流程,接下来将会带来针对性Trace场景告警的SQL。
告警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
- 如何单个服务进行告警?
只需要在告警sql中添加
service: XXX
即可
- DB/NoSQL指标能否支持P90告警
可以,只需将上述的avg算子替换成使用
approx_percentile
算子即可
获得第一手资料与支持: