TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 自动化运维
  3. 正文

Ansible自动化部署node_exporter(包含升级,回滚)

2025年3月2日 1548点热度 2人点赞 0条评论

部署 node_exporter

创建目录

 root@pg-1:~# mkdir roles/node_exporter/{vars,tasks,templates,handlers,files,meta} -p
 root@pg-1:~# tree  roles/
 roles/
 └── node_exporter
     ├── files
     ├── handlers
     ├── meta
     ├── tasks
     ├── templates
     └── vars

配置handlers/main.yml

在此目录中可以存放触发器配置信息存放handlers配置

 root@pg-1:~/roles# vim node_exporter/handlers/main.yml
 ---
 - name: restart node_exporter
   ansible.builtin.systemd:
     name: node_exporter
     state: restarted

配置 meta/main.yml

在此目录中可以存放角色执行依赖关系

 root@pg-1:~/roles# vim node_exporter/meta/main.yml
 ---
 # 可以根据实际需要编写依赖等信息,这里示例为空
 dependencies: []
  #- { role: nginx }
  #- { role: php-fpm }

配置 vars/main.yml

在此目录中可以存放变量信息文件存放角色变量信息

 root@pg-1:~/roles# vim node_exporter/vars/main.yml
 ---
 # 可以在这里管理 node_exporter 的版本信息、安装位置等
 node_exporter_version: "1.6.1"
 node_exporter_base_dir: "/apps/node_exporter"

配置 tasks/main.yml

在此目录中可以定义任务配置文件信息存放任务

 root@pg-1:~/roles# vim node_exporter/tasks/main.yml
 ---
 ###############################################################
 # 1. 创建 node_exporter 用户
 ###############################################################
 - name: Create node_exporter user
   ansible.builtin.user:
     name: node_exporter
     system: yes
     shell: /sbin/nologin
 ​
 ###############################################################
 # 2. 创建存放 node_exporter 文件的基础目录
 ###############################################################
 - name: Create base directory for node_exporter
   ansible.builtin.file:
     path: "{{ node_exporter_base_dir }}"
     state: directory
     owner: node_exporter
     group: node_exporter
 ​
 ###############################################################
 # 3. 先从 role 的 files 或其他目录复制压缩包到远程目标机
 ###############################################################
 - name: Copy node_exporter tarball
   ansible.builtin.copy:
     src: "node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
     dest: "{{ node_exporter_base_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
     mode: '0644'
 ​
 ###############################################################
 # 4. 解压 node_exporter
 ###############################################################
 - name: Unarchive node_exporter
   ansible.builtin.unarchive:
     src: "{{ node_exporter_base_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
     dest: "{{ node_exporter_base_dir }}/"
     remote_src: true
     creates: "{{ node_exporter_base_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64/node_exporter" # 幂等判断
   notify: restart node_exporter
 ​
 ###############################################################
 # 5. 创建或更新 node_exporter 软链接 (方便升级或回退)
 ###############################################################
 - name: Create or update "current" symlink
   ansible.builtin.file:
     src: "{{ node_exporter_base_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64"
     dest: "{{ node_exporter_base_dir }}/node_exporter"
     state: link
   notify: restart node_exporter
 ​
 ###############################################################
 # 6. 拷贝或更新 systemd service 文件
 ###############################################################
 - name: Copy systemd service file
   ansible.builtin.template:
     src: node_exporter.service.j2
     dest: /etc/systemd/system/node_exporter.service
   notify: restart node_exporter
 ​
 ###############################################################
 # 7. 启用并启动 node_exporter 服务
 ###############################################################
 - name: Enable and start node_exporter service
   ansible.builtin.systemd:
     name: node_exporter
     enabled: yes
     state: started

配置 templates/node_exporter.service.j2

在此目录中可以存放需要分发文件信息――存放分发文件信息 jinja2模板文件(支持变量)

 root@pg-1:~/roles# vim node_exporter/templates/node_exporter.service.j2
 [Unit]
 Description=node_exporter
 Documentation=https://prometheus.io/docs/introduction/overview/
 After=network.target
 ​
 [Service]
 Type=simple
 User=node_exporter
 ExecStart={{ node_exporter_base_dir }}/node_exporter/node_exporter \
   --collector.ntp \
   --collector.mountstats \
   --collector.systemd \
   --collector.ethtool \
   --collector.tcpstat
 ExecReload=/bin/kill -HUP $MAINPID
 TimeoutStopSec=20s
 Restart=always
 ​
 [Install]
 WantedBy=multi-user.target

创建 host 主机文件

 root@pg-1:~/roles# vim inventory.ini
 [node_exporter] #  node_exporter 主机组
 192.168.139.162 ansible_user=root ansible_password=root ansible_port=22 # 登录主机账密
 ​
 #################### 如果主机多可用如下配置 #################
 # [node_exporter]
 # 192.168.139.162
 # ........
 # ........
 # [node_exporter:vars]
 # ansible_user=root
 # ansible_password=root
 # ansible_port=22
 ###########################################################
 ​
 ################### 如果有免密则不用配置账密 ##################

配置 ansible.cfg 文件

 root@pg-1:~/roles# cat ansible.cfg 
 [defaults]
 inventory      =  ./inventory.ini
 host_key_checking = False

