从零搭建自动化运维监控平台:阿里云ECS + Prometheus + Grafana 实战指南

📅 2026/7/9 12:06:30 👁️ 阅读次数 📝 编程学习
从零搭建自动化运维监控平台:阿里云ECS + Prometheus + Grafana 实战指南

从零搭建自动化运维监控平台:阿里云ECS + Prometheus + Grafana 实战指南

文章目录

  • 前言
  • 一、为什么我们要自己搭建监控?
  • 二、环境准备与“第一道坎”
    • 1.选服务器
    • 2.安全组
    • 3.登录服务器
  • 三、部署 Node Exporter —— 监控的“眼睛”
    • 1、什么是 Node Exporter?
    • 2、开始安装
    • 3、验证是否生效
  • 四、部署 Prometheus —— 监控的“大脑”
    • 1、为什么需要 Prometheus?
    • 2、开始安装
    • 3、开始安装
    • 4、配置告警规则(进阶)
  • 五、部署 Grafana —— 让数据说话
  • 总结

第一部分:为什么我们要自己搭建监控?
第二部分:环境准备与“第一道坎”
第三部分:手把手部署
第四部分:进阶配置与锦上添花
第五部分:总结与价值升华

前言

本文详细记录了我在阿里云ECS上,从零搭建一套自动化运维监控平台的全过程。

如果你也想实现服务器CPU、内存、磁盘、网络的实时监控,并且配置告警规则,这篇文章可能正是你需要的。

文章没有复杂的理论,只有一步步的操作命令和我在实践中遇到的坑,希望能帮你节省时间。


一、为什么我们要自己搭建监控?

没有监控,到底有多难受?

痛点一:服务器状态是个“黑盒”

我只知道服务器在运行,但它跑得累不累、负载高不高,完全没概念。就像开车没有仪表盘,只能凭感觉猜什么时候该加油。

痛点二:出了问题全靠“玄学”排查

网站慢了,先重启一下试试;不行,看看日志;再不行,问问群里有没有大佬遇到过。整个过程全靠猜,毫无效率可言。

痛点三:问题发现永远慢半拍

用户不投诉,我就不知道出事了。半夜服务器挂了,可能第二天早上才有人发现,白白损失了几个小时的业务。


基于这些痛点,我给这个项目定了三个核心目标

能看见——服务器CPU、内存、磁盘、网络,所有关键指标一目了然

能预警——CPU超过80%就主动通知我,不用等用户投诉

成本低——用300元免费额度搞定,毕竟还是学生/新手

一番调研后,我锁定了这套技术组合:Prometheus + Grafana + Node Exporter。为什么选它们?一句话概括:

Node Exporter:轻量级探针,负责“采集数据”

Prometheus:时序数据库,负责“存储和查询数据”

Grafana:可视化平台,负责“展示数据”

目标明确了,方案也定了,接下来就是动手。不过说实话,过程远比我想象的曲折——光是让Prometheus成功启动,就折腾了我快一个小时。

下面我就把完整的搭建过程和踩过的坑记录下来,希望能帮你避开我走过的弯路。


二、环境准备与“第一道坎”

1.选服务器

选服务器,我纠结了10分钟
方案定了,接下来就是动手。第一步当然是搞一台服务器。

我是刚毕业没多久的学生,预算有限。好在阿里云有免费试用计划,新用户或者学生认证之后,能领到300元的抵扣额度,有效期3个月。对搭建一个监控平台来说,完全够用了。

最终我选了这个配置:

配置项 选择
实例规格 通用算力型 u1(2核 vCPU,4GiB 内存)
操作系统 Alibaba Cloud Linux 3.2104 LTS 64位
地域 (选择离家近的)
带宽 100Mbps(峰值)
试用额度 300元,约可用523小时

说个选型小插曲:其实一开始我图便宜想选“经济型e实例”,但后来了解到它的CPU是“非绑定”调度模式,性能会受邻居影响。监控平台讲究的就是稳定,万一数据采集延迟或丢失,就失去意义了。所以多花了点额度,选了性能更有保障的“通用算力型u1”。

操作系统方面,我选了阿里云自研的 Alibaba Cloud Linux 3。原因有两个:一是它针对阿里云ECS做了深度优化,性能更好;二是写在简历上比写“Ubuntu”更亮眼,能体现对云原生操作系统的熟悉程度。


2.安全组

服务器创建好之后,我以为马上就能开始装软件了。结果第一步就卡住了——安全组。

简单来说,阿里云的安全组相当于服务器的防火墙。默认情况下,所有外部访问都是被禁止的。你需要在控制台手动“放行”特定端口,服务才能被访问到。

端口用途
22SSH远程连接服务器
9100Node Exporter指标采集
9090Prometheus Web界面
3000Grafana可视化面板

