【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命令下运行以应用更新:

shell 复制代码
sudo apt update
sudo apt upgrade -y

安装最新版本的Ansible:

shell 复制代码
apt install -y ansible

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

shell 复制代码
ansible --version

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

shell 复制代码
ls /etc/ansible

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

shell 复制代码
mkdir -p /etc/ansible

编写hosts文件:

shell 复制代码
cat > /etc/ansible/hosts <<EOF
[local]
localhost ansible_connection=local
EOF

编写ansiable.cfg文件:

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

验证是否成功:

shell 复制代码
ansible localhost -m ping

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

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

shell 复制代码
cd /etc/ansible

创建templates目录

shell 复制代码
mkdir -p templates

创建服务模板文件:

shell 复制代码
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基本步骤:

shell 复制代码
mkdir /shan 
cd /shan
shell 复制代码
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
shell 复制代码
tar -zxvf node_exporter-1.10.2.linux-amd64.tar.gz
shell 复制代码
rm -rf node_exporter-1.10.2.linux-amd64.tar.gz
mv node_exporter-1.10.2.linux-amd64/ node_exporter
shell 复制代码
sudo vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target

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

[Install]
WantedBy=default.target
shell 复制代码
useradd --no-create-home --shell /bin/false node_exporter
shell 复制代码
systemctl start node_exporter
systemctl enable node_exporter

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

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

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

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

编辑命令yml文件:

shell 复制代码
---
- name: 安装node_exporter
  hosts: test
  become: yes
  vars:
    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: 30
      retries: 3
      delay: 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: yes
        shell: /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: yes
        state: started

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

shell 复制代码
ansible-playbook node_exporter.yml

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

shell 复制代码
systemctl status node_exporter

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

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

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

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

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

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

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

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

shell 复制代码
sudo systemctl 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配置文件:

shell 复制代码
[dbservers]
2.tcp.cpolar.top ansible_user=root ansible_port=16198 ansible_password=***

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

shell 复制代码
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入手,改几行参数就能复用。

相关推荐
冬奇Lab6 小时前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
uniquejing14 小时前
《每次 API 调用前扔掉 43% Token,我开源了一个 AI 提示词瘦身工具》
开源
文心快码BaiduComate2 天前
Comate 搭载GLM-5.2:百万上下文,稳定支撑长程任务
前端·程序员·开源
冬奇Lab2 天前
每日一个开源项目(第133篇):EchoBird - 把 AI 工具的安装和部署做成傻瓜操作
人工智能·开源·资讯
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
下班走回家2 天前
DeepSeek 开源模型的突破与思考:从技术到生态的全面进化
人工智能·开源
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理