如何在 Rocky Linux 8.7 上通过 Prometheus 与 Grafana 结合,提升大规模容器环境的监控与性能分析?

在大规模容器环境下(例如 Kubernetes 集群、Docker Swarm 或自定义容器编排平台),实时、可视化和可扩展的监控平台是保障业务连续性和快速响应问题的关键。A5数据本教程面向具备 Linux 和容器基础的运维/DevOps 工程师,使用 Rocky Linux 8.7 作为主机系统,讲解如何部署 Prometheus + Grafana 监控体系,并深入介绍采集、存储、可视化及性能评估方法。


一、方案概览与目标

监控目标

  • 全面采集容器化环境指标(CPU、内存、磁盘、网络、容器生命周期事件等)
  • 支持上万容器实例规模的数据聚合、聚合与查询
  • 支持自定义告警规则并推送至企业级通知系统(如 Slack/钉钉/邮件)
  • 可视化展示关键业务指标与趋势分析

技术栈

工具/组件 版本 作用
Rocky Linux 8.7 基础操作系统
Prometheus 2.48.0(例) 指标采集与时序数据库
Grafana 10.1.5(例) 可视化与告警界面
Node Exporter 1.6.1 主机指标采集
cAdvisor 0.47.0 容器级指标采集
Alertmanager 0.25.0 告警管理
Docker 24.x 容器运行环境
Kubernetes 1.28.x(如有) 容器编排平台(可选)

香港服务器www.a5idc.com硬件配置建议(单 Prometheus 节点)

下例适用于采集 5,000+ 容器节点的中大型监控环境。视实际指标量级扩展 shard 数量。

指标级别 CPU 内存 磁盘 备注
中等负载 8 核 32GB 1TB NVMe SSD 单 Prometheus 实例
高负载 16 核 64GB 2TB NVMe SSD 拆分 Prometheus Shards
Grafana 节点 8 核 16GB 500GB SSD 多用户 Dashboard 支撑
Alertmanager HA 4 核 × 2 8GB × 2 200GB × 2 多副本,避免告警丢失

二、环境准备

1. 基础依赖安装(Rocky Linux 8.7)

bash 复制代码
# 更新系统
sudo dnf update -y
sudo dnf install -y vim git wget unzip curl

# 开启防火墙必需端口
sudo firewall-cmd --add-port=9090/tcp --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

# 关闭 SELinux 只是为了初期部署简化(生产建议保留并配置策略)
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

2. 网络与用户配置

创建监控专用用户:

bash 复制代码
sudo useradd --no-create-home --shell /sbin/nologin prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

三、部署 Prometheus

1. 下载与安装

bash 复制代码
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar -xzf prometheus-2.48.0.linux-amd64.tar.gz
cd prometheus-2.48.0.linux-amd64

sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /usr/local/bin/prometheus /etc/prometheus

2. 配置 Prometheus

编辑 /etc/prometheus/prometheus.yml

yaml 复制代码
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node1:9100','node2:9100'] # 按你的节点替换

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['node1:8080','node2:8080']

将 Prometheus 进程权限设置:

bash 复制代码
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

3. Systemd 启动服务

创建 /etc/systemd/system/prometheus.service

ini 复制代码
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --web.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target

启动并检查:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo journalctl -fu prometheus

四、容器与主机指标采集

1. 安装 Node Exporter(主机基础指标)

bash 复制代码
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz
sudo mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /sbin/nologin nodeusr
sudo chown nodeusr:nodeusr /usr/local/bin/node_exporter

Node Exporter systemd 配置

ini 复制代码
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=nodeusr
Group=nodeusr
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target

2. 安装 cAdvisor(容器级指标)

bash 复制代码
docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach \
  gcr.io/cadvisor/cadvisor:v0.47.0

3. Prometheus 重新载入配置

bash 复制代码
sudo systemctl reload prometheus

访问 http://<IP>:9090/targets 检查抓取状态。


五、部署 Grafana

1. 安装

bash 复制代码
sudo dnf install -y https://dl.grafana.com/oss/release/grafana-10.1.5-1.x86_64.rpm
sudo systemctl enable --now grafana-server

访问 http://<IP>:3000 登录(默认 admin/admin,首次登录需修改密码)。

2. 添加数据源

  1. 在 Grafana 控制台 → Configuration → Data Sources
  2. 选择 Prometheus
  3. URL 填写 http://<Prometheus-IP>:9090
  4. 保存并测试

3. 导入监控 Dashboard

可在 Grafana 官方或社区下载现成的 Dashboard JSON,例如:

  • Node Exporter Full:ID 1860
  • cAdvisor Dashboard:ID 1229

流程

  • Grafana → Create → Import
  • 输入 Dashboard ID 或上传 JSON

六、高级监控与告警

1. 自定义告警规则

在 Prometheus 配置中添加规则文件引用:

yaml 复制代码
rule_files:
  - "/etc/prometheus/alert-rules.yml"

