Grafana 如何可视化 Kubernetes 集群监控面板?

来源:SEO作者:追梦人头衔:草根站长
导读:本期聚焦于追梦人创作的《Grafana 如何可视化 Kubernetes 集群监控面板?》,敬请观看详情。搭建 Kubernetes 集群后,运维人员面对的第一道难题往往不是调度策略,而是如何把分散在 etcd、kubelet、API Server 以及各节点容器的运行状态集中呈现。Grafana 配合 Prometheus 可以将这些指标转换成可读性极强的图表,但很多配置细节被忽略后,面板会出现数据断档或查询超时。本文从 Prometheus 抓取链路、Grafana 数据源接入、核心面板的 PromQL 设计三个层面展开,给出可直接落地的仪表盘构建方案,并说明如何通过 kube-state-metrics 补充资源对象状态,避免只盯着 CPU 和内存而忽视 Pod 重启、节点状态等关键信号。

Grafana 在 Kubernetes 监控体系中的角色不是数据采集器,而是把 Prometheus 已经抓取到的时间序列数据转换为趋势图、单值面板和表格。要让面板真正反映集群健康状态,先要理清两类指标:一类来自 kubelet 内置的 cAdvisor,面向容器与节点的 CPU、内存、文件系统、网络等运行指标;另一类来自 kube-state-metrics,面向 Deployment、StatefulSet、Pod、Node 等资源对象的编排状态,例如期望副本数与当前副本数的差异。只有同时接入这两类数据,面板才不会出现只看到资源消耗却看不到 Pod 频繁重启的盲区。

Grafana 如何可视化 Kubernetes 集群监控面板?

监控数据来源:Prometheus 如何抓取 Kubernetes 指标

Prometheus 在 Kubernetes 环境中的抓取依赖服务发现机制。通过 kubernetes_sd_configs 可以自动发现 Node、Pod、Endpoints 和 Service,无需每次扩容后手动修改配置。以抓取 kubelet 为例,kubelet 默认在 10250 端口暴露指标接口,但该接口需要 TLS 认证,因此通常使用 role: node 并通过 HTTPS 访问。以下配置展示了在 prometheus.yml 中添加 kubelet 与 cAdvisor 的抓取任务:

scrape_configs:
  - job_name: "kubernetes-kubelet"
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - source_labels: [__meta_kubernetes_node_name]
        target_label: node

这段配置中,insecure_skip_verify 仅建议在测试环境使用,生产环境应正确挂载 CA 证书。kubelet 暴露的 /metrics/cadvisor 路径包含容器级数据,而 /metrics 主要提供 kubelet 自身状态,两者可以分别建立抓取任务。对于 kube-state-metrics,则需要通过 Service 暴露的 8080 端口抓取,并使用 role: endpointsrole: pod 来匹配标签,确保在 Deployment 滚动更新时仍然能持续采集。

另一个常见问题是时序数据量过大。如果集群规模超过数百节点,建议设置 scrape_interval: 30s 并开启 scrape_timeout: 20s,同时利用 Prometheus 的 relabel_configs 丢弃不需要的指标前缀,避免存储空间被低价值数据占满。Prometheus 的存储保留时间也需要规划,通常生产数据保留 15 天即可,历史趋势可以交给 Thanos 或 VictoriaMetrics 这类长期存储方案。

Grafana 数据源与 Dashboard 的落地配置

Grafana 连接 Prometheus 通常使用 Server 端访问方式,因为容器网络下 Grafana 与 Prometheus 往往位于同一命名空间或可路由网段。数据源地址建议使用 Kubernetes Service 的 DNS 名称,例如 http://prometheus-server.monitoring.svc:9090。如果 Prometheus 启用了鉴权,可以在数据源配置中附加 HTTP Header,不建议把 token 直接拼在 URL 中。以下是一个使用 Grafana Provisioning 自动创建数据源的示例:

apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus-server.monitoring.svc:9090
    isDefault: true
    editable: false