配置完成以后,安全组规则长这样:

踩坑提醒:我第一次配置的时候,把SSH(22端口)的授权对象设成了 0.0.0.0/0(即允许全世界访问)。结果第二天一看,日志里密密麻麻全是暴力破解的记录,吓出一身冷汗。

后来赶紧改成了 我的IP/32(只允许我自己的电脑访问),世界瞬间清净了。

建议:22端口一定要限制来源IP,其他三个服务端口可以开放给 0.0.0.0/0,因为Grafana和Prometheus本身有账号密码保护。


3.登录服务器

安全组配置好后,打开主机终端,执行:

sshroot@你的公网IP

输入密码,看到 [root@你的主机名 ~]# 这个提示符,就说明成功登录了。

到这里,环境准备才算真正完成。接下来,开始安装真正的监控组件。


三、部署 Node Exporter —— 监控的“眼睛”

1、什么是 Node Exporter?

在开始敲命令之前,先简单说下 Node Exporter 是干什么的。

你可以把它理解成一个数据采集探针。它负责收集服务器的各种运行数据——CPU在忙什么、内存用了多少、磁盘还剩多少空间、网络流量有多大——然后把这些数据整理成 Prometheus 能读懂格式,等着 Prometheus 来拉取。

打个比方:Node Exporter 就像是一个勤劳的“数据采集员”,每天把服务器的各种指标记录下来,整理成报表,放在一个固定的地方(9100端口),等着数据分析师(Prometheus)来取。

2、开始安装

第一步:创建专用用户
出于安全考虑,不建议直接用 root 用户运行 Node Exporter。我们创建一个专门用来运行它的系统用户:

useradd--system--shell/bin/false node_exporter

说明:–system 表示创建系统用户,–shell /bin/false 表示不允许该用户登录系统,最小化权限,更安全。

第二步:下载安装包

cd/rootwgethttps://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz

踩坑提醒:我第一次执行 wget 的时候,发现下载速度非常慢,只有几十KB每秒。后来换成了国内镜像源,速度瞬间上来了。

国内用户可以用这个加速下载:

wgethttps://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/node_exporter/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz

第三步:解压并安装

tar-xvfnode_exporter-1.8.1.linux-amd64.tar.gzcpnode_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/

第四步:配置 systemd 服务

为了让 Node Exporter 在后台稳定运行,并且开机自启,我们把它配置成系统服务:

cat>/etc/systemd/system/node_exporter.service<<'EOF' [Unit] Description=Node Exporter [Service] User=node_exporter Group=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target EOF

第五步:启动并验证

cat>/etc/systemd/system/node_exporter.service<<'EOF' [Unit] Description=Node Exporter [Service] User=node_exporter Group=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target EOF

看到 active (running) 就表示 Node Exporter 启动成功了。

3、验证是否生效

在浏览器访问:http://你的公网IP:9100/metrics

你会看到一大段类似这样的数据:


看到这些密密麻麻的数据,说明 Node Exporter 正在正常工作,你的服务器各项指标已经在被采集了。Node Exporter 就像一只不知疲倦的眼睛,时刻盯着服务器的运行状态,默默地把数据准备好。


四、部署 Prometheus —— 监控的“大脑”

1、为什么需要 Prometheus?

Node Exporter 已经采集到了数据,但它们只是散落在9100端口上的一堆文本。我们需要一个工具把它们存储起来,并且能随时查询。

Prometheus 就是干这个的。

它是一个专门做监控数据存储和查询的时序数据库,也是云原生监控的事实标准。简单来说:

Node Exporter 负责“采数据”

Prometheus 负责“存数据”和“查数据”

打个比方:Node Exporter 是超市里的理货员,把商品(服务器指标)摆在货架上;Prometheus 是仓库管理员,定时来把这些商品登记入库,后面你想查什么,直接找他。

2、开始安装

第一步:下载Prometheus

cd/rootwgethttps://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz

国内加速下载:

wgethttps://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz

第二步:解压并移动

tar-xvfprometheus-2.54.0.linux-amd64.tar.gzmvprometheus-2.54.0.linux-amd64 /opt/prometheus

第三步:配置 Prometheus(⚠️ 这里是重点)

Prometheus 需要知道去哪里采集数据,这个信息在配置文件里定义。创建配置文件:

cat>/opt/prometheus/prometheus.yml<<'EOF' global: scrape_interval: 15s scrape_configs: - job_name: "node_exporter" static_configs: - targets: ["localhost:9100"] EOF

这个配置的意思是:

scrape_interval: 15s —— 每15秒采集一次数据

job_name: “node_exporter” —— 给这个采集任务起个名字

targets: [“localhost:9100”] —— 去本机的9100端口拉取数据

