前面如果你已经大概知道了:
- Prometheus 是用来采集和查询指标的
- Grafana 是用来把指标画成图的
那下一步最自然的问题就是:
我到底怎么把它们真的跑起来?
这篇文章我不准备讲得太虚,我会按“你现在就想在一台 Linux 服务器上动手搭起来”的思路来写。
目标很简单:
- 让 Prometheus 抓到一台 Linux 主机的指标
- 再让 Grafana 把这些指标显示出来
如果你想在一台自己的 Linux 机器上练手,这篇会比较适合直接照着做。
先把这三个项目的仓库放在这里,后面你要查版本、看文档、翻 release 都会更方便:
这篇文章要做的事
我们先只做最基础的一条链路:
- 一台 Linux 服务器
node_exporterPrometheusGrafana
这里我默认你手上已经有一台 Linux 机器,比如:
- Debian / Ubuntu
- CentOS / Rocky / AlmaLinux
- Arch / CachyOS
- 或者一台 VPS / 家里的 Linux 虚拟机
先理解一下这三者的关系
在真正开始之前,先把关系捋顺,不然后面很容易边装边乱。
node_exporter
负责把系统指标暴露出来。
比如:
- CPU
- 内存
- 磁盘
- 网络
- load
Prometheus
负责定时去抓 node_exporter 提供的指标,然后存成时间序列。
Grafana
负责把 Prometheus 里的数据画成图表。
你可以先把它们理解成这样:
node_exporter:指标提供者- Prometheus:指标仓库
- Grafana:指标展示层
第一步:在目标服务器上部署 node_exporter
这是最基础的一步。
如果你只想先搭出最小监控闭环,那 node_exporter 基本就是最好的起点。
下载并解压
以 Linux x86_64 为例:
cd /tmpwget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-1.9.1.linux-amd64.tar.gztar -xzf node_exporter-1.9.1.linux-amd64.tar.gzcd node_exporter-1.9.1.linux-amd64版本号以后可能会变,你可以去 GitHub Releases 页面看最新版本。
直接运行测试
./node_exporter默认它会监听:
0.0.0.0:9100这时候你可以在服务器本机测试:
curl http://127.0.0.1:9100/metrics | head如果能看到一堆以 node_ 开头的指标,说明它已经正常工作了。
第二步:把 node_exporter 做成 systemd 服务
如果只是临时试试,前面那一步就够了。
但如果你想长期用,最好还是做成 systemd 服务。
创建用户
useradd --no-create-home --shell /usr/sbin/nologin node_exporter移动二进制文件
cp ./node_exporter /usr/local/bin/node_exporterchown node_exporter:node_exporter /usr/local/bin/node_exporter写 systemd 服务文件
创建:
/etc/systemd/system/node_exporter.service内容例如:
[Unit]Description=Prometheus Node ExporterAfter=network.target
[Service]User=node_exporterGroup=node_exporterType=simpleExecStart=/usr/local/bin/node_exporterRestart=on-failure
[Install]WantedBy=multi-user.target启动并设置开机自启
systemctl daemon-reloadsystemctl enable --now node_exportersystemctl status node_exporter --no-pager如果状态是 active (running),说明这一步已经完成。
第三步:部署 Prometheus
Prometheus 可以装在同一台机器,也可以装在另一台机器。
如果你只是练手,最简单的方式就是先装在同一台机器上。
下载并解压
cd /tmpwget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-3.4.0.linux-amd64.tar.gztar -xzf prometheus-3.4.0.linux-amd64.tar.gzcd prometheus-3.4.0.linux-amd64最小配置文件
编辑 prometheus.yml,核心内容类似这样:
global: scrape_interval: 15s
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['127.0.0.1:9090']
- job_name: 'node' static_configs: - targets: ['127.0.0.1:9100']意思其实很直白:
- Prometheus 也监控自己
- Prometheus 去抓本机的
node_exporter
直接运行测试
./prometheus --config.file=prometheus.yml然后访问:
http://你的服务器IP:9090如果能打开 Prometheus 界面,说明它已经起来了。
先查一个最基础的指标
在 Prometheus 页面里查:
up如果你看到:
- Prometheus 自己是
1 node这个 target 也是1
说明采集链路已经通了。
第四步:把 Prometheus 做成 systemd 服务
这一段我这次不省略了,因为对新手来说,很多教程刚好就是省在这里,结果你手动跑通了,第二天机器一重启就没了。
1)创建用户和目录
useradd --no-create-home --shell /usr/sbin/nologin prometheusmkdir -p /etc/prometheusmkdir -p /var/lib/prometheuschown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus2)复制文件
假设你现在还在刚才解压出来的 Prometheus 目录里:
cp ./prometheus /usr/local/bin/prometheuscp ./promtool /usr/local/bin/promtoolcp ./prometheus.yml /etc/prometheus/prometheus.ymlchown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtoolchown prometheus:prometheus /etc/prometheus/prometheus.yml3)创建 systemd 服务文件
创建:
/etc/systemd/system/prometheus.service内容例如:
[Unit]Description=PrometheusAfter=network.target
[Service]User=prometheusGroup=prometheusType=simpleExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.listen-address=0.0.0.0:9090Restart=on-failure
[Install]WantedBy=multi-user.target4)启动并设置开机自启
systemctl daemon-reloadsystemctl enable --now prometheussystemctl status prometheus --no-pager如果状态是 active (running),并且你还能正常打开 9090 页面,那说明 Prometheus 这一层已经稳定下来了。
第五步:部署 Grafana
Grafana 的安装方式很多。
如果你用的是 Debian / Ubuntu,我更建议优先用官方软件源安装,这也是官方更推荐的方式之一。这样后面升级和维护都会更顺手。
Debian / Ubuntu 通过官方软件源安装
先安装必要工具:
apt-get updateapt-get install -y apt-transport-https software-properties-common wget添加 Grafana 的 GPG key:
mkdir -p /etc/apt/keyringswget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor -o /etc/apt/keyrings/grafana.gpg添加软件源:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list更新索引并安装:
apt-get updateapt-get install -y grafana装完以后启动:
systemctl enable --now grafana-serversystemctl status grafana-server --no-pager默认端口通常是:
3000然后访问:
http://你的服务器IP:3000第一次登录默认账号一般是:
- 用户名:
admin - 密码:
admin
登录后它通常会要求你修改密码。
第六步:在 Grafana 里添加 Prometheus 数据源
进入 Grafana 后,基本流程是:
- 打开 Data Sources
- 选择 Prometheus
- 填 Prometheus 地址
如果 Grafana 和 Prometheus 在同一台机器,通常可以填:
http://127.0.0.1:9090保存并测试。
如果显示连接成功,说明:
- Grafana 已经能读到 Prometheus
- 下一步就可以做 dashboard 了
第七步:导入一个现成的 Node Exporter Dashboard
这是我最推荐新手做的事。
不要一开始就自己手搓面板。
先导入一个成熟模板,你会更快进入状态。
Grafana 社区里有很多现成 dashboard,最常见的就是 Node Exporter 主机监控模板。
你可以在 Grafana 官方 dashboard 网站搜:
Node Exporter Full
导入后选中你的 Prometheus 数据源,Grafana 就会自动把这些图表和数据对应起来。
这时候你通常就能看到:
- CPU
- 内存
- 磁盘
- 网络流量
- load average
- 文件系统使用率
都开始正常显示了。
到这一步,你其实已经完成了第一套监控闭环
链路就是:
node_exporter暴露主机指标- Prometheus 抓这些指标
- Grafana 把它们画出来
对新手来说,这已经是一个很完整、而且很有成就感的起点了。
你接下来最适合做的几件事
如果你已经把这套东西跑起来了,下一步可以继续做这些:
1)熟悉几个基础指标
例如:
upnode_cpu_seconds_totalnode_memory_MemAvailable_bytesnode_filesystem_avail_bytesnode_load1
2)观察一天的趋势
不要只盯着刚部署成功那一刻。
更有价值的是:
- 白天和晚上有什么差异
- 某个服务启动时资源变化如何
- 磁盘是不是一直在慢慢变满
3)试着自己加一个 Panel
哪怕只是:
- 复制一个现有图表
- 改一个查询
- 改个标题
这个过程都会帮助你更快理解 Grafana 和 Prometheus 的关系。
新手最常见的坑
坑 1:Prometheus 能起来,但抓不到 node_exporter
这种情况一般先查:
node_exporter是否真的在监听 9100- Prometheus 配置里的 target 写得对不对
- 防火墙有没有拦
坑 2:Grafana 能打开,但看不到数据
这时候优先检查:
- Prometheus 数据源是否添加成功
- Prometheus 里
up是否正常 - Dashboard 绑定的是不是正确的数据源
坑 3:第一次看到很多图,但不知道看什么
这是正常的。
刚开始不用想“我要做很厉害的监控分析”,你只要先看懂:
- CPU 有没有异常波动
- 内存是不是稳定上升
- 磁盘是不是在持续减少
这就已经很有用了。
如果你现在准备自己练手
那我会建议你按这个顺序做:
- 先部署
node_exporter - 再部署 Prometheus
- 确认
up能查到 - 再装 Grafana
- 导入一个 Node Exporter Dashboard
先别急着监控太多服务。
只要把“主机监控”这一条链路跑顺,你后面再监控 Docker、Nginx、MySQL、PostgreSQL,都只是继续往上加东西。
写在最后
Prometheus + Grafana 这套东西,第一次接触时确实容易觉得名字很多、组件很多。
但如果你把它拆开看,就会发现其实并不复杂:
node_exporter负责提供指标- Prometheus 负责抓和存
- Grafana 负责画图
对新手来说,最重要的不是一下子学全,而是先把第一套闭环搭出来。
只要你能在一台机器上看到:
- CPU 曲线
- 内存曲线
- 磁盘曲线
那你对监控体系的理解就已经不再停留在概念层了。
这一步一旦走通,后面学告警、学 PromQL、学更多 exporter,都会容易很多。