No commit activity in last 3 years
No release in over 3 years
Report on the run time of cookbooks, recipes, and resources
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

> 10.14
 Project Readme

Description

This is a Chef report handler that reports the execution time spent in each: cookbook, recipe, and resource.

Requirements

Only works on Chef >= 10.14

Usage

There are two ways to use Chef Handlers.

Method 1 (recommended)

Use the chef_handler cookbook by Opscode. Create a recipe with the following:

include_recipe "chef_handler"

# Install `chef-handler-profiler` gem during the compile phase
chef_gem "chef-handler-profiler"

# load the gem here so it gets added to the $LOAD_PATH, otherwise chef_handler
# will fail.
require 'chef/handler/chef_profiler'

# Activate the handler immediately during compile phase
chef_handler "Chef::Handler::Profiler" do
  source "chef/handler/chef_profiler"
  action :nothing
end.run_action(:enable)

Method 2

Install the gem ahead of time, and configure Chef to use them:

gem install chef-handler-profiler

Then add to the configuration (/etc/chef/solo.rb for chef-solo or /etc/chef/client.rb for chef-client):

require "chef/handler/chef_profiler"
report_handlers << Chef::Handler::Profiler.new
exception_handlers << Chef::Handler::Profiler.new

Example output

Run chef with -l debug to see profiler output, example:

$ chef-solo -j config.json -l debug
...
[2012-09-18T17:40:31+00:00] INFO: Running report handlers
[2012-09-18T17:40:31+00:00] INFO: Resources updated this run:
[2012-09-18T17:40:31+00:00] INFO:   chef_handler[Chef::Handler::Profiler]
[2012-09-18T17:40:31+00:00] DEBUG: Elapsed_time  Cookbook
[2012-09-18T17:40:31+00:00] DEBUG: ------------  -------------
[2012-09-18T17:40:31+00:00] DEBUG:    16.040867  python
[2012-09-18T17:40:31+00:00] DEBUG:     7.831706  nano
[2012-09-18T17:40:31+00:00] DEBUG:     3.233159  base
[2012-09-18T17:40:31+00:00] DEBUG:     0.699011  generic-users
[2012-09-18T17:40:31+00:00] DEBUG:     0.665569  chef
[2012-09-18T17:40:31+00:00] DEBUG:     0.176383  postfix
[2012-09-18T17:40:31+00:00] DEBUG:     0.174411  ntp
[2012-09-18T17:40:31+00:00] DEBUG:     0.001780  chef_handler
[2012-09-18T17:40:31+00:00] DEBUG: 
[2012-09-18T17:40:31+00:00] DEBUG: Elapsed_time  Recipe
[2012-09-18T17:40:31+00:00] DEBUG: ------------  -------------
[2012-09-18T17:40:31+00:00] DEBUG:    16.040867  python::default
[2012-09-18T17:40:31+00:00] DEBUG:     7.831706  nano::default
[2012-09-18T17:40:31+00:00] DEBUG:     1.414983  base::pki
[2012-09-18T17:40:31+00:00] DEBUG:     1.228345  base::utilities
[2012-09-18T17:40:31+00:00] DEBUG:     0.699011  generic-users::default
[2012-09-18T17:40:31+00:00] DEBUG:     0.660846  chef::omnibus
[2012-09-18T17:40:31+00:00] DEBUG:     0.374277  base::default
[2012-09-18T17:40:31+00:00] DEBUG:     0.176383  postfix::default
[2012-09-18T17:40:31+00:00] DEBUG:     0.174411  ntp::default
[2012-09-18T17:40:31+00:00] DEBUG:     0.103661  base::dracut
[2012-09-18T17:40:31+00:00] DEBUG:     0.085744  base::users
[2012-09-18T17:40:31+00:00] DEBUG:     0.010829  base::sshd_allow
[2012-09-18T17:40:31+00:00] DEBUG:     0.005859  base::kernel
[2012-09-18T17:40:31+00:00] DEBUG:     0.005025  base::sudoers
[2012-09-18T17:40:31+00:00] DEBUG:     0.004723  chef::profiler_handler
[2012-09-18T17:40:31+00:00] DEBUG:     0.004437  base::prelink
[2012-09-18T17:40:31+00:00] DEBUG:     0.001780  chef_handler::default
[2012-09-18T17:40:31+00:00] DEBUG: 
[2012-09-18T17:40:31+00:00] DEBUG: Elapsed_time  Resource
[2012-09-18T17:40:31+00:00] DEBUG: ------------  -------------
[2012-09-18T17:40:31+00:00] DEBUG:     7.755572  package[nano]
[2012-09-18T17:40:31+00:00] DEBUG:     0.549213  remote_file[/usr/local/bin/prlimit]
[2012-09-18T17:40:31+00:00] DEBUG:     0.483825  chef_gem[gelf]
[2012-09-18T17:40:31+00:00] DEBUG:     0.433518  execute[remove_pip_pynotify]
[2012-09-18T17:40:31+00:00] DEBUG:     0.391915  execute[install_clint==0.3.1]
[2012-09-18T17:40:31+00:00] DEBUG:     0.391519  execute[install_Genshi==0.6]
[2012-09-18T17:40:31+00:00] DEBUG:     0.389266  execute[install_Jinja2==2.6]
[2012-09-18T17:40:31+00:00] DEBUG:     0.385632  execute[install_zope.interface==3.8.0]
[2012-09-18T17:40:31+00:00] DEBUG:     0.384590  execute[install_gitdb==0.5.4]
[2012-09-18T17:40:31+00:00] DEBUG:     0.384320  execute[install_pycurl==7.19.0]
[2012-09-18T17:40:31+00:00] DEBUG:     0.382389  gem_package[teamocil]
[2012-09-18T17:40:31+00:00] DEBUG:     0.382325  execute[install_python-dateutil==1.5]
[2012-09-18T17:40:31+00:00] DEBUG:     0.381351  execute[install_PyMySQL==0.5]
[2012-09-18T17:40:31+00:00] DEBUG:     0.380537  execute[install_iso8601==0.1.4]
[2012-09-18T17:40:31+00:00] DEBUG:     0.380504  execute[install_pycassa==1.4.0]
[2012-09-18T17:40:31+00:00] DEBUG:     0.379317  execute[install_argparse==1.2.1]
[2012-09-18T17:40:31+00:00] DEBUG:     0.379029  execute[install_amqplib==1.0.2]
[2012-09-18T17:40:31+00:00] DEBUG:     0.378980  execute[install_pbs==0.108]
[2012-09-18T17:40:31+00:00] DEBUG:     0.378710  execute[install_apache-libcloud==
...

Todo

  • Might be nice to dump output to JSON files.
  • Different output, such as having resources grouped under their recipes, and recipes grouped under cookbooks.

License and Author

Licensed under the MIT license. See LICENSE file for details.

Author:: Joe Miller https://github.com/joemiller, https://twitter.com/miller_joe