Prometheus跨主机监控实操:Node Exporter部署、告警规则与远程抓取

前言

很多人在刚接触Prometheus时,习惯先在同一台机器上完成测试:Prometheus自己跑,Exporter也跑在本机,访问localhost:9100就能看到指标。但真实环境里,监控系统通常不会和业务服务器混在一起。

更常见的做法,是让一台独立主机作为监控中心,专门运行Prometheus和Alertmanager;其他Linux服务器只部署轻量级的Node Exporter,把CPU、内存、磁盘、网络等系统指标暴露出来,由Prometheus定时抓取。

这样做的好处很明显。监控主机和业务主机职责分离,资源占用更清晰,后续扩展多台服务器也更方便。哪台机器异常、哪台机器负载升高,都可以集中在Prometheus里查看,而不是一台台登录服务器手动排查。

本文将以两台CentOS 7虚拟机为例,演示如何在被监控主机上安装Node Exporter、注册systemd服务、开放9100指标端口,再回到Prometheus主机中配置scrape_configs,让监控主机成功抓取另一台Linux服务器的系统指标。

后面还会继续配置基础告警规则,对CPU和内存使用率进行监控。如果Prometheus和被监控主机不在同一网络中,本文也会通过 cpolar 将Node Exporter的9100端口映射到公网,让跨网络远程采集也能跑通。

1.Centos7安装node_exporter实现监控部署

安装前提:两台虚拟机(一台监控另一台数据)

  • 监控主机ip:192.168.42.140
  • 被监控主机ip:192.168.42.145

监控主机需要安装:

  • prometheus
  • alertmanager

被监控主机需要安装:

  • node_exporter

安装prometheus和alertmanager可以去cpolar官网参考这个两篇教程:《监控不再局域网!Cpolar 让 Prometheus 走出内网限制!》

《告别宕机!零基础搭建服务器监控告警系统!小白也能学会!》

被监控主机使用命令安装node_exporter:

shell 复制代码
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz

下载完后,解压:

shell 复制代码
tar xvfz node_exporter-1.2.0.linux-amd64.tar.gz

将名为 node_exporter-1.2.0.linux-amd64 的目录,移动到 /opt 目录下,并重命名为 node_exporter:

shell 复制代码
 mv node_exporter-1.2.0.linux-amd64 /opt/node_exporter

使用 vi 编辑器,创建或修改一个 systemd 服务配置文件,以便将 node_exporter 注册为一个系统服务,实现开机自启、状态管理(如 start/stop/status)等功能:

shell 复制代码
sudo vi /etc/systemd/system/node_exporter.service

将 node_exporter 注册为一个 Linux 系统服务,以专用用户身份运行,确保在网络就绪后自动启动,并支持通过 systemctl 命令进行管理:

shell 复制代码
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/opt/node_exporter/node_exporter

[Install]
WantedBy=default.target

创建一个名为 node_exporter 的系统用户,不创建家目录、不允许登录,专用于运行 node_exporter 服务:

shell 复制代码
useradd --no-create-home --shell /bin/false node_exporter

通知 systemd 重新加载所有服务配置文件:

shell 复制代码
 systemctl daemon-reload
 systemctl enable node_exporter

启动后,ip+9100即可启动node_exporter:

2.Prometheus配置node_exporter

进入prometheus的安装目录,编辑prometheus.yml:

shell 复制代码
vi prometheus.yml

加入被监控主机ip+端口,如下,注意格式(不然无法启动成功):

shell 复制代码
      - targets: ["192.168.42.145:9100"]
        labels:
          app: "node_exporter"

重启Prometheus:

shell 复制代码
systemctl restart prometheus

prometheus 成功抓取了node_exporter指标数据:

测试了一下,若是未启动端口,是无法成功抓取的!

接下来,我们利用内网穿透工具cpolar将 node_exporter 的 9100 端口安全暴露至公网,实现远程可视化监控。

3.配置alertmanager监控主机的数据

配置alertmanager告警:

进入prometheus的安装目录,编辑prometheus.yml:

shell 复制代码
vi prometheus.yml

如图填写:

编辑3.yml添加下面信息监控192.168.42.145的内存和CPU使用率,超过10%就告警:

