百度工程师眼中的云原生可观测性追踪技术 https://mp.weixin.qq.com/s/FyPaifHGs3knCcHmjMGVqg
百度工程师眼中的云原生可观测性追踪技术
作者 | daydreamer
一、概念介绍
GEEK TALK
-
监控指标(Metrics): 监控指标的定义特征是可聚合的,是在一段时间内组成单个逻辑指标、计数器或直方图的原子。例如:传入的http请求的数量可以建模为一个计数器,其更新聚合为简单的加法。 -
追踪(Tracing): 它定义特征是它处理请求范围内的信息,任何可以绑定到系统中单个事务对象的生命周期的数据或元数据。例如:发送到数据库的实际sql查询的文本。 -
日志(Logging): 日志的定义特征是它处理离散事件。例如:应用程序调试或错误消息通过一个可切割的文件发送到集群统一处理。
二、追踪技术数据模型
(以OpenTelemetry标准为例)
GEEK TALK
每个 Span 都封装了以下状态:
-
Name -
Start and End Timestamps -
Span Context -
跨度上下文使用两个标识符提供有关跟踪和跨度的特定上下文:Trace ID 和Span ID。每个 Span 由一个在 Trace 中唯一的 ID 标识,称为 Span ID。Span 使用 Trace ID 来标识 span 与其跟踪之间的关系。Span Context 以此描述跨越服务和流程边界关系。 -
Attributes -
包含元数据的键值对(key-value),您可以使用元数据来注释 Span 以携带有关它正在跟踪的操作的信息。 -
Span Events -
被认为是 Span 上的结构化日志消息(或注释),通常用于表示 Span 持续时间内有意义的单点。 -
Span Links -
可以将一个span与一个或多个span相关联,从而描述执行上的上下游关系。例如,假设我们有一个分布式系统,为了响应其中一些操作(称其为操作a),一个额外的操作(称其为操作b)被排队等待执行,操作b的执行是异步的。我们希望将操作b与操作a相关联,但我们无法预测操作b何时开始。此时将操作a最后一个span链接到操作b第一个span,从而描述他们的上下游关系。 -
Span Status -
状态码
三、业界tracing落地
Uber Jaeger
GEEK TALK
阿里鹰眼平台
-
架构迭代逐渐轻量,数据呈现更加实时,从批量升级为流式计算 -
将监控流程搭建可视化,降低接入成本,搭建设计交给使用方 -
根据分析场景对数据进行抽样,如对链路形态的分析不需要全量数据
四、实际工作遇到的难点
及解决方案
GEEK TALK
-
采集压力高,要求SDK高性能,由于请求分散上报和传输的压力不大 -
优化实现合理的抽样策略 -
深度优化编码及映射算法 -
数据根据类型和使用场景分类,选择不同的底层存储
-
开发人员对于非业务代码接入的主动性不高,这种情况下需要接口设计简单、易用,大量埋点可以依赖底层框架,自定义埋点简单易用 -
SDK使用文档表述的简洁、精准,有比较好的已有实践场景可以直接复用 -
投入的性价比要高,能看到系统切实解决的实际问题
-
采用本地持久化作为缓冲 -
流量与任务的的结合,插入trick task等
-
指标的置信度分析,和数据科学的结合 -
多种聚合窗口实时分析,兼顾短时间的时效性和较长时间的趋势分析 -
更加直观的展现形式,如何用尽量少的指标直观展示尽量多的信息