Arduino新手必看:用一块电位器+中断,轻松实现好盈电调的无级调速
2026/6/4 23:59:23
OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控实现可视化监控,并且有多种部署方式。**
我们来详细拆解一下部署方案和可视化实现。
OpenTelemetry(OTel)和 SkyWalking 组合实现可视化监控,主要有两种核心架构:
下图清晰地展示了这两种部署架构及其数据流向:
这是最直接的一体化方案,用 OTel 标准化采集,用 SkyWalking 做存储、分析和可视化。
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以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.opentelemetry.io/otelSDK,配置导出到 SkyWalking 的 OTLP 端点opentelemetry-api和opentelemetry-sdk,配置 OTLP 导出器@opentelemetry/api和@opentelemetry/sdk-trace-nodehttp://localhost:8080此方案使用 OTel Collector 作为数据管道,将数据分发给多个后端。
应用 -> OTel Collector -> [SkyWalking OAP, Jaeger, Prometheus] ↓ [SkyWalking UI, Grafana]创建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.yamljava -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在 Grafana 中:
# 添加 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使用 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 UI | 1. 服务拓扑图(实时动态) 2. 链路追踪查询 3. 性能指标仪表盘 4. 告警管理 5. 日志关联 | http://<skywalking-ui>:8080 |
| Grafana | 1. 自定义监控仪表盘 2. 多数据源聚合展示 3. 灵活的图表配置 | http://<grafana>:3000 |
| Jaeger UI | 1. 专业的链路追踪分析 2. 系统架构图 3. 对比分析功能 | http://<jaeger>:16686 |
# 在 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}# 基础配置-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# 验证 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 的组合,你可以:
推荐方案:对于大多数场景,直接从方案一(OTel采集 + SkyWalking后端)开始,这是最简洁高效的方案。当需要更专业的指标分析或与现有监控体系集成时,再考虑方案二的混合架构。