在 Kubernetes 中无侵入安装 OpenTelemetry 探针

打印 上一主题 下一主题

主题 564|帖子 564|积分 1692


背景

OpenTelemetry 探针


OpenTelemetry(简称 Otel,最新的版本是 1.27) 是一个用于观察性的开源项目,提供了一套工具、APIs 和 SDKs,用于收集、处理和导出遥测数据(如指标、日志和追踪信息)。应用程序遥测数据(如追踪、指标和日志)的收集是通过探针来完成的,探针通常以库的形式集成到应用程序中,自动捕获重要信息协助监控和调试。OpenTelemetry 探针支持市面上大多数的编程语言,探针的安装(通常被称为插桩,Instrumentation)分为手动和自动两种方式。

  • 手动插桩:指开发者直接在其应用程序代码中显式地添加遥测数据收集的代码,需要手动完成 SDK 初始化、插入追踪点、添加上下文信息等一系列操作。
  • 自动插桩:利用 OpenTelemetry 提供的库自动捕获应用程序的遥测数据,无需或只需很少的代码更改。比如,Java 通过 javaagent 实现探针的自动安装
二者各有优劣:手动插桩适用于需要高度定制和精确控制遥测数据收集的场景;自动插桩适合快速启动和简化集成,特别是在使用标准框架和库的应用程序中。
OpenTelemetry Operator 介绍

OpenTelemetry Operator 是一个为了简化 OpenTelemetry 组件在 Kubernetes 环境中的部署和管理而设计的 Kubernetes Operator。
OpenTelemetry Operator 通过 CRD(OpenTelemetryCollectorInstrumentationOpAMPBridge) 实现在 Kubernetes 集群中自动部署和管理 OpenTelemetry Collector;在工作负载中自动安装 OpenTelemetry 探针。
今天我们就将体验如何使用 OpenTelemetry Operator 自动安装探针,实现链路跟踪。
演示

架构

这是演示的架构,Otel 提供了 多种语言的 instrumentation SDK,这篇文章中我们将使用 Java 和 Go 两种语言的应用。这两种语言会使用全自动和半自动的注入安装:

  • Java 全自动注入安装,Otel Operator 通过使用 init container 引入 sdk ,并通过 JAVA_TOOL_OPTIONS 来指定 javaagent 来插桩。这里将使用 pinakispecial/spring-boot-rest 镜像来运行一个简单的 Spring Boot REST 服务。
  • Go 半自动注入安装,为什么是半自动?Go 的全自动是通过 eBPF 的方式实现的:在 Pod 注入独立的容器,加载 BPF 程序。但是 eBPF 的实现对内核要求十分苛刻 5.4 - 5.14。这里演示半自动的方式:手动引入 Go instrumentation SDK自动注入配置

Jaeger

为了便于演示这里使用  jaegertracing/all-in-one 镜像来部署 Jaeger,这个镜像包含了 Jaeger 收集器、内存存储、查询服务和 UI 等组件,非常适合开发和测试使用。
通过环境变量 COLLECTOR_OTLP_ENABLED 启动对 OTLP(OpenTelemetry Protocol) 的支持。
[code]kubectl apply -f -

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表