场景
一家电商平台的微服务架构运行在 Kubernetes 上,频繁出现间歇性延迟峰值和错误率上升。团队已使用 Prometheus 采集指标、Grafana 展示仪表盘,但缺乏分布式追踪,难以快速定位根因。
症状
- 用户反馈高峰时段页面加载缓慢
- 部分 API 返回 5xx 错误
- Prometheus 告警(如高延迟)触发,但无法区分是数据库慢查询、网络抖动还是代码逻辑问题
诊断
引入 OpenTelemetry (OTel) 自动注入边车容器或使用 Operator,将追踪数据发送至 Jaeger(或 Grafana Tempo),并在 Grafana 中关联指标与追踪。
步骤
- 部署 OpenTelemetry Operator:
bash kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml - 创建 OTel Collector 实例(示例 YAML):
yaml apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: otel-collector spec: config: | receivers: otlp: protocols: grpc: http: exporters: jaeger: endpoint: jaeger-collector:14250 service: pipelines: traces: receivers: [otlp] exporters: [jaeger] - 为微服务添加注解以启用自动注入:
bash kubectl annotate deployment my-service instrumentation.opentelemetry.io/inject-java="true" - 在 Grafana 中配置 Jaeger 数据源,使用 Explore 功能通过 TraceID 关联日志和指标。
风险控制
- 先在预发布环境测试 OTel 集成
- 设置采样策略:初始 1% 采样率,逐步调高
- 为 OTel Collector 配置资源限制和限流
- 保留原有 Prometheus 配置作为回退
回滚
如需回退:
kubectl delete -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
kubectl delete opentelemetrycollector otel-collector
kubectl annotate deployment my-service instrumentation.opentelemetry.io/inject-java-
同时清理 Jaeger 存储并恢复 Prometheus 远程写入配置。
验证
- 在 Jaeger UI 中确认服务拓扑和追踪数据
- 使用 Grafana 面板展示追踪延迟,并与 Prometheus 指标(如请求速率)叠加
- 触发典型故障(如模拟慢 SQL),验证是否能从追踪中清晰定位
何时提交 OpsGlobal 工单
- 内部调试超过 2 小时仍未定位根因
- 集群范围性能下降,影响多个服务
- 需要专业调优采样率、存储容量或 Collector 高可用配置
- 团队缺乏 OpenTelemetry 经验,需要架构评审
适用场景
适合正在处理 Observability、Kubernetes, SRE 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过一个电商微服务场景,介绍如何结合 Prometheus、Grafana 和 OpenTelemetry 解决性能瓶颈。涵盖症状分析、诊断步骤、命令示例、风险控制、回滚方案和验证方法,帮助运维团队构建生产级可观测性。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。