展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 系统应用 > OpenTelemetry在服务网格架构下的最佳实践

OpenTelemetry在服务网格架构下的最佳实践

【百度云原生导读】OpenTelemetry 由著名的 OpenTracing、 OpenCensus 两个产品在 2019 年合并而来,拥有广泛的应用场景和强大的开发团队。2021年,OpenTelemetry 的使用成为新的行业规范,通过在各个数据源之间建立一致性,使得数据收集以及处理更加便捷。

【百度云原生导读】OpenTelemetry 由著名的 OpenTracing、 OpenCensus 两个产品在 2019 年合并而来,拥有广泛的应用场景和强大的开发团队。2021年,OpenTelemetry 的使用成为新的行业规范,通过在各个数据源之间建立一致性,使得数据收集以及处理更加便捷。那么,如何在服务网格架构中引入 OpenTelemetry 进而获取可观测 trace 能力,实践过程中会遇到哪些问题?本文对相关问题做了总结并给出了解法,最后通过一个 Demo 手把手教你在 Istio 中安装 OpenTelemetry。

1. OpenTelemetry 介绍

OpenTelemetry(简称 OTel)是一系列的工具、APIs 和 SDKs。使用 OpenTelemetry 可以产生、收集、输出一系列遥测数据(telemetry data 如 trace、metrics 和 log)帮助用户分析应用程序的性能和行为。

OpenTelemetry 是厂商无关的,并且作为工业级别标准被大量的厂商支持。另外,OpenCensus(Google)和 OpenTracing(Uber)是其前身。

其架构如下所示:

主要包含了以下几个部分:

  • Instrumentation:包含自动方式API 、SDK 方式接入 OpenTelemetry。

  • OTLP: OpenTelemetry 定义的传输协议。

  • OpenTelemetry Collector:提供厂商无关的解决方案,用于实现 数据的接收(receive), 处理(process)和 输出(export)的功能。

2.OpenTelemetry 在 Service Mesh 架构下的实践

目前 Istio 实现可观测 trace 方案 可以总结为:

  1. 需要业务透传对应的 header 信息(从入向请求中获取对应的 header 信息、并在出向请求中添加响应 header 信息)。

  2. Sidecar 自动向监控系统发送Span信息。

通过对 Istio 方案可观测 trace 的分析,可以发现几个问题:

  1. 对业务代码是有侵入的 Trace 上下文传播(Trace Context propagation),需要业务透传相应的 header 信息。

  2. 所有的 Span 数据都由 Sidecar 侧生成,业务内部方法级别监控信息无法采集。

在业界 APM 的技术方案中,Ja vaAgent(一种字节码技术,对业务无侵入)作为主流的技术方案。同样 OpenTelemetryauto-instrumentation通过 Ja va Agent 提供的动态注入字节码的技术实现任意 Ja va 应用遥测数据的采集,其支持了非常多的广为流行的库和框架。

2.1 无侵入式Trace上下文传播

对于Ja va应用程序,OpenTelemetry Ja vaAgent支持的Trace context propagation如下:

  • "tracecontext": W3C Trace Context (addbaggageas well to include W3C baggage)

  • "baggage": W3C Baggage

  • "b3": B3 Single

  • "b3multi": B3 Multi

  • "jaeger": Jaeger (includes Jaeger baggage)

  • "xray": AWS X-Ray

  • "ottrace": OT Trace

上述b3multi/b3(以x-b3开头)恰好是 Istio 中要求透传的 header 信息。

2.2 业务内部方法级别监控

目前 OpenTelemetry Ja vaAgent 已经支持大量的库、框架以及应用服务器,能够采集业务内部方法级别执行逻辑。

2.3 trace信息与业务日志关联

通常在业务排查问题中,不仅仅要查看对应的 trace 链路信息,同时也要基于对应的 trace_id、span_id 查看对应的业务日志信息。

