回调插件管的是输出与旁路
执行过程中,Ansible 会在若干固定时刻发出事件:play 开始、任务完成、任务失败、统计汇总。回调插件订阅这些事件,决定“怎么呈现、往哪里送、要不要顺带做点别的事”。换输出格式(更易读的 YAML 风格、结构化 JSON)、记录执行日志、把结果推给监控与通知渠道、给任务计时排行,都是在这一层实现的。
基本信息
| 配置位置 | ansible.cfg 的 [defaults] 段,启用列表由 callbacks_enabled 控制 |
|---|---|
| 标准输出格式 | stdout_callback 指定默认的输出样式 |
| 插件来源 | 核心内置与各集合提供的回调插件,具体名称以 ansible-doc 列表为准 |
| 事件粒度 | playbook 开始/结束、play 开始、任务结果、主机不可达、统计汇总 |
| 执行位置 | 全部在控制节点,不进入被管机 |
| 自定义开发 | 继承回调基类并按需实现事件钩子方法 |
典型使用场景
- 输出可读性:换用清单式输出,长 playbook 的结果更容易扫读
- 执行留档:把每次运行的日志写到文件或日志系统,供事后追溯与审计
- 耗时分析:启用计时类回调,得到每个任务的耗时排行,找出瓶颈
- 结构化对接:输出为结构化格式,交给流水线解析后做判断与展示
- 失败通知:在任务失败事件上触发告警,缩短发现时间
- 合规记录:对变更类任务单独汇总,作为变更记录的一部分随流水线归档
启用与查看
启用与查看
# ansible.cfg
[defaults]
stdout_callback = default # 默认输出样式
callbacks_enabled = profile_tasks # 启用额外回调(旧版本该项名称不同)
[callback_profile_tasks]
sort_order = descending # 计时排行按耗时降序
# 查看当前环境里可用的回调插件
# ansible-doc -t callback -l
# ansible-doc -t callback <插件名> # 看它的专属配置项回调能力分类
| 类型 | 作用 | 注意点 |
|---|---|---|
| 输出样式类 | 改变终端呈现方式(更紧凑或更结构化) | 团队习惯不同,切换前先小范围试用 |
| 计时统计类 | 输出任务耗时排行 | 本身有少量开销,长期开启基本可接受 |
| 日志落盘类 | 把事件写入文件或日志系统 | 注意权限与轮转,避免日志无限增长 |
| 通知类 | 在失败或结束时推送消息 | 同步调用外部服务会拖慢每个任务 |
| 结构化输出类 | 生成机器可解析的结果 | 字段随版本变化,解析方需容忍新增字段 |
回调插件按事件被调用,单个插件报错不应中断执行,但会导致本应记录的内容缺失。写入外部系统或文件的回调要自己处理异常与重试策略,否则在磁盘写满、网络抖动时静默丢日志。
回调能看到任务的全部返回数据,包含变量原值与命令输出。把结果推到第三方通知渠道或日志平台时,敏感字段会跟着一起外流;含口令的任务必须设置 no_log,并限制回调的输出范围。
启用策略
以少为始:先启用一个计时类回调拿到数据,再根据需要增加日志落盘与结构化输出。每增加一个回调都会带来执行期的额外开销与新的失败面,尤其是需要网络交互的通知类插件。逐项评估后再固化到仓库的 ansible.cfg 中,保证所有执行者行为一致。