预约咨询 提交工单

使用 Prometheus、Grafana 和 OpenTelemetry 实现 Kubernetes 统一可观测性

学习如何搭建端到端可观测性栈:OpenTelemetry 采集数据、Prometheus 存储指标、Grafana 可视化,并附 SRE 团队实用排障步骤。

使用 Prometheus、Grafana 和 OpenTelemetry 实现 Kubernetes 统一可观测性
Observability 6min 43 浏览 2026-07-08
KubernetesSREOpenTelemetryPrometheusGrafana可观测性

场景

某电商平台 Kubernetes 集群出现间歇性请求延迟,但传统监控仅捕获 CPU 和内存,无法关联应用追踪与基础设施指标。SRE 团队决定部署 OpenTelemetry 以统一链路追踪、指标和日志,并结合 Prometheus 与 Grafana 构建可观测性平台。

症状

  • 用户反馈页面加载慢,但 Prometheus 节点利用率正常。
  • Grafana 仪表盘显示部分服务 P99 延迟飙升,缺乏根因上下文。
  • 无法快速定位是数据库慢查询还是网络抖动。

诊断

  1. 确认 OpenTelemetry Collector 是否正常运行:kubectl get pods -n opentelemetry
  2. 检查 Prometheus target 状态:在 Prometheus UI 中查看 Targets 是否全部 up。
  3. 查看 Grafana 数据源连接:进入 Grafana 配置页面,测试 Prometheus 数据源。
  4. 使用 kubectl logs -n <namespace> <collector-pod> 查看 OpenTelemetry Collector 日志,检查数据导出错误。

命令

# 安装 OpenTelemetry Operator
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm upgrade --install opentelemetry-operator open-telemetry/opentelemetry-operator --namespace opentelemetry --create-namespace

# 部署 OpenTelemetry Collector (自定义配置)
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: otel-collector
  namespace: opentelemetry
spec:
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
    exporters:
      prometheus:
        endpoint: 0.0.0.0:8889
        namespace: otel
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          processors: [batch]
          exporters: [prometheus]
EOF

# 配置 Prometheus 抓取 OpenTelemetry 指标
# 在 Prometheus 配置中添加 job:
# - job_name: 'otel-collector'
#   static_configs:
#     - targets: ['otel-collector.opentelemetry:8889']

# 重启 Prometheus 或使用 Helm 升级
helm upgrade --install prometheus prometheus-community/prometheus --namespace monitoring --set extraScrapeConfigs="- job_name: 'otel-collector'
  static_configs:
  - targets: ['otel-collector.opentelemetry:8889']"

风险控制

  • 命名空间隔离:将 OpenTelemetry、Prometheus、Grafana 部署在不同命名空间(如 opentelemetry、monitoring),避免资源冲突。
  • 资源限制:为 OpenTelemetry Collector 设置 CPU/内存 limits(如 500m/512Mi),防止突变流量打爆集群。
  • 备份配置:修改 Prometheus 或 Grafana 配置前,备份现有 Prometheus 数据卷和 Grafana 数据库。
  • 金丝雀发布:先在非生产集群验证 OpenTelemetry 配置,再推广到生产。

回滚

# 回滚 OpenTelemetry Collector 至之前版本
kubectl delete -f otel-collector.yaml  # 若使用文件部署
helm rollback opentelemetry-operator 0  # 使用 Helm 并回滚至上一个版本

# 回滚 Prometheus 配置
kubectl delete configmap prometheus-server -n monitoring  # 可能需要重建
# 或 helm rollback prometheus 1

验证

  1. 确认 OpenTelemetry Collector Pod 运行:kubectl get pods -n opentelemetry -l app.kubernetes.io/name=opentelemetry-collector
  2. 检查 Prometheus 目标:访问 Prometheus UI,搜索 job="otel-collector" 并确保状态为 UP。
  3. 在 Grafana 中导入示例仪表盘(如《OpenTelemetry Collector Metrics》),查看时间序列数据。
  4. 模拟慢查询:在测试服务中注入延迟,观察 Grafana 中 OTel 指标是否实时更新。

何时提交 OpsGlobal 工单

  • 上述诊断步骤未解决问题,且需要专家协助调整 OpenTelemetry Collector 配置。
  • Prometheus 抓取失败但网络策略正确,怀疑底层集群问题。
  • 需要定制 Grafana 仪表盘以关联追踪、指标与日志,但团队缺乏经验。
  • 在生产环境金丝雀发布后出现性能回退,需快速回滚并分析根因。

适用场景

适合正在处理 Observability、Kubernetes, SRE, OpenTelemetry, Prometheus 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

学习如何搭建端到端可观测性栈:OpenTelemetry 采集数据、Prometheus 存储指标、Grafana 可视化,并附 SRE 团队实用排障步骤。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询