搭建prometheus+node exporter监控体系需三步:一、在被监控机安装node exporter,创建低权限用户并授权端口绑定;二、配置systemd服务监听全网地址(如:9100),确保外部可访问;三、在prometheus中添加真实ip目标,检查防火墙、网络连通性及selinux策略。

直接在 Linux 上搭一套可用的 Prometheus + Node Exporter 监控体系,核心就三件事:装好 Node Exporter 并让它稳定对外提供指标、配好 Prometheus 主服务去拉取这些指标、确保两者网络通、权限对、端口开。
一、在被监控主机上安装并启动 Node Exporter
Node Exporter 是个单二进制文件,无需编译或复杂依赖,但必须注意运行身份和监听地址。
- 下载最新稳定版(如 v1.8.2):
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz - 解压并复制二进制到标准路径:
tar -xzf node_exporter-*.tar.gz
sudo cp node_exporter-*/node_exporter /usr/local/bin/ - 创建专用低权限用户(不建家目录、禁登录):
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter - 若用默认端口 9100,需授权绑定特权端口:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/node_exporter
(也可改用非特权端口如 9101,跳过这步)
二、配置 systemd 服务并验证监听
不能用 & 后台运行,必须走 systemd 管理,才能开机自启、崩溃自拉起。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 新建服务文件:
sudo vim /etc/systemd/system/node_exporter.service - 关键内容必须包含:
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100
Restart=on-failure
注意是 :9100(不是 127.0.0.1:9100),否则外部拉不到数据 - 启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter - 验证是否监听全网接口:
ss -tlnp | grep :9100 应看到 *:9100
再从 Prometheus 所在机器执行:
curl http://被监控IP:9100/metrics 能返回文本即成功
三、在 Prometheus 服务器上添加采集目标
Prometheus 默认只监控自己,要监控其他主机,必须显式写入 targets,且不能写 localhost。
- 编辑 prometheus.yml,在 scrape_configs 下新增 job:
- job_name: "linux-servers"
static_configs:
- targets: ["192.168.5.22:9100", "192.168.5.23:9100"]
填的是被监控机的真实 IP,不是本机或 127.0.0.1 - 检查配置语法:
./promtool check config prometheus.yml - 重载配置(无需重启):
curl -X POST http://localhost:9090/-/reload - 登录 Prometheus Web UI(http://:9090/targets),确认状态为 UP
四、防火墙与常见连通性检查
很多问题其实卡在基础网络层面,别急着调配置,先确认这几项。
- 被监控主机上放行 9100 端口:
sudo ufw allow 9100/tcp(Ubuntu)
sudo firewall-cmd --add-port=9100/tcp --permanent && sudo firewall-cmd --reload(CentOS/RHEL) - 从 Prometheus 主机 ping 和 telnet 测试:
ping 192.168.5.22
telnet 192.168.5.22 9100 - 确认 SELinux 没拦截(如启用):
sudo setsebool -P prometheus_can_network on 或临时设为 permissive 模式排查 - 如果网络延迟高或目标负载大,可临时调大抓取超时:
scrape_timeout: 15s 加在对应 job 下










