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

Ansible stat模块获取的目录大小如何转换为MiB/GiB并实现阈值告警

Ansible目录大小转换及阈值判断实现方案

前置注意事项

stat模块针对目录返回的stat.size是目录自身inode的占用大小(通常仅几KB),不是目录下所有文件的总存储容量。如果需要统计目录的实际总大小,建议使用du命令获取,结果更符合预期。

完整实现示例(统计目录实际总大小)

1. 实现逻辑

  • 调用du命令获取目录总字节数
  • 通过Jinja2过滤器做单位换算,可自定义保留小数位数
  • 用when条件判断是否超过阈值,触发对应提示

2. 完整Playbook代码

---
- name: 目录大小统计与阈值校验
  hosts: 你的目标主机组
  tasks:
    - name: 获取目录总字节数
      command: du -sb /apps/InstallDir/data
      register: dir_total_size
      changed_when: false # 标记为无变更,避免影响playbook变更统计

    - name: 字节单位转换为MB/GB
      set_fact:
        # 1MB = 1024*1024字节,保留2位小数
        dir_size_mb: "{{ (dir_total_size.stdout_lines[0].split()[0] | int / 1048576) | round(2) }}"
        # 1GB = 1024*1024*1024字节,保留2位小数
        dir_size_gb: "{{ (dir_total_size.stdout_lines[0].split()[0] | int / 1073741824) | round(2) }}"

    - name: 输出转换后的目录大小
      debug:
        msg: "目录 /apps/InstallDir/data 总大小为:{{ dir_size_mb }} MB(约 {{ dir_size_gb }} GB)"

    - name: 超过阈值时输出告警(示例阈值为10GB)
      debug:
        msg: "警告:目录大小已超出设定阈值10GB,当前大小为 {{ dir_size_gb }} GB,请及时清理冗余文件!"
      when: dir_size_gb | float > 10

基于原stat模块的转换方案

如果确实需要使用stat模块返回的大小做转换,可参考以下代码修改你原有的playbook:

- name: check for file size
  stat: 
     path: /apps/InstallDir/data
  register: myDir

- name: 转换stat返回值为MB/GB格式
  set_fact:
    dir_size_mb: "{{ (myDir.stat.size | int / 1048576) | round(2) }}"
    dir_size_gb: "{{ (myDir.stat.size | int / 1073741824) | round(2) }}"

- debug:
    msg: "stat返回的目录大小为 {{ dir_size_mb }} MB / {{ dir_size_gb }} GB"

自定义调整说明

  • 阈值可按需修改:如果要设置500MB的阈值,只需将告警任务的when条件改为when: dir_size_mb | float > 500即可
  • 保留小数位数可调整round过滤器的参数,比如round(1)就是保留1位小数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:03