华为云 ECS 实战:基于 Docker Compose 搭建 Prometheus + Grafana 可视化监控大盘
前言
在华为云弹性云服务器(ECS)或 Flexus 应用服务器 L 实例上部署业务系统后,如何实时掌握服务器的 CPU 负载、内存使用率、磁盘 I/O 以及网络带宽波动,是保障服务高可用的关键。除了使用华为云控制台自带的云监控服务(CES)外,许多开发团队还会选择开源领域的黄金搭档 —— Prometheus + Node Exporter + Grafana,搭建一套支持自定义指标采集、历史趋势回溯与高颜值可视化大盘的监控体系。
本文将完整演示在华为云 Ubuntu 22.04 实例上,利用 Docker Compose 一键编排部署这套轻量级监控系统,并配置 Grafana 中文可视化面板。
一、 监控架构说明与目录规划
本方案包含三个核心组件:
- Node Exporter:负责采集宿主机 Linux 系统的各项硬件与内核指标(CPU、内存、磁盘、网络等),对外暴露标准 Metrics 接口。
- Prometheus:负责定时拉取(Pull)Node Exporter 的指标数据,并持久化存储在本地时序数据库中。
- Grafana:负责连接 Prometheus 数据源,通过可视化图表展示实时监控大盘。
首先,在宿主机 /opt/monitoring 目录下创建对应的配置与数据持久化目录:
# 创建监控工作目录及子目录
sudo mkdir -p /opt/monitoring/{prometheus,prometheus_data,grafana_data}
cd /opt/monitoring
# 赋予数据目录容器写入权限(Prometheus 与 Grafana 容器默认使用非 root 用户运行)
sudo chmod -R 777 /opt/monitoring/prometheus_data /opt/monitoring/grafana_data
二、 编写 Prometheus 采集配置文件
创建 /opt/monitoring/prometheus/prometheus.yml 配置文件,定义全局采集间隔(每 15 秒采集一次),并将 Prometheus 自身与宿主机 Node Exporter 纳入监控目标:
sudo tee /opt/monitoring/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# 1. 监控 Prometheus 服务自身状态
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 2. 监控华为云 ECS 宿主机系统指标
- job_name: 'huaweicloud-ecs-node'
static_configs:
- targets: ['node-exporter:9100']
labels:
instance: 'ecs-ubuntu-prod-01'
env: 'production'
EOF
三、 编写 Docker Compose 编排文件并启动服务
接下来创建 /opt/monitoring/docker-compose.yml 文件。为了让 node-exporter 能够准确读取到宿主机的真实硬件信息,我们将宿主机的 /proc、/sys 和根目录 / 以只读方式挂载进容器:
sudo tee /opt/monitoring/docker-compose.yml << 'EOF'
version: '3.8'
services:
node-exporter:
image: prom/node-exporter:latest
container_name: monitor-node-exporter
restart: always
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
expose:
- 9100
prometheus:
image: prom/prometheus:latest
container_name: monitor-prometheus
restart: always
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.enable-lifecycle'
ports:
- "127.0.0.1:9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./prometheus_data:/prometheus
depends_on:
- node-exporter
grafana:
image: grafana/grafana-oss:latest
container_name: monitor-grafana
restart: always
ports:
- "3000:3000"
environment:
- TZ=Asia/Shanghai
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=HuaweiCloud_Grafana_2026!
- GF_DEFAULT_INSTANCE_NAME=HuaweiCloud-Monitor
volumes:
- ./grafana_data:/var/lib/grafana
depends_on:
- prometheus
EOF
参数说明:
--storage.tsdb.retention.time=15d:限制 Prometheus 历史数据仅保留最近 15 天,防止长期运行撑满云硬盘。--web.enable-lifecycle:允许通过 HTTP 请求热重载配置文件,无需重启容器。
执行以下命令一键启动全部监控容器:
sudo docker-compose up -d
# 检查三个容器是否均处于 Up 状态
sudo docker-compose ps
四、 验证采集状态与导入 Grafana 中文监控大盘
1. 验证 Prometheus 数据采集
在终端通过 curl 检查 Prometheus 是否已成功连通 node-exporter:
curl -s http://127.0.0.1:9090/api/v1/targets | grep -o '"health":"up"'
若输出两行 "health":"up",说明宿主机各项性能指标已开始正常入库。
2. 配置华为云安全组并登录 Grafana
- 在华为云控制台 安全组 -> 入方向规则 中,放行
TCP: 3000端口(或通过宿主机 Nginx 反向代理该端口)。 - 在浏览器访问
http://<你的华为云EIP>:3000。 - 输入预设的账号
admin与密码HuaweiCloud_Grafana_2026!登录系统。
3. 添加数据源与一键导入中文面板
-
添加数据源:
- 在左侧菜单点击 Connections (连接) -> Data sources (数据源) -> Add new data source。
- 选择 Prometheus,在
Connection的 URL 栏填入容器内部通信地址:http://prometheus:9090。 - 滚动到底部点击 Save & test,提示绿色成功横幅即可。
-
导入 Node Exporter 中文大盘:
- 在左侧菜单点击 Dashboards (仪表盘) -> New -> Import (导入)。
- 在
Import via grafana.com输入框中填入社区高分中文 Linux 监控模板 ID:8919(或英文经典模板1860),点击 Load。 - 在底部选择刚才创建的 Prometheus 数据源,点击 Import。
导入完成后,即可在浏览器中实时查看华为云 ECS 的 CPU 负载、内存占比、磁盘读写吞吐量以及网卡实时速率曲线。
五、 日常运维实用命令
当后续修改了 prometheus.yml 监控目标后,无需重启容器,直接在宿主机执行以下命令即可热更新配置:
curl -X POST http://127.0.0.1:9090/-/reload
若需查看监控组件占用的系统内存与 CPU 情况,可执行:
sudo docker stats --no-stream monitor-prometheus monitor-grafana monitor-node-exporter
总结
通过 Docker Compose 容器化编排,我们在短短几分钟内就在华为云 ECS 上搭建起了企业级的可视化监控平台。整套组件经过内存与数据保留周期限制后,日常仅占用约 200MB 物理内存,轻量高效,非常适合用于个人开发机与中小型生产服务器的日常可观测性建设。
- 点赞
- 收藏
- 关注作者
评论(0)