news 2026/5/8 6:40:28

【Ansible开源自动化运维工具】别再手动装监控了,Ansible能让上百台机器同时搞定Node Exporter(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Ansible开源自动化运维工具】别再手动装监控了,Ansible能让上百台机器同时搞定Node Exporter(1)

前言

假设一个场景:领导突然说,“我们上了新业务,监控要全覆盖,明天之前100台服务器全部装好Node Exporter接进Prometheus。”

你打开SSH连上第一台机器,开始敲命令。下载、解压、建用户、配systemd、启动服务……二十分钟搞定一台。

然后你想了想剩下九十九台,手指悬在键盘上僵住了。

这就是运维里最典型的那种活——技术上不难,但纯靠手工堆时间,每一步都在消磨意志。后来我学会用Ansible之后,这类问题就变成了另一个画风:写一个Playbook,定义好安装步骤,然后一条命令同时给100台机器装上。3分钟,结果一致,出错还能回滚。

省下来的时间干什么不好。

这篇文章就是讲这个的:怎么用Ansible写一个轻量的Playbook,把Node Exporter批量部署这事做成一个可复用的标准化流程。不需要懂多深的运维,步骤照着走,能跑通就行。

本文将手把手教你编写一个轻量、可复用的Ansible自动化部署方案,从此告别重复劳动,真正实现“监控先行,稳定无忧”。

如果你还想监控家里的电脑,但设备在内网无法直连?别急,文末附赠 cpolar 内网穿透方案,让 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操作就没有任何的阻碍啦!

总结

回过头来看,批量装监控这事,技术含量不高,但重复价值极高。每新加一台服务器,只要把IP加到hosts文件里,Playbook一跑,自动装好、自动启动、不需要你盯着。

整个方案依赖两个工具:Ansible做批量操作,cpolar解决远程连不上的问题。前者是这套玩法的核心,后者是配套。思路搭起来之后,类似的事情都可以套——换个软件、换个配置,本质上都是在定义"要在哪些机器上做什么操作"。

有批量部署需求的可以先从Playbook入手,改几行参数就能复用。

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

随身记事备忘就用一个APP就够了

我是陈念&#xff0c;一名自由职业者&#xff0c;平时主要接文案撰写和策划类的活儿&#xff0c;每天要对接不同的客户&#xff0c;记各种需求要点&#xff0c;还要捕捉随时冒出来的创作灵感&#xff0c;偶尔也想随手记下生活里的小碎片。以前为了把这些事都记清楚&#xff0c;…

作者头像 李华
网站建设 2026/5/8 6:34:07

HIL仿真进阶:实时操作系统(RTOS)在飞控仿真中的任务调度与实时性保障

1. 开篇:HIL仿真的实时性痛点 在完成HIL仿真系统的硬件接口搭建后,很多工程师会遇到一个棘手的问题:为什么硬件连接都没问题,信号调理也正确,但仿真结果总是出现时序偏差甚至失控? 1.1 典型的实时性问题场景 plaintext 现象描述: - 传感器数据采集有时正常,有时丢帧 -…

作者头像 李华
网站建设 2026/5/8 6:33:30

基于Next.js与Redis的全栈待办应用:架构设计与工程实践

1. 项目概述&#xff1a;一个现代全栈待办事项应用的构建实录最近在 GitHub 上看到一个名为todoist.cloud的开源项目&#xff0c;它是一个基于 Next.js 的全栈待办事项应用。作为一个长期在任务管理工具上反复横跳的开发者&#xff0c;我立刻被它简洁的技术栈和完整的功能吸引住…

作者头像 李华
网站建设 2026/5/8 6:25:47

工业传感器(NPN/PNP)与三极管应用技术总结手册

一、 核心物理特性:谁在“推”?谁在“吸”? 传感器是 NPN 还是 PNP,本质上描述了其输出级三极管的安装位置和极性。 特性 PNP 型 (源型 - Source) NPN 型 (漏型 - Sink) 物理隐喻 推手:把电流从 $VCC$ 往外推 吸尘器:把电流从外面吸入 $GND$ 内部开关连接 连接到 电源正…

作者头像 李华
网站建设 2026/5/8 6:25:34

量化交易执行引擎QuantClaw:从架构设计到实战部署全解析

1. 项目概述&#xff1a;量化交易策略的“爪子”是什么&#xff1f;如果你在GitHub上搜索过量化交易相关的开源项目&#xff0c;大概率会看到过“QuantClaw”这个名字。乍一看&#xff0c;这个项目标题有点意思——“Quant”是量化&#xff0c;“Claw”是爪子&#xff0c;合起来…

作者头像 李华