OpenTelemetry Ja va Agent 预先在 log 的 MDC(Mapped Diagnostic Context)中设置了诸多关于当前 span 的信息,业务能够轻松对这些信息进行配置,进而方便地在业务日志中打印出相应的 trace_id、span_id 信息。以下是在 SpringBoot 中使用 logback 的配置示例:

    logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

    2.4 系统架构

    • Ja vaAgent 将采集的数据发送至 OpenTelemetry Collector 。

    • Sidecar 将生成的 trace span 信息发送至 OpenTelemetry Collector。

    • OpenTelemetry Collector 将数据输出至监控系统如 jaeger 或 Kafka 中。

    • 用户可以通过对应的 UI 查看 trace 数据。

    2.5 实践

    本文主要用于演示,均无高可用部署。

    2.5.1 安装istio

    下载 istio 安装包(本文以1.13.2 为例):https://github.com/istio/istio/releases

      $ istioctl install -f istio-opentelemtry-iop.yaml

      istio-opentelemetry-iop.yaml的内容如下所示:

      apiVersion: install.istio.io/v1alpha1kind: IstioOperatorspec:  meshConfig:    defaultConfig:      holdApplicationUntilProxyStarts: true
      tracing: sampling: 100 enablePrometheusMerge: false # 定义扩展的providers extensionProviders: - name: otel-trace zipkin: service: otel-collector.istio-system.svc.cluster.local port: 9411 maxTagLength: 56

      components: ingressGateways: - name: istio-ingressgateway enabled: true

      特别说明:上述extensionProviders 属性中定义了otel-trace,其信息为opentelemetry Collector 的地址(其本身可以接收 zipkin 格式的trace,因此此处定义的是zipkin的信息)

      2.5.2 安装OpenTelemetry Collector

      在https://github.com/open-telemetry/opentelemetry-operator 上按照说明安装OpenTelemetry Collector。假设所安装的K8S Service为:otel-collector.istio-system.svc.cluster.local:9411,其中9411是接收zipkin数据格式的端口。

      opentelemetry-collector-config.yaml的内容如下所示:

      # collector的receivers配置receivers:  otlp:    protocols:      grpc:      http:  zipkin:processors:  batch:  memory_limiter:# collector的exporters配置,exporters:  zipkin:    endpoint: "http://zipkin.istio-system.svc.cluster.local:9411/api/v2/spans"service:  pipelines:    traces:      # 对于trace数据,开启otlp、zipkin协议端口提供服务      receivers: [otlp, zipkin]      processors: [memory_limiter, batch]      # 对于trace数据,最后输出至zipkin中      exporters: [zipkin]

      2.5.3 安装 jaeger

        kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/jaeger.yaml

        由于 collector exporters 输出的 trace 数据格式为 zipkin,jaege 兼容 zipkin 格式 trace 数据,因此最终 trace 数据可通过 jaeger 展示。

        2.5.4 提交Telemetry CRD

        提交 Telemetry CRD,将 envoy 对接的 trace 的信息变更为 otel-trace,即为 Opentelemetry Collector。

          $ kubectl apply -f mesh-trace-telemetry.yaml

          mesh-trace-telemetry.yaml的内容如下所示:

          apiVersion: telemetry.istio.io/v1alpha1kind: Telemetrymetadata:  name: mesh-trace-telemtry  namespace: istio-systemspec:  tracing:  - providers:    - name: otel-trace    randomSamplingPercentage: 100

          2.5.5 部署Mesh应用

          为对应的命名空间 default 开启自动 Sidecar 注入功能:

            $ kubectl label namespace default istio-injection=enabled --overwrite

            按照K8S的方式部署微服务应用 consumer-demo 和 provider-demo。应用程序说明:

            • consumer-demo:服务消费方,向外提供 HTTP 接口,该接口会调用服务提供方 provider-demo 提供的 HTTP 接口,调用 provider-dem 的调用形式包括 RestTemplate 和 Fegin。

            • provider-demo:服务提供方,提供 HTTP 接口。

            应用程序启动需要加上对应的参数,如下所示:

            # 启动时要指定ja vaagent# -Dotel.resource.attributes=service.name=provider-demo  在span中的service信息# -Dotel.propagators=b3multi 透传b3multi headerja va -ja vaagent:/opentelemetry-ja vaagent.jar -Dotel.resource.attributes=service.name=provider-demo -Dotel.propagators=b3multi -jar provider-demo-1.0-SNAPSHOT.jar

            部署时需要在容器的环境中添加对应的配置:

              env:  - name: OTEL_TRACES_EXPORTER   # ja vaagent输出otlp协议类型数据    value: otlp  - name: OTEL_EXPORTER_OTLP_ENDPOINT   # collector地址    value: http://otel-collector.istio-system.svc.cluster.local:4317  - name: OTEL_JA VAAGENT_ENABLED     # 开启ja vaagent功能    value: 'true'

              2.5.6 观察Mesh监控数据

              如下图为本文consumer-demo和provider-demo在业务访问中产生的监控数据(以监控系统Jaeger为例):

              3.总结

              通过在 Service Mesh 架构中引入 OpenTelemetry,可以总结带来的业务收益如下:

              1. 通过 OpenTelemtry auto-instrumentation 机制可实现无侵入式 Trace 上下文传播,使得业务无感接入 Service Mesh 可观测性。

              2. 通过 OpenTelemtry auto-instrumentation 机制可实现业务内部方法级别的监控数据采集,弥补 Service Mesh 只能在 Sidecar 侧采集监控数据的缺陷。

              3. 通过 OpenTelemetry Logger MDC auto-instrumentation 机制能够将监控信息对应的 trace_id、span_id 等信息配置输出在业务日志中,方便业务排查问题。

              为服务更多客户,百度智能云现已推出服务网格产品CSM(Cloud Service Mesh),为用户提供高可靠、免运维、开放的云原生微服务治理产品,火热公测中,欢迎对服务网格感兴趣的开发者与我们一起探讨实践。

              更多产品介绍与使用请点击阅读原文或直接访问以下链接:

              https://cloud.baidu.com/product/csm.html

              ---------- END ----------

              重磅!云原生计算交流群成立

              扫码添加小助手即可申请加入,一定要备注:名字 - 公司 / 学校 - 地区,根据格式备注,才能通过且邀请进群。

              了解更多微服务、云原生技术的相关信息,请关注我们的微信公众号【百度云原生】!

              本文内容来源于网友投稿,如有侵权请联系删除。
              作者最新文章
              系统应用
              相关文章 更多
              精品专题 更多
              装机必备

              正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

              Windows

              正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

              macOS软件

              正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

              IOS软件

              正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

              AI

              正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

              Mac软件 更多
              photoshop
              photoshop

              Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

              Blender
              Blender

              Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

              灵活计算器
              灵活计算器

              灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

              赤友清理大师
              赤友清理大师

              赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

              极度公式
              极度公式

              极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

              图几
              图几

              图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

              密码键盘
              密码键盘

              密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

              思源笔记
              思源笔记

              思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

              Office 365 简体中文
              Office 365 简体中文

              一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

              Mac
              WALTR PRO
              WALTR PRO

              WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

              CodeExpander
              CodeExpander

              CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

              Mountain Duck
              Mountain Duck

              Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

              WINDOWS 更多
              3dmax(3ds max)
              3dmax(3ds max)

              Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

              photoshop
              photoshop

              Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

              Blender
              Blender

              Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

              Windows 10
              Windows 10

              Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

              极度公式
              极度公式

              极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

              密码键盘
              密码键盘

              密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

              思源笔记
              思源笔记

              思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

              傲梅轻松备份
              傲梅轻松备份

              傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

              Office 365 简体中文
              Office 365 简体中文

              一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

              Mac
              Wise Folder Hider Pro
              Wise Folder Hider Pro

              Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

              WALTR PRO
              WALTR PRO

              WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

              CodeExpander
              CodeExpander

              CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。