链路模型是AnyRobot用于描述调用轨迹(Trace)的数据模型,包括跨度(Span)的基本属性配置以及关联日志配置等要素。基于链路模型,AnyRobot能够实现链路数据的标准化处理,以及链路数据及其关联日志数据的统一查询,并基于此进行异常问题的根因定位与问题追溯,满足开发测试、IT运维、业务运营、安全合规等全业务运营流程场景下的链路数据体系构建及分析需求。
基本概念
微服务系统架构背景下,服务之间调用关系愈渐复杂,一个请求可能跨越多个服务、多个系统组件。链路(Trace)提供了一个API请求或操作视角下的跨服务、跨组件的完整调用路径,能够帮助开发测试、运维等人员清楚理解这一请求/操作在不同服务和系统组件之间的完整传播路径、调用关系以及性能信息,以解决复杂系统架构背景下的性能瓶颈及故障定位、溯源等难题。
链路(Trace):具体而言,Trace是由相互关联、具有父子关系的跨度(Span)组成的一个有向无环图(Directed Acyclic Graph,简称DAG),每个Span代表了一个微服务或组件的调用或操作,共同描述了请求在整个系统中的流转过程。一条完整的链路(Trace)可以使用包含时间轴的时序图来呈现,如下所示:
跨度(Span):Span 是链路(Trace)中的最小操作单元,每个Span会追踪请求发出的特定操作,并记录该操作执行期间发生的事情,包括开始时间、结束时间、耗时、状态、操作类型、所属服务名称等。在同一个链路(Trace)中,跨度(Span)之间可以存在父子关系,表示链路的嵌套关系,父级跨度(Span)调用了一个或多个子跨度(Span),跨度的运行状态也将直接影响链路(Trace)呈现出的状态。
• Trace ID :用于唯一标识一次分布式请求调用的全链路追踪。它贯穿了整个请求调用的所有服务、系统和网络,确保所有相关的日志、监控数据都能被关联起来,以便进行全链路追踪和分析。
• Span ID :用于唯一标识一次请求调用过程中的某个具体操作(如HTTP请求、数据库访问等)。
• 父 Span ID :当前 Span 的父级 Span 的ID。在分布式链路追踪中,Span 之间往往存在父子关系,表示调用的层次结构,用于帮助理解服务间的调用顺序和依赖关系。
• Span 名称:是对 Span 所代表操作的简短描述。例如,一个Span可能代表一个HTTP请求、数据库查询或内部方法调用等。
• Span 时间:包括 Span 开始时间、Span 结束时间和 Span 持续时间。
• Span 类型:用于对Span 进行分类,帮助在监控和分析时快速识别筛选不同类型的操作,包括UNSPECIFIED(未定义Span)、INTERNAL(内部 Span)、SERVER(服务端侧 Span)、CLIENT(客户端侧 Span)、PRODUCER(生产者 Span)、CONSUMER(消费者 Span)六种类型。
• Span 状态:用于表示 Span 的执行结果,包括OK(成功)、ERROR(错误)、UNSET(未知)三种状态。
• Span所在服务名称:指记录该 Span 的服务或组件的名称,用于识别哪个服务或组件参与了特定的请求调用。