news 2026/2/7 12:39:41

OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控

OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控实现可视化监控,并且有多种部署方式。**

我们来详细拆解一下部署方案和可视化实现。


一、总体架构与可视化方案

OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控,主要有两种核心架构

  1. OTel 采集 -> SkyWalking 分析/可视化(主流推荐)
  2. OTel 采集 -> 其他后端 + SkyWalking 分析/可视化(混合架构)

下图清晰地展示了这两种部署架构及其数据流向:

“方案二:混合后端架构”

“方案一:SkyWalking 作为主力后端”

数据流与处理

数据采集层

应用服务集群

Java应用

Go应用

Node.js应用

“OpenTelemetry Agent/SDK
(多语言统一采集)”

“OTLP/gRPC协议
标准数据流”

“SkyWalking OAP Server
(接收OTLP数据)”

“SkyWalking UI
(一体化可视化)”

“Jaeger
(专注追踪)”

“Prometheus
(专注指标)”

“Grafana
(统一仪表盘)”

“(可选)SkyWalking数据
可再导出到Prometheus”


二、方案一:OTel 采集 + SkyWalking 作为主力后端(最简洁)

这是最直接的一体化方案,用 OTel 标准化采集,用 SkyWalking 做存储、分析和可视化。

部署步骤

第1步:部署 SkyWalking 后端(支持 OTLP)

SkyWalking 从8.4.0版本开始原生支持 OTLP 协议接收。

使用 Docker 快速部署:

# 1. 创建网络dockernetwork create sw-net# 2. 启动 Elasticsearch(存储)dockerrun -d --name=elasticsearch\--network=sw-net\-p9200:9200 -p9300:9300\-e"discovery.type=single-node"\-e"ES_JAVA_OPTS=-Xms512m -Xmx512m"\docker.elastic.co/elasticsearch/elasticsearch:7.16.2# 3. 启动 SkyWalking OAP(接收OTLP数据)dockerrun -d --name=skywalking-oap\--network=sw-net\-p11800:11800 -p12800:12800\-p4317:4317 -p4318:4318\# OTLP gRPC和HTTP端口-eSW_STORAGE=elasticsearch\-eSW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200\-eSW_RECEIVER_OTEL_ENABLED=true\# 启用OTLP接收器apache/skywalking-oap-server:9.7.0# 4. 启动 SkyWalking UIdockerrun -d --name=skywalking-ui\--network=sw-net\-p8080:8080\-eSW_OAP_ADDRESS=http://skywalking-oap:12800\apache/skywalking-ui:9.7.0
第2步:应用集成 OpenTelemetry SDK/Agent

Java Spring Boot应用为例:

方式A:使用 OTel Java Agent(无侵入,推荐)

# 1. 下载最新版 OTel Java Agentwgethttps://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar# 2. 启动应用时添加JVM参数java -javaagent:./opentelemetry-javaagent.jar\-Dotel.service.name=user-service\-Dotel.traces.exporter=otlp\-Dotel.metrics.exporter=otlp\-Dotel.logs.exporter=otlp\-Dotel.exporter.otlp.endpoint=http://skywalking-oap:4317\-Dotel.exporter.otlp.protocol=grpc\-jar your-application.jar

方式B:通过依赖手动集成

<!-- pom.xml 添加依赖 --><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-api</artifactId><version>1.35.0</version></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-sdk</artifactId><version>1.35.0</version></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-exporter-otlp</artifactId><version>1.35.0</version></dependency>

对于其他语言:

  • Go: 使用go.opentelemetry.io/otelSDK,配置导出到 SkyWalking 的 OTLP 端点
  • Python: 使用opentelemetry-apiopentelemetry-sdk,配置 OTLP 导出器
  • Node.js: 使用@opentelemetry/api@opentelemetry/sdk-trace-node
第3步:访问可视化界面
  1. 打开浏览器访问http://localhost:8080
  2. 在 SkyWalking UI 中即可看到:
    • 服务拓扑图(自动生成)
    • 链路追踪详情
    • 应用性能指标(JVM、请求量、延迟等)
    • 日志关联查询(如果配置了日志导出)

三、方案二:OTel Collector + 混合后端(更灵活)

此方案使用 OTel Collector 作为数据管道,将数据分发给多个后端。

部署架构

应用 -> OTel Collector -> [SkyWalking OAP, Jaeger, Prometheus] ↓ [SkyWalking UI, Grafana]

部署步骤

第1步:部署 OTel Collector

创建otel-collector-config.yaml

receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318exporters:# 导出到 SkyWalkingotlp/sw:endpoint:"skywalking-oap:4317"tls:insecure:true# 导出到 Jaegerjaeger:endpoint:"jaeger:14250"tls:insecure:true# 导出到 Prometheusprometheus:endpoint:"0.0.0.0:9464"processors:batch:memory_limiter:check_interval:1slimit_mib:512service:pipelines:traces:receivers:[otlp]processors:[memory_limiter,batch]exporters:[otlp/sw,jaeger]metrics:receivers:[otlp]processors:[memory_limiter,batch]exporters:[prometheus]

启动 Collector:

dockerrun -d --name=otel-collector\--network=sw-net\-p4317:4317 -p4318:4318 -p9464:9464\-v$(pwd)/otel-collector-config.yaml:/etc/otel-collector-config.yaml\otel/opentelemetry-collector-contrib:0.95.0\--config=/etc/otel-collector-config.yaml
第2步:应用配置指向 Collector
java -javaagent:./opentelemetry-javaagent.jar\-Dotel.service.name=user-service\-Dotel.traces.exporter=otlp\-Dotel.metrics.exporter=otlp\-Dotel.exporter.otlp.endpoint=http://otel-collector:4317\-jar your-application.jar
第3步:配置 Grafana 统一视图

在 Grafana 中:

  1. 添加Prometheus数据源(监控指标)
  2. 添加Jaeger数据源(链路追踪)
  3. 添加SkyWalking数据源(通过SkyWalking Grafana插件)
  4. 创建统一仪表盘,混合展示各类数据

四、Kubernetes 部署方案(生产推荐)

使用 Helm 快速部署

部署 SkyWalking(支持 OTLP)
# 添加 Helm 仓库helm repoaddskywalking https://apache.jfrog.io/artifactory/skywalking-helm# 部署 SkyWalkinghelminstallskywalking skywalking/skywalking\--set oap.replicas=2\--set oap.image.tag=9.7.0\--set ui.image.tag=9.7.0\--set oap.env.SW_RECEIVER_OTEL_ENABLED=true\--set storage.type=elasticsearch\--set elasticsearch.enabled=true
为应用注入 OTel Sidecar

使用 OpenTelemetry Operator(如果已安装)自动注入:

apiVersion:opentelemetry.io/v1alpha1kind:Instrumentationmetadata:name:java-instrumentationspec:exporter:endpoint:http://skywalking-oap:4317propagators:-tracecontext-baggagesampler:type:parentbased_traceidratioargument:"0.25"java:image:ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest

或者在 Deployment 中手动配置:

apiVersion:apps/v1kind:Deploymentmetadata:name:user-servicespec:template:spec:containers:-name:appimage:your-app:latestenv:-name:JAVA_TOOL_OPTIONSvalue:>-javaagent:/otel/javaagent.jar -Dotel.service.name=user-service -Dotel.exporter.otlp.endpoint=http://skywalking-oap:4317volumeMounts:-name:opentelemetry-javaagentmountPath:/otelvolumes:-name:opentelemetry-javaagentemptyDir:{}initContainers:-name:download-javaagentimage:busyboxcommand:['sh','-c']args:-wget-O /otel/javaagent.jar https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jarvolumeMounts:-name:opentelemetry-javaagentmountPath:/otel

五、可视化效果与功能对比

可视化组件主要功能访问方式
SkyWalking UI1. 服务拓扑图(实时动态)
2. 链路追踪查询
3. 性能指标仪表盘
4. 告警管理
5. 日志关联
http://<skywalking-ui>:8080
Grafana1. 自定义监控仪表盘
2. 多数据源聚合展示
3. 灵活的图表配置
http://<grafana>:3000
Jaeger UI1. 专业的链路追踪分析
2. 系统架构图
3. 对比分析功能
http://<jaeger>:16686

六、关键配置要点

SkyWalking OAP 的 OTLP 配置

# 在 application.yml 中确保以下配置receiver-otel:default:enabled:truegRPCHost:${SW_RECEIVER_OTEL_GRPC_HOST:0.0.0.0}gRPCPort:${SW_RECEIVER_OTEL_GRPC_PORT:4317}httpHost:${SW_RECEIVER_OTEL_HTTP_HOST:0.0.0.0}httpPort:${SW_RECEIVER_OTEL_HTTP_PORT:4318}

OTel Agent 关键配置

# 基础配置-Dotel.service.name=your-service-name -Dotel.resource.attributes=deployment.environment=production -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp# SkyWalking 后端地址-Dotel.exporter.otlp.endpoint=http://skywalking-oap:4317 -Dotel.exporter.otlp.protocol=grpc# 采样率配置-Dotel.traces.sampler=parentbased_always_on

