ansible可高效批量采集服务器资产信息,无需代理,通过ssh连接、内置facts机制及模块组合实现标准化盘点;需先配置inventory分组、设置认证方式并测试连通性,再利用facts获取cpu、内存等基础信息,结合shell/command模块补充raid、docker等定制项,最后统一输出为csv/json或html报告。

Ansible 能高效完成批量服务器资产信息采集,无需在目标机装任何代理,靠 SSH 连接 + 内置 facts 机制 + 模块组合即可实现标准化、可复用的资产盘点。
配置清单与连接准备
先确保所有待采集服务器已纳入 inventory(如 /etc/ansible/hosts 或自定义 inventory.ini):
- 按业务或角色分组,例如 [web]、[db]、[monitor]
- 若密码登录,可在组变量中声明:ansible_user 和 ansible_ssh_pass;推荐使用密钥免密,更安全且免输密码
- 首次运行前建议测试连通性:ansible all -m ping,确认全部主机响应 OK
启用 facts 并提取基础资产字段
Ansible 默认开启 gather_facts: true,会自动收集 CPU、内存、磁盘、网络、系统版本等结构化信息。这些数据直接可用,无需手动解析命令输出:
- ansible_facts['processor_vcpus'] → 逻辑 CPU 数
- ansible_facts['memtotal_mb'] → 总内存(MB)
- ansible_facts['devices'] → 块设备列表(含硬盘型号、大小)
- ansible_facts['default_ipv4']['address'] → 主网卡 IPv4 地址
- ansible_facts['distribution'] + ansible_facts['distribution_version'] → 系统发行版与版本
补充定制化采集项(Shell + register)
标准 facts 不覆盖所有运维关注点,可用 shell 或 command 模块执行命令并注册结果:
- 采集 RAID 卡状态:shell: megacli -AdpAllInfo -aALL 2>/dev/null | head -10
- 查 Docker 版本:command: docker --version
- 获取 BIOS 日期:shell: dmidecode -s bios-release-date
- 每项用 register: result_name 捕获输出,后续通过 {{ result_name.stdout }} 引用
统一输出与导出结构化报告
用 debug 模块格式化打印,或直接写入文件生成 CSV/JSON 报表:
- 单次运行时重定向:ansible-playbook collect.yml -i hosts > assets.log
- Playbook 中用 lineinfile 或 copy 模块将结果写入中央服务器的共享目录
- 结合 template 模块渲染 HTML 表格或 Markdown 文档,便于人工查阅
- 进阶做法:用 set_fact 组装资产字典,再用 community.general.csv_file 模块导出为 CSV