shell 复制代码
groups:
  - name: node-alerts
    rules:
      # CPU 使用率 > 10% 持续10s
      - alert: 高CPU使用率
        expr: 100 - (avg by (instance, job) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 10
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "高CPU使用 {{ $labels.instance }}"
          description: "CPU大于10% (current value: {{ $value }}%) 超过10s"

      # 内存使用率 > 10%
      - alert: 内存使用率
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 10
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "内存使用率过高 {{ $labels.instance }}"
          description: "内存使用率大于10% (current value: {{ $value }}%) 超过10s"

重启Prometheus:

shell 复制代码
systemctl restart prometheus

登到prometheus网页后,可以看到我们的告警添加成功啦:

告警数据也成功显示啦:

这样我们成功利用node_exporter监控到了另一台主机的数据:

4.安装cpolar随时随地开发(被监控主机安装)

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

shell 复制代码
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://192.168.42.145:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

5.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:

  • 隧道名称:可自定义,本例使用了:node_exporter,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:9100

  • 域名类型:随机域名

  • 地区:选择China TOP

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

6.将node_exporter暴露给Prometheus进行远程抓取

返回到监控主机,编辑prometheus配置文件:

shell 复制代码
vi prometheus.yml

Prometheus可以通过1a0f75b.r2.cpolar.top这个公网地址访问到运行在192.168.42.145:9100的node_exporter服务,从而抓取系统指标。

shell 复制代码
      - targets: ["1a0f75b.r2.cpolar.top"]
        labels:
          app: "node_exporter"

重启Prometheus:

shell 复制代码
systemctl restart prometheus

登到prometheus网页后,可以看到我们的抓取成功:

7.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Vip,然后设置一个二级子域名名称,我这里演示使用的是nodee,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到所要配置的隧道node_exporter,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China TOP

点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的node_exporter页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

至此,我们完成了远程服务器监控搭建。

结尾

完成部署后,Prometheus就可以从独立监控主机上持续抓取另一台Linux服务器的系统指标。Node Exporter负责采集主机状态,Prometheus负责定时拉取、存储和计算,Alertmanager则可以继续承担告警通知。

这套方案的价值,不只是让Prometheus多看到一个目标,而是建立起"监控中心 + 被监控节点"的基本架构。后续无论新增几台服务器,都可以按同样方式部署Node Exporter,再把目标地址加入Prometheus配置中统一管理。

配置告警规则后,CPU、内存等基础指标就不再只是页面上的数字。当资源使用率超过阈值并持续一段时间,Prometheus就可以触发告警,为后续接入邮件、企业微信、飞书或其他通知渠道打基础。

配置 cpolar 后,即使被监控主机处在内网环境,也可以把Node Exporter的指标端口映射成公网地址,供远程Prometheus抓取。随机域名适合测试,固定二级子域名更适合长期监控使用。

需要注意的是,Node Exporter暴露的是主机系统指标,公网访问时不建议随意公开地址。更稳妥的做法,是结合固定域名、访问控制和必要的网络限制来使用。Node Exporter负责采集,Prometheus负责分析,cpolar负责补上跨网络访问入口,当这几部分组合起来以后,跨主机监控就从实验环境走向了更接近真实运维的架构。

相关推荐
javajenius2 小时前
Masslynx 4.1安装包免费下载及详细安装教程
java·服务器·前端·其他
JZC_xiaozhong4 小时前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
ljs6482739514 小时前
Linux 实用命令:环境变量、文件传输、压缩解压、跨服务器传文件
linux·运维·服务器
hehelm4 小时前
Linux网络编程—HTTP静态文件服务器
linux·服务器·开发语言·网络·c++
蓝狐社5 小时前
一张被低估的芯片版图——中兴通讯
运维·服务器
网络小白不怕黑5 小时前
13.SSH服务相关配置
服务器·网络·ssh
Jtti5 小时前
站群服务器多IP能不能分散DDoS攻击流量?
服务器·tcp/ip·ddos
素心如月桠5 小时前
windows系统使用https://lnmp.org/的LNMP一键安装包,来打开我的服务器Linux
linux·运维·服务器
运维大师6 小时前
【Linux运维极简教程】03-用户与用户组管理
linux·运维·服务器