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.
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
.
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.
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
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.
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