news 2026/7/31 9:10:22

Ansible批量部署Node Exporter实战:Playbook配置与远程主机接入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible批量部署Node Exporter实战:Playbook配置与远程主机接入

前言

只有几台服务器时,逐台通过SSH安装Node Exporter并不算困难。但随着主机数量增加,同样的下载、解压、创建用户、配置systemd服务和启动进程等操作需要不断重复,安装版本和目录也容易出现差异。

更麻烦的是,后续如果需要升级Node Exporter或者调整启动参数,还要重新登录每一台服务器进行修改。对于已经搭建Prometheus监控体系的环境来说,采集端部署不统一,会直接影响主机指标的完整性和后期维护效率。

Ansible可以通过SSH对多台Linux主机执行统一任务,不需要在目标主机额外安装专用客户端。将Node Exporter的安装过程写入Playbook后,就可以按照相同的版本、目录和服务配置批量完成部署。

本文将从Ubuntu环境安装Ansible开始,配置Inventory、systemd模板和Node Exporter Playbook,并在目标主机上验证服务状态。对于无法直接通过局域网连接的异地设备,还会使用cpolar映射SSH端口,让Ansible能够继续连接并执行部署任务。

1.在你的虚拟机上安装ansiable

1.1 什么是Ansible?

Ansible是一个开源的 自动化运维工具,由Red Hat赞助开发,用于实现:

  • 配置管理(Configuration Management)
  • 应用部署(Application Deployment)
  • 任务自动化(Task Automation)
  • IT编排(Orchestration)

它最大的特点是:简单、无代理、基于SSH、使用YAML语法。

1.2 Ansible的核心作用

  1. 批量执行命令

无需逐台登录服务器,一条命令可在成百上千台机器上同时运行:

  1. 统一配置管理

确保所有服务器的配置一致,比如:

  • 安装指定版本的软件(如 Node Exporter、Nginx)
  • 同步配置文件(如 /etc/hosts、prometheus.yml)
  • 创建用户、设置权限、管理服务状态
  • 自动化部署应用

通过 Playbook(YAML 文件)定义部署流程,一键完成复杂应用上线:

  1. 幂等性(Idempotency)

重复执行同一个 Playbook,结果始终一致——没装的会装,已装的不会重复操作,安全可靠。

  1. 无需安装客户端(Agentless)

Ansible通过SSH 与目标主机通信,只需控制机安装Ansible,被控机只要有Python 和SSH即可。

  1. 支持云和容器编排

可管理AWS、Azure、阿里云等云资源,也能操作Docker、Kubernetes。

1.3 安装ansiale

我这里是ubuntu系统,如果想使用centos可以看参考cpolar官网的这篇教程:《别再手动操作了!我用Ansible+cpolar给飞牛OS装了个“遥控器》

登录到 Ubuntu系统,并在APT命令下运行以应用更新:

sudoaptupdatesudoaptupgrade-y

安装最新版本的Ansible:

aptinstall-yansible

安装完成后,验证ansiable版本:

ansible--version

我们查看一下,有没有启动文件:

ls/etc/ansible

我发现我这里没有,那我们手动配一下,创建ansiable文件:

mkdir-p/etc/ansible

编写hosts文件:

cat>/etc/ansible/hosts<<EOF [local] localhost ansible_connection=local EOF

编写ansiable.cfg文件:

cat>/etc/ansible/ansible.cfg<<EOF [defaults] inventory = /etc/ansible/hosts host_key_checking = False remote_user = root stdout_callback = yaml EOF

验证是否成功:

ansible localhost-mping

2.配置ansiable文件搞定Node Exporter部署!

确保你在playbook所在目录(假设是 /etc/ansible):

cd/etc/ansible

创建templates目录

mkdir-ptemplates

创建服务模板文件:

