返回首页

如何使用 Grafana 和 Prometheus 监控 Kubernetes

本综合指南教您如何使用 kube-prometheus-stack Helm chart 通过 Grafana 和 Prometheus 监控 Kubernetes。您将部署完整的监控堆栈,将 Grafana 连接到 Prometheus,导入预构建的仪表板,并配置警报以实现生产级集群可观测性。

Kubernetes 监控:Grafana 和 Prometheus 指南
Advertisement 728x90

使用 Grafana 与 Prometheus 监控 Kubernetes:分步指南

Kubernetes 已成为现代应用部署的基础层,但其动态、分布式的特性使得全面可观测性成为运维成功的必要条件。你需要了解节点的健康状况、Pod 的性能表现以及集群的状态,以确保可靠性并避免代价高昂的停机。本指南提供了一条明确、循序渐进的道路,帮助你掌握如何使用 Grafana 和 Prometheus 监控 Kubernetes,将原始指标转化为可操作的洞察,从而主动管理你的基础设施。

你将学到什么

通过本指南,你将了解如何使用行业标准的 kube-prometheus-stack 在你的 Kubernetes 集群上部署一套完整、可用于生产环境的监控栈。你将能够将 Grafana 连接到 Prometheus,导入预构建的仪表盘以获得即时可见性,并带着清晰的计划离开,以便根据你的特定需求定制告警和可视化。最重要的收获是:kube-prometheus-stack Helm Chart 是实现全栈 Kubernetes 监控最快、最可靠的方法。

Kubernetes 的行业标准监控栈

Prometheus 和 Grafana 的组合是 Kubernetes 监控的事实标准。根据行业数据,估计有 75% 使用 Kubernetes 的组织采用 Prometheus 和 Grafana 来满足其可观测性需求。这不仅仅是一种趋势,更是对这一开源工具包强大功能和灵活性的证明。

Google AdInline article slot
  • Prometheus 是一个云原生计算基金会(CNCF)的毕业项目,专为可靠性和可扩展性而设计。它通过按指定间隔从各种目标(如你的应用 Pod 或 Kubernetes 节点)抓取指标,并将其存储在时序数据库中。然后,你可以使用 PromQL(Prometheus 查询语言)查询这些数据,这是一种强大且灵活的语言,用于聚合和分析指标。
  • Grafana 是可视化层。它与 Prometheus 无缝集成,将原始抓取的数据转化为美观、实时的仪表盘和图表。这种可视化表示使得一眼就能发现趋势、检测异常和排查性能问题变得容易得多。Grafana 还可以作为其他数据源的统一用户界面,但对于 Kubernetes 而言,Prometheus 是其最重要的合作伙伴。

设置前提条件

在开始之前,请确保已安装并配置好以下工具。本指南假设你有一个可用的 Kubernetes 集群,无论是像 Minikube 这样的本地开发环境,还是云中的生产集群。

  • 一个正在运行的 Kubernetes 集群: 你需要一个集群来部署监控栈。对于本地测试,Minikube 或 Kind 非常合适。
  • Helm: Kubernetes 包管理器对于部署 kube-prometheus-stack 至关重要。请确保你的本地机器上安装了 Helm v3.2+。
  • kubectl: Kubernetes 命令行工具必须配置为与你的集群通信。

分步部署:使用 kube-prometheus-stack

为 Kubernetes 监控部署 Prometheus 和 Grafana 最高效且推荐的方法是使用 kube-prometheus-stack Helm Chart。此 Chart 由 Prometheus 社区维护,并将所有必要组件捆绑到一个易于管理的单一包中。它包括:

  • Prometheus Operator: 管理 Prometheus 和 Alertmanager 实例。
  • Prometheus: 核心指标服务器。
  • Alertmanager: 处理 Prometheus 发送的告警。
  • Grafana: 可视化平台。
  • Node Exporter: 从你的 Kubernetes 节点收集节点级指标(CPU、内存、磁盘)。
  • kube-state-metrics: 生成关于 Kubernetes 对象(如 Pod、Deployment 和 Service)状态的指标。

1. 添加 Prometheus 社区 Helm 仓库

首先,添加官方 Helm 仓库并更新它,以确保你获得最新的 Chart 版本。

Google AdInline article slot
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

2. 安装监控栈

你可以使用单个 Helm 命令安装监控栈,并通过各种参数进行自定义。此示例创建一个 monitoring 命名空间,并为 Prometheus 和 Grafana 数据启用持久化存储。

helm install prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  --set grafana.service.type=NodePort \
  --set grafana.service.nodePort=30094 \
  --set grafana.adminPassword=admin \
  --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.accessModes=["ReadWriteOnce"] \
  --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi \
  --set prometheus.prometheusSpec.retention=30d
  • grafana.adminPassword=admin:设置 Grafana 的管理员密码。在生产环境中请更改此设置。
  • --set grafana.service.type=NodePort:通过 NodePort 将 Grafana 暴露在集群外部,以便于访问。
  • prometheus.prometheusSpec.retention=30d:将 Prometheus 数据保留期设置为 30 天,这对于长期趋势分析至关重要。

3. 验证安装

检查 monitoring 命名空间中的所有 Pod 是否正在运行。

kubectl get pods -n monitoring

输出应显示多个状态为 Running 的 Pod,包括 Grafana、Prometheus、Alertmanager、node-exporterkube-state-metrics 的 Pod。

Google AdInline article slot

将 Grafana 连接到你的 Prometheus 数据源

kube-prometheus-stack Helm Chart 通常会自动将 Prometheus 配置为 Grafana 中的数据源。但是,最好验证一下连接。

访问 Grafana 界面

要访问 Grafana Web 界面,你可以使用端口转发进行本地测试,或者在生产环境中使用 LoadBalancer 或 Ingress 暴露服务。

选项 A:端口转发(用于快速本地访问)

这是临时访问仪表盘的最简单方法。

kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80

现在,打开浏览器并访问 http://localhost:3000

⚠️ 重要提示: 端口转发仅适用于本地测试和开发。对于永久性的生产环境设置,你应该使用类型为 LoadBalancer 的 Service 或 Ingress Controller 来暴露 Grafana。

选项 B:LoadBalancer(推荐用于云环境)

如果你在 UpCloud、AWS 或 GCP 等云提供商上运行,你可以简单地将 Grafana Service 修补为使用 LoadBalancer

kubectl patch svc prometheus-grafana -n monitoring -p '{"spec": {"type": "LoadBalancer"}}'

然后,获取外部 IP 地址:

kubectl get svc -n monitoring prometheus-grafana

http://<EXTERNAL-IP>:80 访问 Grafana。

登录

使用默认凭据登录:

  • 用户名: admin
  • 密码: 你在安装期间设置的密码(例如 adminprom-operator)。

登录后,导航到 配置 > 数据源,确认存在一个 Prometheus 数据源并且正在工作。点击它并使用 测试 按钮确保连接正常。

构建仪表盘:从预构建到自定义

将 Grafana 连接到 Prometheus 后,你可以开始可视化你的 Kubernetes 指标。获得有价值洞察的最快方法是导入来自 Grafana 社区的预构建仪表盘。

导入预构建仪表盘

Grafana 提供了大量的社区仪表盘库,你可以使用其唯一 ID 导入它们。

  1. 将鼠标悬停在侧边栏的 + 图标上,然后选择 导入
  2. 在“查找并导入仪表盘”字段中输入仪表盘 ID。两个强烈推荐的仪表盘是:
    • 1860Node Exporter Full – 提供关于集群节点的详细指标,包括 CPU、内存、磁盘和网络。
    • 8588Kubernetes Deployment Statefulset Daemonset – 提供你的 Kubernetes 工作负载的视图。
  3. 点击 加载,然后选择你的 Prometheus 数据源并点击 导入

这些仪表盘将立即为你提供集群健康状况的全面视图,而无需编写任何 PromQL 查询。

使用 PromQL 创建自定义仪表盘

虽然预构建的仪表盘是一个很好的起点,但你通常需要创建针对特定应用定制的自定义视图。这就是 PromQL 发挥作用的地方。

要创建新的仪表盘,请点击 + 图标并选择 新建仪表盘。然后,点击 添加可视化 并选择你的 Prometheus 数据源。

以下是用于 Kubernetes 监控的一些基本 PromQL 查询:

  • 每个 Pod 的 CPU 使用率:
    sum(rate(container_cpu_usage_seconds_total{namespace!="kube-system", pod!=""}[5m])) by (pod)
  • 每个 Pod 的内存使用率:
    sum(container_memory_working_set_bytes{namespace!="kube-system", pod!=""}) by (pod) / 1024 / 1024 / 1024
  • 按阶段划分的 Pod 状态:
    sum(kube_pod_status_phase) by (phase)
    此查询非常适合 Stat 面板,让你一目了然地查看所有 Pod 是否都在运行。

配置告警和通知

监控只是成功的一半;当出现问题时,你还需要收到通知。这就是 Alertmanager 的角色,它包含在 kube-prometheus-stack 中。

设置告警规则

你可以配置 Alertmanager 将通知发送到各种渠道,例如 Slack、电子邮件或 PagerDuty。一个常见且有效的设置是将告警发送到专用的 Slack 频道。

  1. 首先,在你的 Slack 工作区中创建一个传入 Webhook。
  2. 然后,你需要修改 Alertmanager 配置。你可以通过在 Helm 升级期间提供自定义的 values.yaml 文件或直接编辑 Secret 来实现。
  3. 在你的 values.yaml 文件中更新 alertmanager 部分,添加指向你的 Slack Webhook URL 的路由和接收器:
alertmanager:
  config:
    route:
      receiver: 'slack-notifications'
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 1h
    receivers:
      - name: 'slack-notifications'
        slack_configs:
          - api_url: 'https://hooks.slack.com/services/your/webhook/url'
            send_resolved: true
            title: '{{ .CommonLabels.alertname }} ({{ .Status | toUpper }})'
            text: >-
              {{ range .Alerts }}
              *告警:* {{ .Labels.alertname }}
              *严重级别:* {{ if .Labels.severity }}{{ .Labels.severity }}{{ else }}无{{ end }}
              *摘要:* {{ if .Annotations.summary }}{{ .Annotations.summary }}{{ else }}无{{ end }}
              *描述:* {{ if .Annotations.description }}{{ .Annotations.description }}{{ else }}无{{ end }}
              {{- end }}

使用 helm upgrade 应用这些更改后,告警将被发送到你的 Slack 频道。

生产环境监控的最佳实践

为确保你的监控栈在生产环境中健壮且可扩展,请遵循以下关键最佳实践。

  • 配置持久化存储: 在生产环境中部署时,始终为 Prometheus 和 Grafana 启用持久化存储。这可以确保你的指标数据和仪表盘配置在 Pod 重启和集群升级后仍然存在。在 kube-prometheus-stack 中,这由 Helm Chart 中的 persistencestorageSpec 设置控制。
  • 优化查询性能: 高基数查询可能会拖慢你的仪表盘和 Prometheus 本身。为了保持性能,始终在源头聚合你的 PromQL 查询。例如,不要查询 container_cpu_usage_seconds_total,而是按命名空间聚合它:sum by (namespace) (rate(container_cpu_usage_seconds_total[5m]))。这减少了 Grafana 需要处理的数据量。
  • 设置适当的保留期: Prometheus 的默认保留期是 15 天。根据你的需求进行调整。更长的保留期(例如 30-60 天)对于长期趋势分析很有用,但需要更多的存储空间。
  • 将配置作为代码管理: 随着你的监控需求不断变化,你可能会自定义仪表盘和告警规则。将你的仪表盘导出为 JSON,并与告警规则一起存储在版本控制(例如 Git)中。这种被称为 GitOps 的实践,使你的监控设置可重现且可审计。
  • 调整抓取间隔: Prometheus 的默认抓取间隔是 30 秒。对于关键、高频率的指标,你可能希望更频繁地抓取,但请注意,这会增加 Prometheus 和集群 API 服务器的负载。你可以在 Helm values 中自定义这些间隔。

常见问题解答

1. 使用 Grafana 和 Prometheus 监控 Kubernetes 最简单的方法是什么? 最简单且最推荐的方法是使用 kube-prometheus-stack Helm Chart。它将 Prometheus、Grafana、Alertmanager、node-exporterkube-state-metrics 捆绑到一个包中,你只需几个命令即可部署。

2. 监控 Kubernetes 是否必须使用 kube-state-metrics? 是的,kube-state-metrics 是一个关键组件,它生成关于 Kubernetes 对象状态的指标,例如就绪 Pod 的数量或 Deployment 的状态。没有它,你将无法了解更高级别 Kubernetes 资源的健康状况。

3. 如何让我的 Kubernetes 仪表盘加载得更快? 仪表盘加载缓慢通常是由低效的 PromQL 查询引起的。一个关键的修复方法是聚合查询以降低基数。例如,不要显示每个 Pod 的数据,而是使用类似 sum by (namespace) (rate(...)) 的查询在命名空间级别进行汇总。

4. 从我的 Kubernetes 监控中获取告警的最佳方式是什么? Prometheus 与 Alertmanager 配合使用,后者可以将通知发送到各种渠道。一种流行且简单的方法是通过传入 Webhook 将 Alertmanager 配置为向 Slack 频道发送告警。这提供了实时、可操作的告警。

5. 我是否需要手动在每个节点上安装 Node Exporter? 不需要。当你部署 kube-prometheus-stack Helm Chart 时,它会自动部署一个 Node Exporter DaemonSet。这确保了 Node Exporter Pod 在你的集群中的每个节点上运行,从而使 Prometheus 能够收集节点级指标(如 CPU、内存和磁盘使用情况),而无需任何手动干预。

来源

  1. UpCloud Global. (2025). Monitoring on UpCloud with Prometheus: Part 3.
  2. Ubuntu Documentation. (2026). How to use Prometheus with Canonical Kubernetes.
  3. Sfeir Institute. (2026). Create Effective Grafana Dashboards for Kubernetes Monitoring.
  4. Ory. (2025). Monitoring.
  5. GitHub - AkramGalal. (2025). deploying-prometheus-grafana-K8s-using-helm.
  6. Go Packages. (2025). kube-prometheus.
  7. GitHub - dotdc. (2026). grafana-dashboards-kubernetes.
  8. Scaleway. (2025). Kubernetes Kapsule cluster monitoring with Prometheus & Grafana.
  9. Mirantis. (2025). How to Set Up Prometheus & Grafana in K8s with Alertmanager & Slack Alerts.
  10. Microsoft Learn. (2025). Using ConfigMap to customize Prometheus metric collection in Azure Monitor.
  11. GitHub - Rurutia1027. (2025). Hands-on-Lab.K8s-Monitoring.

— Editorial Team

Advertisement 728x90

继续阅读