【监控与可观测性】05-OpenTelemetry入门:统一链路追踪落地方案
OpenTelemetry 入门:统一链路追踪落地方案
专栏:监控 & 可观测性
难度:进阶
标签:OpenTelemetry链路追踪可观测性Jaeger分布式追踪
前言
微服务架构下,一个请求经过十几个服务,出问题时不知道问题在哪个环节。链路追踪就是解决这个问题的。
一、三大可观测性信号
| 信号 | 工具 | 解决的问题 |
|---|---|---|
| Metrics(指标) | Prometheus | 系统是否健康 |
| Logs(日志) | ELK | 发生了什么 |
| Traces(链路) | Jaeger/Zipkin | 为什么慢/为什么失败 |
二、OpenTelemetry 架构
应用(SDK埋点) ↓ OTLP协议 OTel Collector(采集、处理、路由) ├→ Jaeger(链路存储展示) ├→ Prometheus(指标存储) └→ Elasticsearch(日志存储)三、Java 应用接入(零代码侵入)
# 下载Java Agent(无需修改代码)wgethttps://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar# 启动应用时挂载Agentjava\-javaagent:/opt/opentelemetry-javaagent.jar\-Dotel.service.name=myapp\-Dotel.traces.exporter=otlp\-Dotel.exporter.otlp.endpoint=http://otel-collector:4317\-Dotel.metrics.exporter=prometheus\-jarmyapp.jar四、OTel Collector 配置
# otel-collector-config.ymlreceivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318processors:batch:# 批量处理,减少网络请求timeout:1ssend_batch_size:1024memory_limiter:# 防止OOMlimit_mib:512exporters:jaeger:endpoint:jaeger:14250tls:insecure:trueprometheus:endpoint:"0.0.0.0:8889"service:pipelines:traces:receivers:[otlp]processors:[memory_limiter,batch]exporters:[jaeger]metrics:receivers:[otlp]processors:[batch]exporters:[prometheus]五、Jaeger 安装与查询
# 快速启动Jaeger(一体化镜像)dockerrun-d\--namejaeger\-p16686:16686\-p14250:14250\jaegertracing/all-in-one:latest# 访问UI: http://localhost:16686实用查询场景:
- 搜索 P99 最慢的请求的 Trace
- 定位某个服务调用失败的根因
- 分析哪个下游调用占了大部分响应时间
结语:OpenTelemetry 统一了可观测性的标准,避免了厂商锁定。Java 应用通过 Agent 零代码接入是最快的落地方式。
