Покажите время, необходимое для выполнения каждой задачи, связанной с бродягой.
Я конвертирую брандмауэр-провайдер из оболочки в незаменимый, и мне было интересно, есть ли возможность показать фактическое время, необходимое для выполнения каждой задачи?
В идеале я хочу сравнить разницу между установкой нескольких пакетов в yum с помощью метода shell: и встроенного метода yum: with_items. ATM Я сижу здесь с секундомером, но для этого мне нужны точные времена.
Ответы
Ответ 1
Я решил выполнить синхронизацию продолжительности длительной задачи, добавив плагин обратного вызова . Плагины обратного вызова были разработаны для того, чтобы вы могли запускать свой собственный arbirary-код на основе событий, которые происходят в контексте прогона Ansible.
Плагин, который я использую, легко развертывается, создавая каталог callback_plugins и удаляя в него python script.
Вот пример полученного результата в конце запуска вашей книги:
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
.
Ответ 2
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
К сожалению, по умолчанию нет регистрации производительности.
Но вы можете добавить свой собственный callback прослушиватель в ansible. Этот обратный вызов будет уведомлен о начале и конце действий...
В качестве полного примера рассмотрим плагин datadog
Ответ 4
Просто добавьте исполнение всей пьесы Ansible с помощью time
.
Убедитесь, что ваш shell:
script выполняет то же самое, что и модуль yum:
, например кеширование обновлений, загрузка файлов и использование локально кэшированных и т.д. И т.д.
Преимущество использования yum:
заключается в том, что, помимо прочего, Ansible может лучше обрабатывать неудавшиеся установки, а не просто слепо запускать команду shell:
как монолитную вещь.
Я думаю, что разница будет крайне мала (доли секунды до 2-3 секунд). Я предполагаю, что вам нужно будет проводить свой тест десятки раз, чтобы получить статистически достоверные результаты.