我正在将 vagrant provisioner 从 shell 转换为 ansible,我想知道是否有任何选项可以显示完成每项任务所需的实际时间?
理想情况下,我想对使用 shell: 方法和内置 yum: with_items 方法在 yum 中安装多个包之间的差异进行基准测试。提款机 我正拿着秒表坐在这里,但我需要准确的时间。
我正在将 vagrant provisioner 从 shell 转换为 ansible,我想知道是否有任何选项可以显示完成每项任务所需的实际时间?
理想情况下,我想对使用 shell: 方法和内置 yum: with_items 方法在 yum 中安装多个包之间的差异进行基准测试。提款机 我正拿着秒表坐在这里,但我需要准确的时间。
我通过添加回调插件解决了 Ansible 任务持续时间的计时问题。回调插件旨在允许您根据 Ansible 运行上下文中发生的事件运行自己的任意代码。
我使用的插件很容易通过创建一个 callback_plugins 目录并将 python 脚本放入其中来部署。
以下是 playbook 运行结束时生成的输出示例:
PLAY RECAP ********************************************************************
npm_install_foo | Install node dependencies via npm ------------------- 194.92s
gulp_build | Run Gulp to build ----------------------------------------- 89.99s
nodejs | Update npm ---------------------------------------------------- 26.96s
common | Update apt cache and upgrade base os packages ----------------- 17.78s
forever | Install forever (restarts Node.js if it fails) --------------- 16.84s
nodejs | Node.js | Install Node.js and npm ----------------------------- 15.11s
bower | Install bower --------------------------------------------------- 9.37s
Copy locally fetched repo to each instance ------------------------------ 8.03s
express | Express | Install Express ------------------------------------- 8.00s
time
此外,我在 ansible-playbook 运行之前添加了 shell 命令。这很好地汇总了所有单独的任务持续时间。
编辑#1:
从 Ansible v2.0.0 开始,这个特定的插件随 Ansible 本身一起提供!只需添加callbacks_enabled = profile_tasks
到您的~/.ansible.cfg
文件中的[defaults]
部分。
编辑#2:由于 Ansible v2.1.5callback_whitelist
已被弃用,支持callbacks_enabled
.
[defaults]
callbacks_enabled = profile_tasks
...
Ansible 将时间戳放入其日志中,因此您可以使用它。您可以使用您的 ansible.cfg 文件打开它:
[defaults]
log_path = ./ansible.log
你也可以像这样粗略地做一些事情——创建一个看起来像这样的剧本:
---
#
# Outputs a timestamp to the console
#
# Used for debugging/timing stuff.
#
- local_action: shell date +'%F %T'
register: ts
sudo: no
- name: Timestamp
debug: msg="{{ ts.stdout }}"
然后include
,无论您想在哪里输出时间戳。
只需在执行整个 Ansible playbook 之前添加time
. 确保您的shell:
脚本与模块执行相同的操作yum:
,例如更新缓存、下载文件与使用本地缓存等。
使用的好处yum:
是,Ansible 可以更好地处理失败的安装,而不是盲目地将shell:
命令作为一个整体运行。
我认为差异会非常小(几分之一秒到 2-3 秒)。我想你需要运行你的基准几十次才能获得统计上准确的结果。