创建 site.yml 执行文件

 root@pg-1:~/roles# vim site.yml 
 ---
 - hosts: node_exporter  # 这个 Play 要在名为 node_exporter 的主机组上执行。
   become: yes           # 告诉 Ansible 执行任务时需要提权(例如使用 sudo)来获取 root 权限。
   gather_facts: yes     # 收集目标主机的系统信息(如操作系统、CPU、内存、网络接口等)并作为变量(ansible_facts)提供给后续任务使用,如果用不到里面的变量可以设置为 no 这样速度会加快
   
   roles:
     - node_exporter     # 执行名为 node_exporter 的角色 其实就是当前目录下的 node_exporter 目录 这里目录指角色

最终 roles 目录

 root@pg-1:~/roles# tree 
 .
 ├── ansible.cfg
 ├── inventory.ini
 ├── node_exporter
 │   ├── files
 │   │   └── node_exporter-1.6.1.linux-amd64.tar.gz
 │   ├── handlers
 │   │   └── main.yml
 │   ├── meta
 │   │   └── main.yml
 │   ├── tasks
 │   │   └── main.yml
 │   ├── templates
 │   │   └── node_exporter.service.j2
 │   └── vars
 │       └── main.yml
 └── site.yml

执行安装

 `检查加载配置文件` 
 root@pg-1:~/roles# ansible --version
 ansible 2.10.8
   config file = /root/roles/ansible.cfg # 配置文件加载
   configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
   ansible python module location = /usr/lib/python3/dist-packages/ansible
   executable location = /usr/bin/ansible
   python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
   
 `检查语法`
 root@pg-1:~/roles# ansible-playbook --syntax-check site.yml 
 ​
 playbook: site.yml
 ​
 `执行安装`
 root@pg-1:~/roles# ansible-playbook site.yml 
 ​
 `验证`
 root@pg-2:~# systemctl is-active node_exporter.service 
 active
 root@pg-2:~# systemctl is-enabled node_exporter.service 
 enabled
 root@pg-2:/apps/node_exporter/node_exporter# ./node_exporter --version
 node_exporter, version 1.6.1 (branch: HEAD, revision: 4a1b77600c1873a8233f3ffb55afcedbb63b8d84)
   build user:       root@586879db11e5
   build date:       20230717-12:10:52
   go version:       go1.20.6
   platform:         linux/amd64
   tags:             netgo osusergo static_build

注意:需要下载 sshpass 服务

 apt install sshpass

未来升级示例

roles 目录

新版本放到 files 目录下

 root@pg-1:~/roles# tree 
 .
 ├── ansible.cfg
 ├── inventory.ini
 ├── node_exporter
 │   ├── files
 │   │   ├── node_exporter-1.6.1.linux-amd64.tar.gz
 │   │   └── node_exporter-1.8.2.linux-amd64.tar.gz  # 新版本放到 files 目录下
 │   ├── handlers
 │   │   └── main.yml
 │   ├── meta
 │   │   └── main.yml
 │   ├── tasks
 │   │   └── main.yml
 │   ├── templates
 │   │   └── node_exporter.service.j2
 │   └── vars
 │       └── main.yml
 └── site.yml

修改变量

 root@pg-1:~/roles# vim node_exporter/vars/main.yml
 ---
 # 可以在这里管理 node_exporter 的版本信息、安装位置等
 node_exporter_version: "1.8.2"
 node_exporter_base_dir: "/apps/node_exporter"

执行升级

 `检查语法`
 root@pg-1:~/roles# ansible-playbook --syntax-check site.yml 
 ​
 playbook: site.yml
 ​
 `执行升级`
 root@pg-1:~/roles# ansible-playbook site.yml 
 ​
 `验证`
 root@pg-2:~# cd /apps/node_exporter/node_exporter && ./node_exporter --version
 node_exporter, version 1.8.2 (branch: HEAD, revision: f1e0e8360aa60b6cb5e5cc1560bed348fc2c1895)
   build user:       root@03d440803209
   build date:       20240714-11:53:45
   go version:       go1.22.5
   platform:         linux/amd64
   tags:             unknown

未来回滚示例

修改变量

 root@pg-1:~/roles# vim node_exporter/vars/main.yml
 ---
 # 可以在这里管理 node_exporter 的版本信息、安装位置等
 node_exporter_version: "1.6.1"
 node_exporter_base_dir: "/apps/node_exporter"

执行回滚

 `检查语法`
 root@pg-1:~/roles# ansible-playbook --syntax-check site.yml 
 ​
 playbook: site.yml
 ​
 `执行升级`
 root@pg-1:~/roles# ansible-playbook site.yml 
 ​
 `验证`
 root@pg-2:~# cd /apps/node_exporter/node_exporter && ./node_exporter --version
 node_exporter, version 1.6.1 (branch: HEAD, revision: 4a1b77600c1873a8233f3ffb55afcedbb63b8d84)
   build user:       root@586879db11e5
   build date:       20230717-12:10:52
   go version:       go1.20.6
   platform:         linux/amd64
   tags:             netgo osusergo static_build
标签: 暂无
最后更新:2025年3月2日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 部署 node_exporter
    • 创建目录
    • 配置handlers/main.yml
    • 配置 meta/main.yml
    • 配置 vars/main.yml
    • 配置 tasks/main.yml
    • 配置 templates/node_exporter.service.j2
    • 创建 host 主机文件
    • 配置 ansible.cfg 文件
    • 创建 site.yml 执行文件
    • 最终 roles 目录
    • 执行安装
    • 未来升级示例
    • 未来回滚示例

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号