显示每个vagrant ansible任务完成所需的时间

时间:2013-11-08 10:56:49

标签: task benchmarking vagrant provisioning ansible

我正在将一个流浪汉配置者从shell转换为ansible,我想知道是否有任何选项可以显示完成每项任务所需的实际时间?

理想情况下,我想使用shell:方法和内置的yum:with_items方法来测量在yum中安装多个包之间的区别。 ATM我坐在这里有一个秒表,但我需要准确的时间。

4 个答案:

答案 0 :(得分:49)

我通过添加callback plugin解决了Ansible任务持续时间的问题。回调插件旨在允许您根据Ansible运行环境中发生的事件运行您自己的arbirary代码。

通过创建callback_plugins目录并将python脚本放入其中,可以轻松部署

The plugin I use

以下是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

此外,我将shell命令time添加到a​​nsible-playbook运行中。这很好地聚合了所有单个任务持续时间。

编辑:

从Ansible v2.0.0开始,这个特殊的插件随附Ansible本身!只需将callback_whitelist = profile_tasks添加到您的~/.ansible.cfg文件中即可。

答案 1 :(得分:3)

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,无论您想在哪里输出时间戳。

答案 2 :(得分:0)

可悲的是,默认情况下没有性能日志记录。

但您可以将自己的回调听众添加到ansible。此回调将在操作的开始和结束时得到通知......

有关完整示例,请查看datadog插件

答案 3 :(得分:-2)

只需使用time预先执行整个Ansible剧本。 确保您的shell:脚本与yum:模块的功能相同,例如更新缓存,下载文件与使用本地缓存等等。

使用yum:的好处是,除了其他方面,Ansible可以更好地处理失败的安装,而不是盲目地将shell:命令作为一个单一的东西运行。

我认为差异非常小(几分之一秒到2-3秒)。我想你需要运行你的基准测试数十次以获得统计上准确的结果。