CentOS7下搭建Prometheus监控(四)——Prometheus和Grafana集成

接着之前两篇:CentOS7下搭建Prometheus监控(二)——Prometheus监控端配置

CentOS7下搭建Prometheus监控(三)——Kubernetes(K8s)被监控端配置

  Grafana 是一款采用 Go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。

(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。

image

  2)添加Prometheus数据源

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

image

image

image

image

 (5).手动创建仪表盘

  1)创建仪表盘

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

image

image

image

image

   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)

      关注应用实际运行状态,通常由 cAdvisorkubelet 采集。

指标名称说明关键 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

 

image

image

  2)Grafana导入模板

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

image

image

image

  3)最终展示

image

 

posted @ 2026-09-22 21:31  苦逼运维  阅读(4)  评论(0)    收藏  举报