示例规则 /etc/prometheus/alert-rules.yml

yaml 复制代码
groups:
- name: container_alerts
  rules:
  - alert: HighContainerCPU
    expr: sum(rate(container_cpu_usage_seconds_total[2m])) by (container_label_com_docker_swarm_service_name) > 0.8
    for: 5m
    labels:
      severity: "critical"
    annotations:
      summary: "容器 CPU 使用率过高 ({{ $labels.container_label_com_docker_swarm_service_name }})"
      description: "{{ $labels.container_label_com_docker_swarm_service_name }} CPU 5 分钟以上超过 80%"

2. Alertmanager 设置

下载并安装:

bash 复制代码
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
tar -xzf alertmanager-0.25.0.linux-amd64.tar.gz

编辑 /etc/alertmanager/config.yml

yaml 复制代码
global:
  resolve_timeout: 5m

route:
  receiver: 'email-alert'

receivers:
- name: 'email-alert'
  email_configs:
  - to: 'ops@example.com'
    from: 'alertmanager@example.com'
    smtp_smarthost: 'smtp.example.com:587'
    auth_username: 'alert@example.com'
    auth_password: 'securepassword'

启动 Alertmanager

bash 复制代码
systemctl enable --now alertmanager

在 Prometheus 配置中关联 Alertmanager:

yaml 复制代码
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

重启 Prometheus。


七、性能与容量评估

为了帮助理解 Prometheus 在高负载环境下的表现,我们提供一份基准测试数据(示例):

节点数量 抓取间隔 数据点/秒 Prometheus 内存占用 CPU 占用 查询平均响应时间
500 15s 3,333 2.2GB 15% 120ms
2,000 15s 13,333 6.8GB 40% 300ms
5,000 15s 33,333 15.3GB 75% 550ms
10,000 15s 66,666 28.9GB 90% 820ms

分析结论

  • 当抓取频率为默认 15s 时,Prometheus 内存和 CPU 消耗与监控目标呈线性关系
  • 建议使用 Prometheus 联邦(Federation)Sharding 分散负载
  • 高维度查询应利用 Recording Rules 预计算中间指标

八、优化建议

1. 使用 Remote Write

将指标写入长期存储(如 Cortex、Thanos、InfluxDB、ClickHouse)以扩展历史查询范围。

yaml 复制代码
remote_write:
- url: "http://thanos-receiver:9201/api/v1/receive"

2. 分布式架构

对于 10,000+ 节点:

  • 多 Prometheus 实例(按集群/业务分配)
  • Grafana 读写分离与 Cache
  • 使用 TSDB 压缩与 Block TTL

3. 利用 Kubernetes ServiceMonitor

若部署在 Kubernetes:

yaml 复制代码
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: cadvisor-monitor
spec:
  selector:
    matchLabels:
      app: cadvisor
  endpoints:
  - port: http
    interval: 15s

九、常见故障与排查

问题 排查方法 解决建议
Prometheus 抓取失败 Targets 页面查看状态 确认网络连通、端口开放
查询响应缓慢 查看 Prometheus CPU/IO 调整抓取间隔、增加实例 shard
Grafana dashboard 无数据 检查数据源连接、PromQL 语句 刷新数据源、检查标签一致性
告警泛滥 查看告警规则与阈值 优化规则逻辑、增加抑制与分组

十、总结

A5数据通过在 Rocky Linux 8.7 平台上部署 Prometheus + Grafana,可以实现对大规模容器环境的全面、实时监控与性能分析。本方案涵盖了从基础组件安装、指标采集、可视化面板构建、告警系统搭建到性能评估方法的全流程。

实际生产环境中,应结合业务访问模式与指标量级进行合理的分片、联邦部署与远端写入扩展,并持续调优 PromQL 查询与 Recording Rules,以保障监控系统的稳定性与可用性。

如需进一步集成日志(如 ELK/EFK)与追踪(如 Jaeger/OpenTelemetry),可在此基础上拓展,构建统一的 Observability 平台。

相关推荐
橘颂TA8 小时前
【Linux】死锁四条件的底层逻辑:从锁冲突到 STL 组件的线程安全实践(Ⅵ)
linux·运维·服务器·c++·死锁
埃伊蟹黄面8 小时前
ELF深入解剖:从文件头到动态段,图解库的二进制构成
linux·c·
五仁火烧9 小时前
生产环境中配置了接口3000后,不能启动,改成8080后就可以
linux·网络·安全·vue
JiMoKuangXiangQu9 小时前
Linux build:头文件安装
linux·headers_install
lbb 小魔仙9 小时前
【Linux】云原生运维效率提升:Linux 终端工具链(kubectl + tmux + fzf)组合拳教程
linux·运维·云原生
码农小韩9 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
Joren的学习记录9 小时前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
代码游侠10 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
2501_9335130410 小时前
Linux下载离线rpm和依赖包的方法
linux·运维·服务器