Wyświetl czas potrzebny na wykonanie każdego zadania

Konwertuję Vagrant provisioner z shella na ansible i zastanawiałem się, czy jest jakaś opcja pokazująca rzeczywisty czas potrzebny na wykonanie każdego zadania?

Najlepiej byłoby porównać różnicę pomiędzy instalacją wielu pakietów w yum przy użyciu metody shell: a wbudowaną metodą yum: with_items. ATM siedzę tu z stoperem, ale potrzebuję dokładnych godzin.

Author: Raath, 2013-11-08

4 answers

I ' ve solved for timing Ansible czas trwania zadania przez dodanie callback plugin . Wtyczki Callback zostały zaprojektowane tak, aby umożliwić uruchamianie własnego kodu arbirarego w oparciu o zdarzenia, które wydarzyły się w kontekście Ansible run.

Wtyczka, której używam , jest łatwo wdrożona, tworząc katalog callback_plugins i upuszczając do niego skrypt Pythona.

Poniżej znajduje się Przykładowe wyjście na końcu gry:
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

Dodatkowo, i prepend the polecenie shell time do Ansible-playbook run. To ładnie agreguje wszystkie okresy trwania poszczególnych zadań.

EDIT:

Od wersji Ansible v2. 0. 0 ta konkretna wtyczka jest dostarczana wraz z Ansible! Wystarczy dodać callback_whitelist = profile_tasks do pliku ~/.ansible.cfg.

 44
Author: Mike Putnam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-06 00:56:07

Ansible umieszcza znaczniki czasu w swoich dziennikach, więc możesz je wykorzystać. Możesz to włączyć za pomocą ansible.plik cfg:

[defaults]
log_path = ./ansible.log

Można też zrobić coś prostego jak to-stworzyć playbook, który wygląda tak:

---
#
# 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 }}"

Następnie include że gdziekolwiek chcesz wypisać znacznik czasu.

 3
Author: Duncan Lock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 20:18:04

Niestety, domyślnie nie ma logowania wydajności.

Ale możesz dodać własny callback do ansible . To wezwanie zostanie powiadomione o rozpoczęciu I zakończeniu działań...

Pełny przykład można znaleźć w wtyczce datadog

 0
Author: mestachs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 17:33:42

Wystarczy poprzedzić wykonanie całego Ansible playbooka time. Upewnij się, że twój skrypt shell: robi to samo co moduł yum:, na przykład Aktualizuj pamięć podręczną, pobieraj pliki vs używając lokalnie buforowanych, itd.

Zaletą używania yum: jest między innymi to, że Ansible lepiej radzi sobie z nieudanymi instalacjami, zamiast po prostu ślepo uruchamiać komendę shell: jako monolityczną rzecz.

Myślę, że różnica będzie bardzo mała (ułamki sekundy do 2-3 sekund). I wyobraź sobie, że musisz przeprowadzić swój benchmark dziesiątki razy, aby uzyskać statystycznie dokładne wyniki.

 -2
Author: Mxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-09 04:26:46