⚠️ 我在这里踩了一个大坑

Prometheus 的配置文件是 YAML 格式,它对缩进极其敏感。我第一次写的时候,把 scrape_configs 写在了 global 下面,缩进也不对,结果启动一直报错:

Error loading config: yaml: line4: did notfindexpected key

花了大半个小时才排查出来——原来是缩进问题。

这里有一组关键对照,建议收藏:

global:# 顶层(0空格)scrape_interval: 15s# 缩进2空格scrape_configs:# 顶层(0空格),与global平级- job_name:"xxx"# 缩进2空格static_configs:# 缩进4空格- targets:[]# 缩进6空格

所以写 YAML 的时候,宁可多检查几遍缩进,也不要像我一样用肉眼硬看。

第四步:配置 systemd 服务

cat>/etc/systemd/system/prometheus.service<<'EOF' [Unit] Description=Prometheus [Service] User=root ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data [Install] WantedBy=multi-user.target EOF

**第五步:**启动并验证

systemctl daemon-reload systemctl start prometheus systemctlenableprometheus systemctl status prometheus

看到 active (running) 表示启动成功。

3、开始安装

方法一:浏览器验证
访问 http://你的公网IP:9090

如果能打开 Prometheus 的 Web 界面,就说明服务正常运行了。

方法二:检查 Targets 状态(这一步很关键)
在 Prometheus 界面顶部点击 Status → Targets

你会看到一个 node_exporter 任务,State 列显示为 UP(绿色)

看到绿色的 UP,说明 Prometheus 已经成功从 Node Exporter 采集到数据了——监控数据流全线打通!

如果显示 DOWN:检查以下几点:

Node Exporter 是否在运行:systemctl status node_exporter

9100 端口是否开放:curl http://localhost:9100/metrics

配置文件中的 targets 地址是否正确

4、配置告警规则(进阶)

到这里,监控数据已经流通了,但还缺一个关键能力——告警。我们希望当 CPU 使用率超过 80% 时,系统能主动通知我们。

首先创建告警规则文件:

cat>/opt/prometheus/alerts.yml<<'EOF' groups: - name: node_alerts rules: - alert: HighCPUUsage expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 5m labels: severity: warning annotations: summary: "CPU 使用率过高" description: "服务器 CPU 使用率已超过 80%,当前值: {{ $value }}%" EOF

这个规则的意思是:如果 CPU 使用率持续 5 分钟超过 80%,就触发告警。

然后修改 Prometheus 主配置文件,让 Prometheus 加载这个规则:

cat>/opt/prometheus/prometheus.yml<<'EOF' global: scrape_interval: 15s rule_files: - "alerts.yml" scrape_configs: - job_name: "node_exporter" static_configs: - targets: ["localhost:9100"] EOF

重启 Prometheus 使配置生效:

systemctl restart prometheus

然后在浏览器访问 http://你的公网IP:9090/alerts,就能看到刚刚创建的告警规则了。


五、部署 Grafana —— 让数据说话

为什么需要 Grafana?
数据有了,存储有了,但都是枯燥的数字。我们需要一个工具把这些数字变成直观的图表和仪表盘。

Grafana 就是干这个的。

安装步骤
1、安装:

yuminstall-yhttps://dl.grafana.com/oss/release/grafana-11.2.0-1.x86_64.rpm

国内加速:

wgethttps://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-11.2.0-1.x86_64.rpm yuminstall-y./grafana-11.2.0-1.x86_64.rpm

2、启动:

systemctl start grafana-server systemctlenablegrafana-server systemctl status grafana-server

配置 Grafana

登录
浏览器访问 http://你的公网IP:3000,默认账号密码都是 admin,首次登录强制修改密码。

添加数据源
左侧齿轮 ⚙️ → Data sources → Add data source → 选择 Prometheus → URL 填 http://localhost:9090 → Save & Test,看到绿色提示即成功。

导入监控大屏
左侧 + → Import → 输入模板 ID 8919 → Load → 选择 Prometheus 数据源 → Import

效果展示

模板 8919 包含了 CPU、内存、磁盘、网络、系统负载等所有核心指标,页面专业、布局清晰,数据实时刷新。

验证告警
访问 http://你的公网IP:9090/alerts,可以看到 CPU 告警规则。当 CPU 持续高于 80% 时会自动触发。


总结

回顾一下我们完成的工作:

组件作用状态
Node Exporter采集服务器指标✅ 运行中
Prometheus存储查询数据 + 告警✅ 运行中
Grafana数据可视化展示✅ 运行中
监控大屏6 大类指标实时展示✅ 已导入
告警规则CPU > 80% 触发告警✅ 已配置

从一台"裸奔"的服务器,到拥有完整的监控、告警、可视化体系——这个项目,成了。