PrometheusGrafanaOpenTelemetryKubernetes可观测性
场景
某微服务应用在上线后出现间歇性高延迟,错误预算快速消耗。团队已有 Prometheus 和 Grafana,但缺少分布式追踪,无法定位根因。
症状
- 用户报告页面加载缓慢(>5秒)
- Grafana 中 p99 延迟从 200ms 飙升至 2s
- 错误率从 0.5% 升至 3%,错误预算即将耗尽
诊断
- 检查 Prometheus 指标:确认高延迟是全局还是局部。运行查询:
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))。发现frontend服务 p99 正常,但payments服务 p99 高达 4s。 - 部署 OpenTelemetry 收集器:自动注入追踪,定位慢调用链。
命令与配置
安装 OpenTelemetry 收集器(Helm)
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm upgrade --install otel-collector open-telemetry/opentelemetry-collector \
--set mode=deployment \
--set config.receivers.otlp.protocols.grpc.endpoint=0.0.0.0:4317 \
--set config.exporters.prometheus.endpoint=0.0.0.0:8889 \
--set-file config.pipelines.traces=traces.yaml
Prometheus 配置(添加 scrape 目标)
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
- targets: ['otel-collector:8889']
Grafana 仪表盘(导入 JSON)
创建追踪仪表盘,使用 tempo 数据源(或其他兼容存储)。
风险控制
- 命名空间隔离:在独立命名空间部署收集器,避免影响生产。
- 采样率控制:默认 10% 采样,防止存储爆炸。
- 配置备份:备份 Prometheus 和 Grafana 配置。
回滚
helm rollback otel-collector 0 # 回滚到上一个版本
kubectl delete -f prometheus-config.yaml # 移除 scrape 配置
验证
- 查询:
rate(traces_sampled_total[5m])确认追踪数据流入。 - 在 Grafana 中查看延迟仪表盘,确认 p99 恢复正常(<500ms)。
- 执行端到端测试,错误率降至 0.5%。
何时提交 OpsGlobal 工单
- 无法确定根因,需要专家分析调用链。
- 配置后指标无变化,可能收集器或 exporter 有误。
- 需要优化采样策略或存储方案。
适用场景
适合正在处理 Observability、Prometheus, Grafana, OpenTelemetry, Kubernetes 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过一个实际场景,演示如何使用 Prometheus、Grafana 和 OpenTelemetry 构建端到端的可观测性栈,涵盖指标、追踪和仪表盘。适合 SRE 和 DevOps 工程师。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。