Prometheus做监控,默认情况下监控机和被监控目标要能联通。它的模型是"拉",不是"推"------监控机主动去抓目标机器的数据,目标机器只需要开放HTTP接口就行。
这个模型在单台机器上好理解,问题是:生产环境里监控机通常不装在同一台被监控的服务器上。原因也很直接------监控本身不应该依赖被监控目标,万一目标挂了监控还在,两边独立运行才合理。
所以场景是这样的:监控主机有Prometheus,被监控主机有Node Exporter。两台机器在同一个局域网或者通过网络能通,监控主机配置被监控主机的IP和端口,Prometheus定时去抓。

文章目录
这篇文章解决的核心问题就是:这两台机器之间的连通性怎么配,Prometheus的配置文件怎么写,cpolar在内网穿透的场景下怎么让Prometheus穿过公网抓到另一台内网机器的数据。
本文将以最简拓扑为例:一台主机运行Prometheus作为监控中心,另一台主机运行Node Exporter作为被监控端,手把手演示如何配置网络、服务发现与采集任务,实现跨主机的Linux系统指标监控。无论你是DevOps工程师、SRE,还是正在搭建个人实验环境的技术爱好者,这套方案都是构建可观测性基础设施的第一步。

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加Node Exporter的组合,核心就是两个点:被监控机器上跑一个Exporter暴露数据,监控机器上配置抓取地址定时拉取。
跨主机监控的关键不是工具本身,在于网络连通性------监控机能通到被监控机的端口,数据才能拉得过来。cpolar在这个场景里的作用是把内网的Exporter端口暴露给监控机,让Prometheus在公网环境下也能拉到内网机器的指标。这个逻辑搭通之后,加机器、加指标都是改配置的事。