CentOS7下搭建Prometheus监控(四)——Prometheus和Grafana集成
接着之前两篇:CentOS7下搭建Prometheus监控(二)——Prometheus监控端配置
CentOS7下搭建Prometheus监控(三)——Kubernetes(K8s)被监控端配置
(1).参考文献
Grafana官网:https://grafana.com/
Grafana官网文档:https://grafana.com/tutorials/
Grafana官网下载地址:https://grafana.com/grafana/download
Grafana社区开源模板:https://grafana.com/grafana/dashboards
(2).实验环境
2核2G CentOS7.9.2009 192.168.142.121 Prometheus Server+Push Gateway+Node Exporter+Ansible+Grafana
4核2G CentOS7.9.2009 192.168.142.122 Node Exporter+K8s master节点
4核2G CentOS7.9.2009 192.168.142.123 Node Exporter+K8s node1节点
4核2G CentOS7.9.2009 192.168.142.124 Node Exporter+K8s node2节点
所有服务器均已设置阿里云yum源和epel-release源,关闭SELinubx和防火墙。
(3).部署Grafana
部署比较简单,直接从官网上下载二进制安装包,解压后即可使用,也可以像我这样做一个启动服务,这个启动服务是根据官方文档中修改而来。
# 1.解压二进制安装包到指定位置 [root@localhost ~]# tar zxf grafana-enterprise_13.2.1_33191028959_linux_amd64.tar.gz -C /usr/local/ # 2.添加Grafana专用用户 [root@localhost ~]# useradd -r -s /bin/false grafana # 3.设置Grafana文件所有权 [root@localhost ~]# chown -R grafana:users /usr/local/grafana-13.2.1/ # 4.创建Grafana启动服务 [root@localhost ~]# vim /etc/systemd/system/grafana-server.service [Unit] Description=Grafana Server After=network.target [Service] Type=simple User=grafana Group=users ExecStart=/usr/local/grafana-13.2.1/bin/grafana server --config=/usr/local/grafana-13.2.1/conf/grafana.ini --homepath=/usr/local/grafana-13.2.1 Restart=on-failure [Install] WantedBy=multi-user.target # 5.设置Grafana开机自启,并启动Grafana [root@localhost ~]# systemctl enable grafana-server.service [root@localhost ~]# systemctl start grafana-server.service
(4).添加Prometheus数据源
1)将Grafana设置为中文(可选)
访问http://192.168.142.121:3000/,目前Grafana官方已支持中文,设置方法:右上角人头标志-->Profile-->Language设置成“中文(简体)”-->Save preferences。

2)添加Prometheus数据源
连接-->数据源-->添加数据源-->选择Prometheus-->填写Prometheus服务器地址-->保存并测试-->显示成功即可




(5).手动创建仪表盘
1)创建仪表盘
仪表盘-->创建数据面板-->Panel下的加号-->配置可视化(这一步同时可以指定仪表盘名称)-->构建器/代码构建-->保存。右侧可以选择展现形式,包含折线图、面积图-堆叠、面积图-按百分比堆叠、统计、仪表、圆形仪表等多种展示方式,按需选择。




