MENU

链路跟踪与观测:OpenTelemetry 概念介绍

October 17, 2023 • 学习

2023-10-17 172524.jpg
OpenTelemetry整个链条分为三部分。

  1. 应用侧的接入(前后端),在整条调用链上的各个服务和程序中接入OTEL SDK。

    1. 目前适用于Golang的SDK主要覆盖了Trace和Metrics,Logs还暂未实现,但目前span已有的方法(AddEvent,RecordError等)已完全足够日常使用。
    2. 其他语言支持:C++、Java、JavaScript、PHP、Python、Swift
  2. 收集组件。目前收集部分主要搭建OTEL Collector、Elastic Agent、Prometheus三部分。

    1. OtelCollector接收来自应用的遥测数据(receiver),并做一系列处理(pipeline)。包括:标准化、数据采样、过滤、转换等等。用于减少数据的噪音和冗余,以便后续的分析和存储。并发送到不同的组件(exporter),也可以发送到下一级Collector做进一步处理。
    2. ElasticAgent 主要结合APM功能实现集成,最终数据将落到Elastic中,并向研发提供比较友好的日志、链路跟踪、可视化工具。
    3. 指标数据使用Prometheus进行存储,由Collector主动推送到Prometheus
  3. 数据分析和可视化:ElasticSearch APM 和 Grafana + Prometheus

otel-seg.png

名词

应用

Span:Span 用于表示一个操作的执行时间范围。每个 Span 包含一些关键信息,如Span名、开始时间、结束时间、属性KV对、Span内产生的Event序列,以及上下文信息等。通常一个Span会有零个或一个ParentSpan

Trace:多个Span的有向无环图,多个 Span 嵌套(ParentSpan)形成一个树状结构,可以复现出调用的层次结构。可由一个TraceID标记整个链路,便于排查。

Baggage:用于在跟踪过程中传递数据,例如用户 ID、会话令牌等。通过HTTP Header或gRPC metadata传递。

OTEL Collector

Receiver:接收来自应用程序、服务或其他数据源的原始数据;支持多种格式;Receiver将原始数据转换为 OpenTelemetry 格式,并将其传递给Processor

Processor:用于对接收到的数据进行处理和转换;可以执行各种操作,例如数据采样、数据标准化、数据过滤、数据修改等

Exporter:将处理后的数据发送到其他组件,如ES、Prometheus;支持多种协议

Pipeline:串联Receiver、多个Processor和Exporter;组成一个处理流程。

Archives QR Code
QR Code for this page
Tipping QR Code