从零搭建自动化运维监控平台:阿里云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.安全组
服务器创建好之后,我以为马上就能开始装软件了。结果第一步就卡住了——安全组。
简单来说,阿里云的安全组相当于服务器的防火墙。默认情况下,所有外部访问都是被禁止的。你需要在控制台手动“放行”特定端口,服务才能被访问到。
| 端口 | 用途 |
|---|---|
| 22 | SSH远程连接服务器 |
| 9100 | Node Exporter指标采集 |
| 9090 | Prometheus Web界面 |
| 3000 | Grafana可视化面板 |
配置完成以后,安全组规则长这样:
踩坑提醒:我第一次配置的时候,把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.rpm2、启动:
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% 触发告警 | ✅ 已配置 |
从一台"裸奔"的服务器,到拥有完整的监控、告警、可视化体系——这个项目,成了。