2)K8s常用指标清单
1.节点级指标 (Node Level)
关注集群物理/虚拟资源的健康状况,通常由 node-exporter 采集。
| 指标名称 | 说明 | 关键 PromQL 示例 |
|---|---|---|
| CPU 使用率 | 节点 CPU 繁忙程度 | 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
| 内存使用率 | 可用内存占比(排除缓存) | (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
| 磁盘使用率 | 根分区或数据盘占用 | (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 |
| 磁盘 I/O | 读写吞吐量及延迟 | rate(node_disk_read_bytes_total[5m]) / rate(node_disk_io_time_seconds_total[5m]) |
| 网络流量 | 网卡收发带宽 | sum by(instance) (rate(node_network_receive_bytes_total[5m])) |
| Load Average | 系统负载(1/5/15分钟) | node_load1, node_load5 |
2.容器/Pod 级指标 (Container & Pod Level)
关注应用实际运行状态,通常由 cAdvisor 或 kubelet 采集。
| 指标名称 | 说明 | 关键 PromQL 示例 |
|---|---|---|
| 容器 CPU 使用率 | 相对于 Limit 或 Request 的使用比 | sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod, namespace) |
| 容器内存使用 | 当前 RSS 内存(注意 OOM 风险) | container_memory_working_set_bytes{container!=""} |
| OOM Kill 次数 | ⚠️ 核心告警指标,内存溢出被杀 | increase(kube_pod_container_status_last_terminated_reason{reason="OOMKilled"}[1h]) > 0 |
| 容器重启次数 | ⚠️ 核心告警指标,CrashLoopBackOff | increase(kube_pod_container_status_restarts_total[1h]) > 3 |
| Pod 状态 | Pending/Running/Failed 数量 | kube_pod_status_phase{phase="Pending"} > 0 |
| 网络收发速率 | Pod 级别网络吞吐 | sum(rate(container_network_receive_bytes_total[5m])) by (pod) |
| 文件系统使用率 | 容器内 Ephemeral Storage | container_fs_usage_bytes |
3.K8s 对象与控制平面指标
关注调度、部署和健康检查,由 kube-state-metrics 采集。
| 指标名称 | 说明 | 关键 PromQL 示例 |
|---|---|---|
| Deployment 副本数 | 期望 vs 可用副本 | kube_deployment_spec_replicas vs kube_deployment_status_replicas_available |
| HPA 缩放状态 | 当前副本 vs 最大/最小副本 | kube_hpa_status_current_replicas / kube_hpa_spec_max_replicas |
| PVC 使用率 | 持久卷存储占用 | kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes |
| Job/CronJob 失败 | 定时任务执行失败计数 | kube_job_status_failed > 0 |
| API Server 请求延迟 | 控制平面健康度 | histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le)) |
| etcd Leader 变更 | etcd 集群稳定性 | changes(etcd_server_leader_changes_seen_total[1h]) > 0 |
4.黄金信号 (Golden Signals) 推荐面板
在构建 Grafana Dashboard 时,建议优先展示以下四个维度:
-
-
- Saturation(饱和度):Node CPU/Mem > 80%,Pod Memory 接近 Limit
- Errors(错误):OOMKilled、Pod Restart、Container Waiting、ImagePullBackOff
- Latency(延迟):API Server P99 延迟、Ingress 请求延迟
- Traffic(流量):集群总 QPS、各 Service 入站带宽
-
5.最佳实践建议
-
-
- 必装 Exporter:确保安装了 node-exporter、kube-state-metrics 和 metrics-server(用于 HPA)。
- 区分 Request 与 Limit:CPU 看 Request 利用率判断是否需要扩容;Memory 看 Working Set 对比 Limit 判断 OOM 风险。
- 使用成熟模板:不要从零画图,直接导入社区高质量 Dashboard:
- Kubernetes / Compute Resources / Cluster (ID: 15757)
- Node Exporter Full (ID: 1860)
- Kubernetes Pods Monitoring (ID: 15760)
- 设置 Recording Rules:对高频使用的复杂 PromQL(如 rate(container_cpu_usage_seconds_total[5m]))预计算,避免 Grafana 查询超时。
- 标签过滤:始终加上 namespace、cluster 等标签过滤,防止多集群/多租户环境下数据混淆。
-
⚠️ 注意:不同版本的 kube-state-metrics 和 cAdvisor 指标名可能有差异(如 container_cpu_usage_seconds_total 在某些版本中为 container_cpu_user_seconds_total),请根据实际 Prometheus targets 验证指标名。
(6).Grafana社区开源模板
前往Grafana社区开源模板https://grafana.com/grafana/dashboards下载需要的模板,然后导入到Grafana中。
1)下载开源模板
搜索需要的模板-->点击对应模板进入-->Download JSON


2)Grafana导入模板
右上角的加号-->导入仪表板-->上传仪表板JSON文件-->选择数据源Prometheus-->Import



3)最终展示


浙公网安备 33010602011771号