OpenTelemetry 多语言接入指南
为什么选择 OpenTelemetry?
🚀 零代码接入
无需修改代码,通过自动化工具即可快速接入,大幅降低接入成本和维护负担。
🌐 多语言支持
支持 Go、Python、Java、JavaScript、.NET、PHP、Rust、C++ 等主流编程语言,满足异构技术栈的监控需求。
📊 全链路追踪
自动捕获分布式系统中的请求调用链,快速定位性能瓶颈和故障根因。
🔧 灵活配置
提供丰富的配置选项和环境变量,支持自定义采样策略、资源属性等高级功能。
📈 标准协议
基于 OpenTelemetry 标准协议,避免厂商锁定,轻松切换不同的可观测性后端。
🎯 生产就绪
经过大规模生产环境验证,性能优异,资源占用低,可靠性高。
OpenTelemetry vs Apache SkyWalking
OpenTelemetry 和 Apache SkyWalking 都是优秀的 APM 解决方案。以下对比帮助您根据实际需求做出选择:
| 对比维度 | OpenTelemetry | Apache SkyWalking |
|---|---|---|
| 定位 | 🎯 开放标准 + SDK/API | 🛠️ 完整 APM 解决方案 |
| 标准化 | ✅ CNCF 标准,厂商中立 | ⚠️ 专有协议,部分支持 OTel |
| 语言支持 | ✅ 11+ 语言原生支持 | ⚠️ Java 最佳,其他语言支持有限 |
| 数据模型 | ✅ 统一的信号模型(Traces/Metrics/Logs) | ⚠️ 主要聚焦 Traces |
| 自动埋点 | ✅ 9 种语言零代码接入 | ✅ Java 零代码接入(Agent 成熟) |
| 社区生态 | ✅ 最活跃的可观测性项目 | ⚠️ 主要是中国社区 |
| 后端依赖 | ✅ 无绑定,支持任意后端 | ⚠️ 需要 SkyWalking OAP 后端 |
| 数据导出 | ✅ OTLP 标准协议 | ⚠️ 专有协议为主 |
| 灵活性 | ✅ 高度可定制和扩展 | ⚠️ 相对封闭的生态 |
| 学习曲线 | ⚠️ 概念较多,需要学习标准 | ✅ 开箱即用,上手简单 |
| UI 和可视化 | ⚠️ 需要第三方(Jaeger/Grafana/Uptrace) | ✅ 内置完整 UI,功能丰富 |
| 部署复杂度 | ✅ 轻量级,只需 SDK + Collector | ⚠️ 需要部署 OAP + 存储 + UI |
| 性能开销 | ✅ 极低(SDK 级别) | ⚠️ Agent 开销稍高 |
| 厂商支持 | ✅ 所有主流厂商支持 | ⚠️ 厂商支持有限 |
| 数据所有权 | ✅ 完全掌控,可切换后端 | ⚠️ 依赖 SkyWalking 后端 |
📊 选择建议
选择 OpenTelemetry,如果您:
- ✅ 需要厂商中立的解决方案,避免锁定
- ✅ 使用多种编程语言(Go、Python、Java、.NET、Rust 等)
- ✅ 希望灵活切换不同的 APM 后端(Jaeger、Zipkin、Grafana、Uptrace、Datadog 等)
- ✅ 关注行业标准和长期演进(CNCF 项目)
- ✅ 需要统一的 Traces、Metrics、Logs 数据模型
- ✅ 希望与云原生生态深度集成(Kubernetes、Prometheus、Grafana)
选择 SkyWalking,如果您:
- ✅ 主要使用 Java 技术栈
- ✅ 需要开箱即用的完整 APM 方案(不想自己组合后端)
- ✅ 喜欢 SkyWalking 的内置 UI 和可视化能力
- ✅ 团队更熟悉中文文档和社区
- ✅ 不需要切换到其他 APM 后端
💡 最佳实践:混合使用
您也可以将两者结合使用:
- 使用 OpenTelemetry SDK 进行数据采集(享受标准化和灵活性)
- 导出到 SkyWalking OAP(通过 SkyWalking 的 OTel Receiver,享受其 UI)
- 同时导出到其他后端(如 Uptrace、Grafana),实现多后端对比和备份
# OpenTelemetry SDK 可以同时导出到多个后端OTEL_EXPORTER_OTLP_ENDPOINT=http://skywalking-oap:11800,http://uptrace:4317
这种方式让您既能享受 OpenTelemetry 的标准化,又能利用 SkyWalking 的 UI 能力。
快速开始
选择您使用的编程语言,开始接入 OpenTelemetry:
主要特性
三大信号支持
- Traces(追踪):分布式追踪,记录请求在系统中的完整调用链路
- Metrics(指标):性能指标采集,包括请求量、响应时间、错误率等
- Logs(日志):结构化日志收集,与 Trace 自动关联
丰富的框架支持
自动支持主流框架和库:
- Web 框架:Gin、Echo、Flask、Django、Spring Boot、Express、Koa、ASP.NET Core
- 数据库:MySQL、PostgreSQL、MongoDB、Redis、Elasticsearch
- 消息队列:Kafka、RabbitMQ、RocketMQ
- RPC 框架:gRPC、Dubbo、Thrift
- HTTP 客户端:标准库、第三方客户端
灵活的部署方式
- 零代码接入:通过 Agent 或自动化工具,无需修改代码
- SDK 接入:手动集成 SDK,获得更细粒度的控制
- 混合模式:结合自动化和手动埋点,满足复杂场景
核心概念
了解 OpenTelemetry 的核心概念,帮助您更好地使用:
- Span:表示一次操作,包含时间戳、属性、事件等信息
- Trace:由多个 Span 组成的完整调用链
- Context Propagation:在分布式系统中传递追踪上下文
- Resource:描述生成遥测数据的实体,如服务名称、版本等
- Instrumentation:代码埋点和数据采集的过程
环境变量配置
OpenTelemetry 支持通过环境变量进行配置,以下是常用配置:
# 服务基本信息OTEL_SERVICE_NAME=your-service-nameOTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production# OTLP 导出器配置OTEL_EXPORTER_OTLP_ENDPOINT=https://your-apm-platform.comOTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=<your-dsn>OTEL_EXPORTER_OTLP_PROTOCOL=grpc# Trace 配置OTEL_TRACES_EXPORTER=otlpOTEL_TRACES_SAMPLER=parentbased_traceidratioOTEL_TRACES_SAMPLER_ARG=0.1# Metrics 配置OTEL_METRICS_EXPORTER=otlpOTEL_METRIC_EXPORT_INTERVAL=60000# Logs 配置OTEL_LOGS_EXPORTER=otlp
获取 DSN
DSN(Data Source Name)是连接 APM 平台的凭证,请联系平台管理员获取或在平台控制台中生成。
高级特性
探索更多高级功能,充分发挥 OpenTelemetry 的能力: