免费监控
logo prod

资讯与帮助

深度解析 Kubernetes 监控:Prometheus 与 Grafana 联合应用实战

时间:2025-06-24
编辑:tance.cc

容器监控.png

你是不是也曾遇到过这样的困惑:

  • “我的 Kubernetes 集群已经跑起来了,为什么总感觉性能不如预期?”

  • “服务崩了,日志报错一堆,但我哪里出问题了呢?”

  • “这个 Prometheus 配了好多,Grafana 看了一堆图,还是看不懂,如何有效监控?”

Kubernetes 容器化管理的优点显而易见,但随之而来的问题也是挑战不断——从集群健康、资源使用、Pod 状态到服务依赖,如何全面掌控这些信息?这时候,PrometheusGrafana 就是你手中的武器。

在这篇文章中,我将带你通过实际操作来一步步搭建基于 Prometheus 和 Grafana 的 Kubernetes 监控系统,让你能够实时获取系统的运行状态,快速响应故障,并确保集群的高可用性。

一、为什么要监控 Kubernetes?

Kubernetes 是容器管理的强大工具,但它本身也非常复杂。每个 Pod、容器、节点、服务和应用都可能变得“无声无息”,一旦出了问题,如何定位故障?监控便是唯一能让你看清幕后“真相”的工具。

1.1 集群复杂度增加

Kubernetes 是一个分布式系统,每个 Pod、容器甚至是微服务可能都会有单独的指标。一个简单的服务链路,背后可能涉及到多个容器,节点和网络设备。没有系统性的监控,根本无法掌控全局。

1.2 资源消耗不可见

Kubernetes 的弹性伸缩(Autoscaling)和资源调度机制非常强大,但如果不进行实时监控,过度扩展和资源浪费很容易发生。

1.3 故障排查困难

Kubernetes 的服务发现和自我修复机制固然强大,但也可能在某些情况下,Pod 频繁重启或服务挂掉,而没有合适的告警机制,你甚至不知道发生了什么。

因此,我们需要监控 K8s 的每个环节,从节点、容器、服务到网络,实时跟踪问题的根源。


二、Prometheus 与 Grafana 联合应用:Kubernetes 监控的黄金组合

2.1 为什么选择 Prometheus 和 Grafana?

Prometheus 是 Kubernetes 监控的“心脏”,它的强大之处在于:

  • 多维数据模型:基于时间序列数据,支持丰富的查询语言 PromQL(Prometheus Query Language)。

  • 自动化抓取:能自动从服务中抓取指标,无需人工干预。

  • 高效存储:通过高效的时序数据存储,能够承载大规模的数据流。

Grafana 则是你的“画布”,将 Prometheus 提供的数据进行可视化展示,让复杂的监控数据直观易懂。

  • 灵活的仪表盘:支持多种图表,甚至动态交互式仪表盘。

  • 自动刷新:实时监控,秒级更新数据。

  • 多数据源支持:Grafana 不仅能接入 Prometheus,还能接入 MySQL、Elasticsearch 等多种数据源。

这对组合,Prometheus 负责收集、存储和查询数据,Grafana 负责数据的可视化展示和告警配置,完美解决了 Kubernetes 监控的挑战。


三、搭建 Kubernetes 监控:一步步实战

3.1 安装 Prometheus 和 Grafana

1. 安装 Prometheus

首先,我们需要为 Kubernetes 部署 Prometheus。使用 Helm 安装是最简单的方式。

bash
helm install prometheus prometheus-community/kube-prometheus-stack

这条命令会通过 Helm 安装 Prometheus、Alertmanager、Prometheus Operator 等一系列监控组件。

你可以在浏览器访问 http://<prometheus-service-ip>:9090 来查看 Prometheus 的界面,默认情况下,它会自动发现集群内的所有指标。

2. 安装 Grafana

Grafana 也可以通过 Helm 安装:

bash
helm install grafana grafana/grafana

访问 Grafana 默认地址 http://<grafana-service-ip>:3000,登录时使用默认的 admin/admin 账户。


3.2 配置 Prometheus 作为 Grafana 数据源

在 Grafana 后台配置 Prometheus 数据源,操作如下:

  1. 登录到 Grafana;

  2. 进入 Configuration → Data Sources

  3. 点击 Add data source,选择 Prometheus

  4. 配置 Prometheus 的地址为 http://prometheus-server:9090(或者在 Kubernetes 中使用服务名来访问 Prometheus);

  5. 点击 Save & Test 测试连接是否成功。


3.3 配置 Kubernetes 监控

1. 配置 Prometheus 监控 Kubernetes 指标

Prometheus 会自动通过 kube-state-metricsnode-exportercadvisor 等组件收集 Kubernetes 指标。

你可以在 Prometheus Web UIhttp://localhost:9090)中执行如下查询来测试:

promQL
up{job="kubernetes-node"}

如果返回 1,表示 Kubernetes 节点的监控是正常的。

2. 配置 Grafana 仪表盘

Grafana 提供了多个 Kubernetes 监控的现成模板。你可以去 Grafana Dashboards 官方网站下载模板,导入后就可以开始使用。

例如,输入模板 ID 315 来导入 Kubernetes 集群监控仪表盘模板,适用于实时查看集群和节点状态、Pod 性能、容器资源使用等信息。


四、实战案例:配置 Kubernetes 监控指标

4.1 监控节点资源

一个常见的 Kubernetes 监控场景是监控每个节点的资源使用情况,包括 CPU、内存和磁盘。

Prometheus 查询:

promQL
avg by(node) (rate(container_cpu_usage_seconds_total{container!="",container!="POD"}[5m]))

这条查询会返回每个节点的 CPU 使用率,帮助你发现哪个节点的资源使用过高。

Grafana 配置:

在 Grafana 中,你可以选择图表类型为 Time series,然后输入相应的 Prometheus 查询,显示每个节点的资源消耗趋势。

4.2 监控 Pod 健康状态

Kubernetes 中,Pod 的健康检查至关重要。你可以通过 Prometheus 监控 Pod 的状态,及时发现哪些 Pod 正在崩溃。

Prometheus 查询:

promQL
kube_pod_container_status_restarts_total{pod=~"myapp-.*"}

这条查询会显示 myapp- 前缀的所有 Pod 的重启次数。高频率重启可能意味着应用存在问题。

4.3 监控服务的延迟

通过监控服务的响应延迟,帮助你及时发现哪些服务的性能瓶颈或故障。

Prometheus 查询:

promQL
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="myapp"}[5m])) by (le))

这条查询将返回 http_request_duration_seconds 指标的 95 百分位延迟,帮助你快速识别服务的延迟问题。


五、告警配置:如何避免掉链子?

在 Kubernetes 集群中,如果你仅依赖 Grafana 展示数据而没有配置告警,一旦系统出现问题,你就可能错过报警信号。

5.1 配置告警规则

你可以在 Prometheus 中定义告警规则,例如,当 CPU 使用率超过 90% 时触发告警。

yaml
groups:- name: kubernetes-alerts
  rules:
  - alert: HighCpuUsage
    expr: avg by(node) (rate(container_cpu_usage_seconds_total{container!="",container!="POD"}[5m])) > 0.9
    for: 5m
    annotations:
      description: "Node {{ $labels.node }} CPU usage is high"

5.2 配置 Alertmanager

Alertmanager 是 Prometheus 的告警管理工具。你可以配置它通过邮件、Slack 或其他通知渠道发送告警。这样,你就可以第一时间响应集群中的故障。


六、总结:Kubernetes 监控,从零到一的实现

通过上述配置,你可以为 Kubernetes 集群搭建一套完整的监控系统,包括资源使用监控、Pod 状态监控、延迟监控和告警配置。这不仅能让你实时掌控集群健康,还能确保出现故障时,能够快速定位问题并及时响应。

Kubernetes 是一个复杂的系统,只有在实时监控的帮助下,你才能从容应对各种问题,确保服务的高可用性和稳定性。


客服
意见反馈