Покажите время, необходимое для выполнения каждой бродягиной задачи

17

Я конвертирую брандмауэра из оболочки в возможность, и мне было интересно, есть ли возможность показать фактическое время, необходимое для выполнения каждой задачи?

В идеале я хочу сравнить разницу между установкой нескольких пакетов в yum с помощью метода shell: и встроенного метода yum: with_items. ATM Я сижу здесь с секундомером, но для этого мне нужны точные времена.

    
задан Raath 08.11.2013 в 11:56
источник

4 ответа

40

Я решил выполнить синхронизацию продолжительности длительной задачи, добавив плагин обратного вызова . Плагины обратного вызова были разработаны для того, чтобы вы могли запускать свой собственный arbirary-код на основе событий, которые происходят в контексте прогона 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 к запуску незанятой игры. Это красиво суммирует все длительности отдельных задач.

EDIT:

По сравнению с Ansible v2.0.0 этот конкретный плагин поставляется с самим Ansible! Просто добавьте callback_whitelist = profile_tasks в файл ~/.ansible.cfg .

    
ответ дан Mike Putnam 18.03.2015 в 22:08
источник
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 , где вы хотите вывести отметку времени.

    
ответ дан Duncan Lock 24.04.2014 в 22:18
источник
0

К сожалению, по умолчанию нет регистрации производительности.

Но вы можете добавить свой собственный callback прослушиватель в доступный . Этот обратный вызов будет уведомлен о начале и конце действий ...

В качестве примера рассмотрим плагин datadog

    
ответ дан mestachs 10.03.2014 в 21:18
источник
-2

Просто добавьте исполнение всей пьесы Ansible с time . Убедитесь, что ваш скрипт shell: выполняет то же самое, что и модуль yum: , такой как кеш обновления, загрузка файлов и использование локально кэшированных и т. Д. И т. Д.

Преимущество использования yum: , помимо прочего, заключается в том, что Ansible может лучше обрабатывать неудавшиеся установки, а не просто слепо запускать команду shell: в качестве монолитной вещи.

Я думаю, что разница будет крайне мала (доли секунды до 2-3 секунд). Я предполагаю, что вам нужно будет проводить свой тест десятки раз, чтобы получить статистически достоверные результаты.

    
ответ дан Mxx 09.11.2013 в 05:26
источник