首页/系统与基础设施/自动化运维速查/剧本日志的集中收集方法
排障与安全50 条

剧本日志的集中收集方法

剧本日志集中收集的关键是用执行批次编号把控制节点输出、受管机痕迹与平台任务记录串成一条链路;采集方式按「是否需要机器检索」在文本日志与结构化回调之间选,并同步处理时间同步、轮转与脱敏。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌‌​​‌​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌‌‌​‌​​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌‌​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

为什么要把剧本日志集中收

自动化剧本在每台受管机上都会留下执行痕迹:控制节点有剧本输出,受管机有模块执行与系统日志,作业平台还有一份任务记录。三处分散时,事后只能人工逐台翻文件。集中收集的真正目标是「按执行批次还原全过程」——谁在什么时候对哪台机器执行了哪个任务、结果如何。它同时是误操作追溯与安全审计的证据来源,也是用失败率、耗时反过来优化剧本的数据基础。

基本信息

收集对象控制节点剧本输出、受管机执行痕迹、作业平台任务记录
核心关联键执行批次编号、剧本版本、受管主机名、任务名
常见落点rsyslog 转发、filebeat/fluentd 采集、作业平台数据库与 API
权限要求读 /var/log 与平台日志需 root 或平台管理员

典型采集路径

  • 控制节点单文件:配置 ansible.cfg 的日志路径,所有剧本输出落到同一文件,再交给采集器转发
  • 回调插件分流:按任务或按主机把结构化事件写成 JSON,便于入库与检索
  • 作业平台内置:AWX 类平台把任务输出落库,用 API 或导出功能取回,不直接读容器内文件
  • 系统日志转出:受管机侧交给 rsyslog 或采集器,避免逐台登录取数
  • 失败即取:剧本失败分支里自动抓取受管机必要日志并回传,减少事后补采
  • 长期归档:按批次归档到对象存储,保留期限与合规要求一致

控制节点落地示例

控制节点落地示例
# 所有剧本输出落到同一文件
[defaults]
log_path = /var/log/ansible/ansible.log
# 打开结构化回调,供采集器按行解析 JSON
callbacks_enabled = json
# 回调插件目录按安装方式调整,以官方文档为准
callback_plugins = /etc/ansible/callback_plugins

链路自检

链路自检
ansible-playbook -i hosts site.yml      # 执行一次,产生一条完整批次记录
tail -n 50 /var/log/ansible/ansible.log  # 确认控制节点日志已落盘
ls -l /var/log/ansible/hosts/            # 按主机拆分的回调会写到这里
logger -p local0.info 'log pipe test'    # 反向验证转发链路连通
journalctl -u rsyslog --since '10 min ago'  # 转发组件无输出先看它自身日志

各来源采集对照

日志来源默认位置集中方式
控制节点剧本输出ansible.cfg 配置的日志路径采集器读文件,按批次切分
受管机执行痕迹系统日志与授权相关文件rsyslog 转发到集中端
平台任务输出平台数据库平台 API 拉取或平台外发
回调事件回调配置的文件或套接字按 JSON 逐行解析后入库
依赖与插件日志标准错误输出重定向到文件后再采集
回调插件一般分三类:写单文件的文本类、写 JSON 的结构化类、直接投递到消息队列或日志平台的转发类。选型只看两点——后续是否需要被机器检索(要结构化)、是否允许把受管机数据带出到外部平台。具体配置项随版本变化,以官方文档为准。
no_log 只能阻止任务结果进入默认输出,不能替代凭据治理:自研回调若在任务开始阶段直接读取参数,敏感值仍可能写进集中日志。口令与密钥应由凭据管理工具在源头注入,集中端再对已知敏感字段做二次脱敏。

易错点

  • 只开控制节点日志就以为齐活:受管机侧的命令痕迹仍在本地,事后无法还原完整链路,需要同步规划系统日志转发
  • 日志只堆在本地不做轮转:磁盘写满后剧本与采集器一起失效,应配置轮转并设定保留期限
  • 直接读作业平台容器的内部文件:平台升级或迁移后路径失效,应优先使用平台 API 或导出功能
  • 忽略时间同步:控制节点与受管机时钟漂移会让日志无法还原真实顺序,集中前先统一时间源
  • 集中日志未脱敏:样本被更多人看到等于凭据扩散,采集前要过滤,查询侧要限权

数据来源与参考

  • Ansible 官方文档:ansible.cfg 与 callback 插件
  • AWX 官方文档:作业输出与日志外发
  • rsyslog 官方文档:转发与模板配置

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/playbook-log-centralized-collection.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌‌​​‌​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌‌‌​‌​​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌‌​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​