七、生产环境建议

  1. 存储选择:生产环境建议使用ElasticsearchBanyanDB(SkyWalking 自研时序数据库)作为存储后端
  2. 高可用:部署至少 2 个 OAP 实例,并配置负载均衡
  3. 数据采样:在大流量场景下配置适当的采样率(如 10%-20%)
  4. 安全配置:启用 TLS 加密 OTLP 传输,配置认证
  5. 监控监控系统:监控 SkyWalking OAP 和 UI 本身的健康状态

快速验证命令

# 验证 SkyWalking OAP 健康状态curlhttp://localhost:12800/version# 验证 OTLP 接收器grpcurl -plaintext localhost:4317 list# 发送测试数据curl-X POST http://localhost:4318/v1/traces\-H"Content-Type: application/json"\-d'{"resourceSpans":[]}'

总结

通过 OpenTelemetry + SkyWalking 的组合,你可以:

  1. 实现完整的可视化监控:从链路追踪到性能指标
  2. 统一多语言数据采集:使用 OTel 标准化方案
  3. 享受 SkyWalking 的强大分析能力:特别是服务拓扑和 APM 功能
  4. 灵活选择部署架构:从简单一体到复杂混合架构

推荐方案:对于大多数场景,直接从方案一(OTel采集 + SkyWalking后端)开始,这是最简洁高效的方案。当需要更专业的指标分析或与现有监控体系集成时,再考虑方案二的混合架构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 23:46:59

无需手动编译:PyTorch-CUDA-v2.7镜像自动匹配驱动版本

无需手动编译&#xff1a;PyTorch-CUDA-v2.7镜像自动匹配驱动版本 在深度学习项目中&#xff0c;最让人头疼的往往不是模型调参&#xff0c;而是环境配置——尤其是当你满怀期待地运行代码时&#xff0c;却收到一条 CUDA version mismatch 错误提示。这种“明明代码没问题&…

作者头像 李华
网站建设 2026/2/5 4:14:31

PyTorch-CUDA镜像中的CUDA工具包版本说明及兼容性分析

PyTorch-CUDA镜像中的CUDA工具包版本说明及兼容性分析 在现代深度学习研发中&#xff0c;一个常见的场景是&#xff1a;研究人员在本地训练好的模型&#xff0c;部署到服务器后却因环境差异导致运行失败。这种“在我机器上能跑”的问题&#xff0c;曾长期困扰着AI团队的协作效率…

作者头像 李华
网站建设 2026/2/3 2:13:02

GitHub热门推荐:PyTorch-CUDA-v2.7镜像助力AI开发者提速50%

PyTorch-CUDA-v2.7 镜像&#xff1a;如何让 AI 开发效率飙升 50%&#xff1f; 在当今 AI 研发一线&#xff0c;你有没有遇到过这样的场景&#xff1f;刚接手一个项目&#xff0c;兴冲冲地准备跑通代码&#xff0c;结果 torch.cuda.is_available() 返回了 False。排查两小时才发…

作者头像 李华
网站建设 2026/2/3 18:47:23

无需繁琐配置!PyTorch-CUDA-v2.7镜像开箱即用GPU训练

无需繁琐配置&#xff01;PyTorch-CUDA-v2.7镜像开箱即用GPU训练 在深度学习项目中&#xff0c;最让人头疼的往往不是模型设计或调参&#xff0c;而是环境搭建——尤其是当你满心期待地准备开始训练时&#xff0c;却发现 torch.cuda.is_available() 返回了 False。明明装了NVID…

作者头像 李华
网站建设 2026/2/3 3:57:12

DiskInfo温控监测:防止PyTorch训练导致硬盘过热

DiskInfo温控监测&#xff1a;防止PyTorch训练导致硬盘过热 在深度学习模型训练日益常态化的今天&#xff0c;我们往往把注意力集中在GPU利用率、显存瓶颈和训练速度上。然而&#xff0c;在一场持续数天的PyTorch大规模训练任务中&#xff0c;真正让系统突然“罢工”的&#xf…

作者头像 李华
网站建设 2026/2/5 10:31:59

清华镜像源支持IPv6访问:提升PyTorch下载速度

清华镜像源支持IPv6访问&#xff1a;提升PyTorch下载速度 在高校和科研机构的AI开发一线&#xff0c;你是否也经历过这样的场景&#xff1f;凌晨两点&#xff0c;实验室服务器正在拉取一个PyTorch-CUDA镜像&#xff0c;进度条卡在30%已持续十分钟&#xff1b;反复重试后依然失…

作者头像 李华