You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ansible获取磁盘使用率超85%的服务器节点IP地址

磁盘使用率超标IP获取Ansible实现方案

你原来的shell命令存在语法错误,且无法直接在被控端收集全局超标IP,可通过Ansible内置变量+结果过滤实现需求,以下是两种可用方案:

方案1:执行后统一输出所有超标IP列表

该方案只会在playbook执行末尾输出一次所有符合条件的服务器IP,方便汇总查看:

---
- hosts: all
  gather_facts: yes
  vars:
    # 可自定义磁盘使用率阈值
    disk_threshold: 85
  tasks:
    - name: 采集根分区磁盘使用率
      shell: df / | awk 'NR==2{print $5}' | sed 's/%//g'
      register: root_disk_usage
      changed_when: false

    - name: 过滤收集超标服务器IP
      set_fact:
        over_disk_limit_ips: "{{ hostvars | dict2items | selectattr('value.root_disk_usage.stdout', 'defined') | selectattr('value.root_disk_usage.stdout', 'int', 'gt', disk_threshold) | map(attribute='value.ansible_default_ipv4.address') | list }}"
      run_once: true

    - name: 打印超标服务器IP列表
      debug:
        msg: "根分区使用率超过{{ disk_threshold }}%的服务器IP:{{ over_disk_limit_ips }}"
      run_once: true

方案2:每个超标主机单独输出自身IP

如果不需要统一汇总,只想让符合条件的主机各自输出IP,可使用简化版本:

---
- hosts: all
  gather_facts: yes
  vars:
    disk_threshold: 85
  tasks:
    - name: 采集根分区磁盘使用率
      shell: df / | awk 'NR==2{print $5}' | sed 's/%//g'
      register: root_disk_usage
      changed_when: false

    - name: 打印当前超标主机IP
      debug:
        msg: "超标服务器IP:{{ ansible_default_ipv4.address }},当前根分区使用率:{{ root_disk_usage.stdout }}%"
      when: root_disk_usage.stdout | int > disk_threshold

说明

  • 无需使用df -h,纯数字输出的df结果更方便做数值比较,避免单位转换问题
  • gather_facts: yes开启后可直接调用Ansible内置的ansible_default_ipv4.address变量获取被控端的IP地址,无需手动在shell中拼接
  • changed_when: false用于屏蔽采集类任务的变更状态标记,不影响playbook的变更统计结果

内容的提问来源于stack exchange,提问作者Somethingwhatever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:15:01