cat>templates/node_exporter.service.j2<<'EOF' [Unit] Description=Node Exporter After=network.target [Service User=node_exporter Group=node_exporter Type=simple ExecStart={{ install_dir }}/node_exporter --collector.systemd --collector.processes Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF

首先,我们来过一下安装node_exporter基本步骤:

mkdir/shancd/shan
curl-LOhttps://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
tar-zxvfnode_exporter-1.10.2.linux-amd64.tar.gz
rm-rfnode_exporter-1.10.2.linux-amd64.tar.gzmvnode_exporter-1.10.2.linux-amd64/ node_exporter
sudovi/etc/systemd/system/node_exporter.service[Unit]Description=Node ExporterDocumentation=https://github.com/prometheus/node_exporterAfter=network.target[Service]User=node_exporterGroup=node_exporterType=simpleExecStart=/shan/node_exporter/node_exporter[Install]WantedBy=default.target
useradd--no-create-home--shell/bin/false node_exporter
systemctl start node_exporter systemctlenablenode_exporter

手动操作还好,但是一键部署是不是感觉头都大了?

别急,我这边已经研究好啦!只需要你复制粘贴,就能操作成功!

编辑hosts文件,加入你所要监控的ip和他的用户名及密码:

[test] ip ansible_ssh_user=用户名 ansible_ssh_pass=密码

编辑命令yml文件:

--- - name: 安装node_exporter hosts:testbecome:yesvars: node_exporter_version:"1.8.2"node_exporter_url:"https://ghproxy.net/https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"install_dir:"/shan"tasks: - name: 创建存储目录 file: path:"{{ install_dir }}"state: directory mode:'0755'- name: 下载node_exporter get_url: url:"{{ node_exporter_url }}"dest:"{{ install_dir }}/node_exporter.tar.gz"mode:'0644'timeout:30retries:3delay:10- name: 解压node_exporter unarchive: src:"{{ install_dir }}/node_exporter.tar.gz"dest:"{{ install_dir }}"remote_src:yes- name: 清理压缩包 file: path:"{{ install_dir }}/node_exporter.tar.gz"state: absent - name: 重命名解压目录为 node_exporter command:mv"{{ install_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64""{{ install_dir }}/node_exporter"args: creates:"{{ install_dir }}/node_exporter"- name: 删除旧目录 file: path:"{{ install_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64"state: absent - name: 创建专用用户 user: name: node_exporter system:yesshell: /sbin/nologin createhome: no - name: 配置systemd服务 template: src: node_exporter.service.j2 dest: /etc/systemd/system/node_exporter.service owner: root group: root mode:'0644'- name: 重载systemd配置 systemd: daemon_reload:yes- name: 启动并启用node_exporter服务 systemd: name: node_exporter enabled:yesstate: started

然后使用ansible-playbook执行就好啦:

ansible-playbook node_exporter.yml

切换到被安装的IP下,验证是否安装成功:

systemctl status node_exporter

至此我们通过ansible配置node_exporter算是成功啦!

我们后续可以在hosts添加上百台主机统一安装。

那么问题来了,目前我们只是在统一局域网下可以部署,那么我们想部署家里电脑,想监控家里电脑的指标怎么办呢?别急,cpolar来拯救你!

3.安装cpolar实现随时随地开发

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

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

sudocurlhttps://get.cpolar.sh|sh

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

sudosystemctl status cpolar

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

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

4.配置公网地址

通过配置,你可以在本地 WSL 或 Linux 系统上运行 SSH 服务,并通过 Cpolar 将其映射到公网,从而实现从任意设备远程连接开发环境的目的。

  • 隧道名称:可自定义,本例使用了:ssh,注意不要与已有的隧道名称重复
  • 协议:tcp
  • 本地地址:22
  • 端口类型:随机临时TCP端口
  • 地区:China Top

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

  • tcp 表示使用的协议类型

  • 2.tcp.cpolar.top是 Cpolar 提供的域名

  • 16198是随机分配的公网端口号

通过 Cpolar 提供的公网地址和端口,就可以使用ansible进行远程部署啦!

接下来我们操作一下。

修改hosts配置文件:

[dbservers]2.tcp.cpolar.topansible_user=rootansible_port=16198ansible_password=***

接下来我们执行配置node_exporter文件:

ansible-playbook node_exporter.yml

执行成功,我们去对应主机查看node_exporter服务是否开启成功:

我们可以看见,目标主机已经成功安装~

5.保留固定TCP公网地址

使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

选择区域和描述:有一个下拉菜单,当前选择的是“China VIP”。
右侧输入框,用于填写描述信息。
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。
列表中显示了一条已保留的TCP地址记录。

  • 地区:显示为“China VIP”。

  • 地址:显示为“15.tcp.cpolar.top:13633”。

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

修改隧道信息,将保留成功的TCP端口配置到隧道中。

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填写保留成功的TCP地址

点击更新

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

这样我们的ansible操作就没有任何的阻碍啦!

总结

完成以上配置后,Node Exporter的下载、解压、用户创建、systemd服务配置和启动过程就已经写入Ansible Playbook。后续添加新服务器时,只需要将目标主机信息加入Inventory,再执行相同的Playbook即可。

相比逐台登录服务器安装,这种方式更重要的价值是保持配置一致。Node Exporter使用的版本、安装目录、运行用户和启动参数都由同一份文件控制,后续需要升级或调整配置时,也可以继续通过Ansible统一执行。

对于与Ansible控制端不在同一网络中的主机,可以通过cpolar将目标设备的SSH端口映射为公网TCP地址,再在Inventory中填写对应域名和端口。配置固定TCP地址后,连接入口不会随着临时隧道变化,更适合后续重复执行自动化任务。

实际用于多台生产服务器前,建议先选择少量测试节点验证Playbook,并根据目标主机的系统版本、CPU架构、Python环境和权限配置进行调整。同时应优先使用SSH密钥管理连接凭据,避免直接在Inventory文件中长期保存明文密码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 9:05:58

2026年电动自行车选购指南:48V20Ah电池与液冷电机核心技术解析

这次我们来看电动自行车选购的核心要点。2026年市场上电动自行车技术已经相当成熟&#xff0c;但各种新概念也让消费者容易踩坑。48V20Ah电池配置、石墨烯电池技术、液冷电机、智能解锁功能和上牌资质这五个关键点&#xff0c;直接决定了车辆的使用体验和长期价值。如果你正在考…

作者头像 李华
网站建设 2026/7/31 9:04:04

STM32 HAL库驱动陶晶驰串口屏:从协议解析到实战应用

1. 项目概述&#xff1a;为什么选择HAL库驱动陶晶驰串口屏&#xff1f;在嵌入式开发里&#xff0c;给STM32配上一个带GUI的显示屏&#xff0c;项目档次和用户体验立马就上来了。但传统并口屏、SPI屏接线复杂&#xff0c;驱动代码量大&#xff0c;对MCU资源消耗也高。这几年&…

作者头像 李华
网站建设 2026/7/31 9:03:27

前端的设计模式?我觉得90%都是在过度设计!

最近Code Review的时候&#xff0c;我看到我们组一个很聪明的年轻同事&#xff0c;用观察者模式&#xff0c;写了一个极其复杂的全局状态订阅系统&#xff0c;就为了在一个组件里&#xff0c;响应另一个不相关的组件的点击事件。 比较常见的场景&#xff1a;点击 Button 组件&a…

作者头像 李华
网站建设 2026/7/31 9:03:02

Windows端口占用排查全攻略:从netstat到PowerShell实战

1. 端口状态排查&#xff1a;从新手到老手的必经之路 在Windows环境下搞开发、做运维&#xff0c;或者仅仅是排查一些网络服务问题&#xff0c;有一个场景你绝对绕不开&#xff1a;想知道某个端口是不是开着&#xff0c;或者想知道是哪个“家伙”占用了你心仪的端口。这听起来是…

作者头像 李华
网站建设 2026/7/31 9:01:45

网络故障排查利器:tcpdump ARP抓包实战指南

1. 从一次网络故障排查说起&#xff1a;为什么ARP抓包是基本功那天下午&#xff0c;整个开发区的网络突然变得异常卡顿&#xff0c;Ping网关的延迟从平时的1ms飙升到几百毫秒&#xff0c;还伴随着大量的丢包。运维同事初步排查了交换机、防火墙&#xff0c;都没发现明显异常。就…

作者头像 李华
网站建设 2026/7/31 9:00:18

再读人月神话:AI 时代下的产品化与系统化

再读人月神话&#xff1a;AI 时代下的产品化与系统化在 AI 时代重读读这本五十年前出版的软件工程领域圣经倒是带来了很多新的感悟&#xff0c;尤其是有了 AI 之后很多论点在我看来已经不完全成立了&#xff0c;此文记录一下自己的思考&#xff0c;权作抛砖引玉 本文对应原文的…

作者头像 李华