web-dev-qa-db-ja.com

各vagrantansibleタスクが完了するのにかかる時間を表示します

VagrantプロビジョナーをShellからansibleに変換していますが、各タスクを完了するのにかかる実際の時間を表示するオプションがあるかどうか疑問に思っていました。

理想的には、Shell:メソッドを使用してyumに複数のパッケージをインストールすることと、組み込みのyum:with_itemsメソッドを使用することの違いをベンチマークしたいと思います。 ATMストップウォッチを持ってここに座っていますが、正確な時刻が必要です。

22
Raath

コールバックプラグイン を追加することで、Ansibleタスク期間のタイミングを解決しました。コールバックプラグインは、Ansible実行のコンテキストで発生するイベントに基づいて独自の任意のコードを実行できるように設計されています。

私が使用するプラグイン は、callback_pluginsディレクトリを作成し、そこにpythonスクリプトをドロップすることで、簡単にデプロイできます。

プレイブックの実行が終了したときの出力のサンプルを次に示します。

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の実行の前に追加します。これにより、個々のタスク期間がすべてうまく集計されます。

編集:

Ansible v2.0.0以降、この特定のプラグインにはAnsible自体が付属しています。 callback_whitelist = profile_tasksファイルに~/.ansible.cfgを追加するだけです。

50
Mike Putnam

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します。

3
Duncan Lock

残念ながら、デフォルトではパフォーマンスログはありません。

ただし、独自のcallbackリスナーを ansible に追加できます。このコールバックは、アクションの開始時と終了時に通知されます...

完全な例については、 datadog プラグインをご覧ください。

0
mestachs