5分钟内获取全网主机Inode使用率报告的关键是标准化采集与结构化汇总:每台主机仅返回“主机名:挂载点,使用率%,状态”一行,用Ansible批量执行df -i+awk命令采集,通过playbook注册结果并导出,再用awk/sort等本地命令快速统计ALERT并生成报表。

直接用 Shell 脚本 + 批量分发工具(如 Ansible、pssh、SaltStack 或自研分发器)组合,5 分钟内就能拿到全网所有主机的 Inode 使用率报告,关键不在“写脚本”,而在“标准化采集+结构化汇总”。
一、核心逻辑:只采集关键字段,不执行冗余操作
每台主机只需返回一行结果:主机名、挂载点、Inode使用率、是否超阈值。避免输出 df -i 的完整表头或空行,方便后续聚合。
- 推荐采集命令(兼容多数 Linux 发行版):
- 说明:跳过表头(NR>1),过滤掉无 Inode 信息的行(如 tmpfs),去除 % 符号便于数值判断,85% 为红线阈值(可按需调整)
- 注意:部分老系统可能不支持 ENVIRON["HOSTNAME"],可用 hostname -s 替代
二、批量分发:选对工具,三步走通
以 Ansible 为例(最常用、免客户端、天然支持并发):
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 步骤1:准备主机清单 inventory.ini,按业务/区域分组(如 [web], [db])
- 步骤2:写一个极简 playbook(inodes.yml):
-
步骤3:一键执行并导出结果:
ansible-playbook -i inventory.ini inodes.yml -o | grep "ok=" > inode_report.txt
(-o 合并单行输出,grep 提取有效结果;后续可用 awk/sort/uniq 快速统计 ALERT 数量)
三、自动汇总与告警(可选增强)
把原始输出转成可读报告,只需一个本地处理脚本(无需在目标机运行):
- 提取所有 ALERT 行:awk -F',' '/ALERT/ {print $1,$2}' inode_report.txt | column -t
- 统计各主机超限挂载点数量:awk -F':' '{print $1}' inode_report.txt | sort | uniq -c | sort -nr
- 生成 HTML 报表(用 echo + cat 拼接即可,无需复杂框架)或直接邮件发送(mail -s "Inode 红线日报" ops@xxx.com
四、避坑提醒:真实环境常见卡点
- 权限问题:df -i 不需要 root,但若挂载了 NFS/Ceph 等特殊文件系统,可能因 rpc 权限失败——加 timeout 3 和 ignore_errors: true 防止整批中断
- 字符集/换行混乱:某些国产 OS 或容器镜像默认 locale 是中文,导致 awk 解析异常——在 shell 命令前加 LC_ALL=C
- 磁盘未挂载或已卸载:df -i 会报错,建议用 df -i 2>/dev/null 过滤错误输出
- 超大集群(>500 台):Ansible 默认 forks=5 太慢,启动时加 -f 50 提升并发数(根据控制机 CPU 调整)
脚本本身不到 20 行,难点在于让输出格式统一、容错稳定、结果可批量解析。只要采集端干净,分发端可控,汇总就是管道符和 awk 的事。

















