- 概述
APM(Application Performance Managerment)系统致力于监控和管理应用软件性能和可用性。通过检测和诊断复杂应用程序的性能问题。来保证软件应用程序的良好运行与预期的服务。
容器和Serverless编程方式的诞生极大提升了软件交付和部署的效率。APM系统为了应对这种变化趋势,诞生了一系列面向DevOps的诊断和分析系统。包括集中式日志系统(Logging),集中式度量系统(Metrics)和分布式追踪系统(Tracing)。
分布式追踪系统用于记录请求范围内的信息。例如,一次远程方法调用的执行过程和耗时。是我们排查系统问题和系统性能的利器。
分布式追踪系统种类繁多,但是核心步骤有三个:代码埋点,数据存储和查询展示。
为了解决不同的分布式追踪系统API不兼容的问题,诞生了OpenTracing规范。
OpenTracing是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。
下面介绍一下OpenTracing的数据模型:
OpenTracing 中的 Trace(调用链)通过归属于此调用链的 Span 来隐性的定义。
特别说明,一条 Trace(调用链)可以被认为是一个由多个 Span 组成的有向无环图(DAG图),Span 与 Span 的关系被命名为 References。
例如:下面的示例 Trace 就是由8个 Span 组成:
有些时候,使用下面这种,基于时间轴的时序图可以更好的展现 Trace(调用链):
每个 Span 包含以下的状态:
operation name: 操作名称
start timestamp: 起始时间
finish timestamp: 结束时间
Span Tag: 一组键值对构成的 Span 标签集合。键值对中,键必须为 string,值可以是字符串,布尔,或者数字类型。
Span Log: 一组 span 的日志集合。每次 log 操作包含一个键值对,以及一个时间戳。键值对中,键必须为 string,值可以是任意类型。但是需要注意,不是所有的支持 OpenTracing 的 Tracer,都需要支持所有的值类型。
SpanContext: Span 上下文对象 (下面会详细说明)。