同时,Dashboard 也可以通过 Provisioning 自动加载。将 JSON 面板文件放入 /etc/grafana/provisioning/dashboards 目录,Grafana 启动时会自动导入,避免手动导入后 Pod 重建导致面板丢失。生产环境中更推荐使用 ConfigMap 挂载 Dashboard JSON,并通过版本控制系统管理面板变更,这样每一次指标口径调整都有记录可查。

在权限控制方面,建议为只读用户创建独立的 Grafana Organization 或使用 Viewer 角色,防止误操作修改面板。对于多个集群的监控,可以在一个 Grafana 中配置多个 Prometheus 数据源,并在每个面板顶部使用 datasource 变量切换,而不是为每个集群重复创建大量面板。

核心监控指标与 PromQL 查询设计

CPU 使用率是最基础的面板之一。容器 CPU 累计值需要先做 rate 计算,再按 Pod 聚合。下面这条 PromQL 计算每个 Pod 在 5 分钟内的 CPU 核心数使用率:

sum(rate(container_cpu_usage_seconds_total{namespace!="",pod!=""}[5m])) by (pod)

该表达式排除了 namespacepod 为空的聚合行,避免把系统级 cgroup 也计入业务负载。如果要计算 CPU 百分比,需要除以节点可分配 CPU 或 Pod 的 request 值。更常见的做法是使用 namespacenode 两重聚合,分别查看命名空间维度和节点维度。

内存方面,container_memory_working_set_bytescontainer_memory_usage_bytes 更接近实际 OOM 判定标准,因为它剔除了 inactive file cache 的影响。Pod 重启频率可以用 kube_pod_container_status_restarts_total 的增量来表示:

increase(kube_pod_container_status_restarts_total{namespace="production"}[1h])

当该值持续大于 0 时,说明对应容器在最近一小时发生了重启,需要结合日志进一步排查。此外,kube_deployment_status_replicas_availablekube_deployment_spec_replicas 的差值可用于判断 Deployment 是否完成滚动更新,若差值长时间不为 0,面板应置为红色并触发告警。

节点健康状况不能只看 CPU 和内存,还应该关注 kube_node_status_condition。该指标中 condition="Ready"status="true" 时为 1,否则为 0。对全部节点的值求和并与节点总数比较,即可判断是否有节点 NotReady。文件系统使用率则可以抓取 node_filesystem_avail_bytesnode_filesystem_size_bytes 的比值,并排除 tmpfsoverlay 等不关心的挂载点。

面板布局与告警联动的最佳实践

一个高可用的 Kubernetes 监控面板不应把上百个图表堆叠在一起。建议按层级组织:第一行放集群总览,包括节点数、命名空间数、Pod 总数和告警数量;第二行放资源消耗 TopN,例如 CPU 占用前 10 的 Pod 和内存占用前 10 的 Pod;第三行放控制面指标,如 API Server 请求延迟、etcd 领导者状态、调度器队列深度。这样值班人员打开面板后,能够快速定位是资源问题还是控制面问题。

告警规则应尽量写在与面板相同的数据源中,而不是依赖外部分散系统。Prometheus 的 rules.yml 中可以定义 alert 规则,并通过 Alertmanager 发送通知。面板上可以叠加 Alert 列表,把 ALERTS 指标用 Stat 或 Table 形式展示,方便直接看到当前活跃告警。阈值设置不能一刀切,例如测试环境 CPU 长期高于 80% 可能是常态,而生产环境超过 70% 就需要关注。

最后要养成定期检查面板数据完整性的习惯。Grafana 面板右上角如果频繁出现 No data,往往不是查询写错,而是 Prometheus 抓取目标失联或指标名称在版本升级后发生了变化。此时可以先在 Grafana 的 Explore 页面用 up{job="kubernetes-kubelet"} 检查抓取状态,再比对 kube-state-metrics 的版本兼容表。合理利用变量模板,例如将 namespacepod 做成带 All 选项的下拉框,能显著减少重复面板数量,也便于不同团队按需过滤。

GrafanaKubernetes监控Prometheus修改时间:2026-08-25 21:19:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。