SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
R.I.Pienaar
February 2015
Puppet Performance
Profiling
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Who am I?
• Puppet user since 0.22.x
• Blog at http://devco.net
• Tweets at @ripienaar
• Volcane on IRC
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Why?
• Unit and Integration testing
• Cloud based scaling
• Maintenance windows and fast feedback
• Resource usage on the master
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Agent Life Cycle
• Agent gather facts using facter *
• Agent submit facts and request catalog
• Master compiles catalog, sends to agent *
• Agent stores catalog
• Agent applies catalog *
• Agent submits report
• Master processes report
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Facter
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Shows per fact timings
$ facter —timing
lsbdistid: 56.06ms
operatingsystem: 57.21ms
osfamily: 58.54ms
macaddress: 0.29ms
ipaddress6: 18.36ms
ipaddress6_lo: 31.41ms
mtu_dummy0: 29.82ms
vlans: 0.20ms
selinux: 11.91ms
mtu_ip_vti0: 29.09ms
Timing Facts
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Shows per fact timings…but only the setcode part
FREEGEOURL = “http://freegeoip.net/json/"
geoipinfo = JSON.parse(open(FREEGEOURL).read)
geoipinfo.each do |k, v|
next if k == "ip"
Facter.add("geo_#{k.downcase}") { setcode { v } }
end
Timing Facts
geo_latitude: 0.02ms
geo_region_name: 0.04ms
geo_metro_code: 0.04ms
geo_time_zone: 0.03ms
geo_country_code: 0.02ms
geo_country_name: 0.02ms
geo_zip_code: 0.02ms
geo_region_code: 0.04ms
geo_city: 0.04ms
geo_longitude: 0.03ms
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Restructuring fact to do the slow work in setcode
geoipinfo = nil
["country_code", “country_name”…].each do |key|
Facter.add(“geo_%s” % key.downcase) do
setcode do
geoipinfo ||= JSON.parse(open(FREEGEOURL).read)
["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key]
end
end
end
Timing Facts
geo_zipcode: 7174.49ms
geo_metro_code: 0.04ms
geo_country_code: 0.03ms
geo_region_name: 0.04ms
geo_latitude: 0.05ms
geo_area_code: 0.04ms
geo_country_name: 0.03ms
geo_city: 0.04ms
geo_longitude: 0.04ms
geo_region_code: 0.04ms
Fetch once per run
and re-use
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Add a local cache, now only the first invoke is slow
def geoip_cached_fetch
store = PStore.new(File.join(Dir.tmpdir, “fgeoip_fact.pstore"))
store.transaction do
store[:freegeoip] ||= JSON.parse(open(FREEGEOURL).read)
end
end
geoipinfo = nil
["country_code", “country_name”…].each do |key|
Facter.add(“geo_%s” % key.downcase) do
setcode do
geoipinfo ||= geoip_cached_fetch
["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key]
end
end
end
Timing Facts
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Catalog Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
Needs to find the file
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Compilation
$ strace puppet parser validate
test.pp 2>&1 |grep stat|wc -l
10546
$ strace puppet parser validate
test.pp 2>&1 |egrep '((stat|open).
+modules)'|wc -l
217
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
hiera(“apache::version”, “present”)
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
:hierarchy:
- 01_Nodes/%{::fqdn}
- 02_Domain/%{::domain}
- 03_Perimeter/%{::perimeter}/%{::datacenter}
- 03_Perimeter/%{::perimeter}
- 04_DC/%{::datacenter}
- 05_OS/%{::operatingsystem}/%{::hardwareisa}
- 05_OS/%{::operatingsystem}
- 06_Manufacturer/%{::manufacturer}
- 07_RealTime/%{::real_time}
- 09_Mco_Teams/%{::team}
- 50_Teams/%{team}/01_Nodes/%{::fqdn}
- 50_Teams/HPCE/%{::hpce_env}/%{::hpce_type}
- 50_Teams/HPCE/%{::hpce_env}/common
- 50_Teams/%{::team}/common
- common
Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Compilation
$ puppet apply test.pp 2>&1|grep
"Looking for data source"|wc -l
3562
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
ruby code, similar issues as the fact
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
also speeds up finding
the class internally
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
No hiera lookup,
authoritative value supplied
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Profiling Compilation
$ puppet apply test.pp —profile
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
importing ‘..epel/manifests/init.pp’
importing ‘..epel/manifests/params.pp’
importing ‘..epel/manifests/rpm_gpg_key.pp’
importing ‘..puppetdb/manifests/init.pp’
importing ‘..puppetdb/manifests/params.pp’
PROFILE [apply] 2.3.1 Called defined: took 0.0001 seconds
PROFILE [apply] 2.3.2 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.3 Called validate_re: took 0.0000 seconds
PROFILE [apply] 2.3.4 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.5 Called validate_re: took 0.0000 seconds
PROFILE [apply] 2.3.6 Called downcase: took 0.0001 seconds
PROFILE [apply] 2.3.7 Called validate_re: took 0.0000 seconds
importing ‘..puppetdb/manifests/server.pp’ in environment production
PROFILE [apply] 2.3.8 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.9 Called validate_re: took 0.0000 seconds
Profiling Compilation
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Scope(Apache::Vhost[default]): Retrieving template apache/
vhost.conf.erb
template[…vhost.conf.erb]: Bound template variables for …
vhost.conf.erb in 0.00 seconds
template[…vhost.conf.erb]: Interpolated template …vhost.conf.erb in
0.05 seconds
Profiling Compilation
define apache::vhost(…) {
file { “${priority_real}-${filename}.conf":
content => template(‘apache/vhost.conf.erb’)
}
}
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
AGGREGATE PROFILING RESULTS:
compiler -> compile: 5.800916 ms (1 calls)
compiler -> evaluate_resource: 1.53646 ms (79 calls)
compiler -> evaluate_resource -> Apache::Vhost[…]: 0.148923 ms
functions: 1.892293 ms (562 calls)
functions -> include: 1.091945 ms (41 calls)
functions -> template: 0.754388 ms (137 calls)
Profiling Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Catalog apply phase
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# puppet agent —test —evaltrace
Class[Postgresql::Server::Reload]: Starting to evaluate
Class[Postgresql::Server::Reload]: Evaluated in 0.00 seconds
Class[Postgresql::Server::Config]: Starting to evaluate
Class[Postgresql::Server::Config]: Evaluated in 0.00 seconds
Class[Postgresql::Server::Service]: Starting to evaluate
Class[Postgresql::Server::Service]: Evaluated in 0.00 seconds
Apache::Vhost[puppet-localhost]: Starting to evaluate
Apache::Vhost[puppet-localhost]: Evaluated in 0.00 seconds
Package[mailcap]: Starting to evaluate
Package[mailcap]/ensure: created
Package[mailcap]: Evaluated in 65.36 seconds
Profiling the Agent
Tracing the catalog apply phase
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# report_print.rb —count 5 —report 201411101110.yaml
Report for localhost at Wed Nov 10 11:10:54 +0000 2014
Report File: /var/…/last_run_report.yaml
Report Kind: apply
Puppet Version: 3.7.3
Report Format: 4
Configuration Version: 1416395447
UUID: d4a9fac9-…-7db61b0dfa89
Log Lines: 2 (show with —log)
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Report Metrics:
Changes:
Total: 2
Events:
Total: 2
Success: 2
Failure: 0
Resources:
Total: 213
Out of sync: 2
Changed: 2
Scheduled: 0
Skipped: 0
Failed to restart: 0
Failed: 0
Restarted: 0
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Time:
Total: 28.44
Package: 15.55
Config retrieval: 7.71
File: 1.43
Exec: 1.33
Puppetdb conn validator: 0.87
Service: 0.73
Postgresql psql: 0.66
Augeas: 0.07
Ini setting: 0.04
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Resources by resource type:
107 File
38 Ini_setting
13 Exec
12 Postgresql_psql
9 Package
6 Yumrepo
6 Anchor
6 Schedule
4 Service
3 Postgresql_conf
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Slowest 5 resources by evaluation time:
15.55 Package[mailcap]
0.88 Puppetdb_conn_validator[puppetdb_conn]
0.66 File[/usr…/validate_postgresql_connection.sh]
0.31 Exec[validate postgres connection]
0.30 Service[puppetmaster]
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
5 largest managed files (only those that are readable)
3.85 KB /var/…/bin/concatfragments.sh
1.65 KB /etc/puppet/rack/config.ru
1.61 KB /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
1.23 KB /etc/puppet/puppet.conf
849.00 B /etc/httpd/conf/httpd.conf
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Questions?
twitter: @ripienaar
email: rip@devco.net
blog: www.devco.net
github: ripienaar
freenode: Volcane
geo fact: http://srt.ly/hx
report processor: http://srt.ly/gq

Weitere ähnliche Inhalte

Was ist angesagt?

Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Riccardo Terrell
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Chef
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Chef
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Chef
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Chef
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadBram Vogelaar
 
Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Ivan Rossi
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 
What\'s new in Rails 2.1
What\'s new in Rails 2.1What\'s new in Rails 2.1
What\'s new in Rails 2.1Keith Pitty
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansiblebcoca
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - IntroductionVagmi Mudumbai
 
把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡Wei Jen Lu
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecMartin Etmajer
 
Automating Infrastructure with Chef
Automating Infrastructure with ChefAutomating Infrastructure with Chef
Automating Infrastructure with ChefJennifer Davis
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13Rafael Dohms
 
Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Martin Schütte
 

Was ist angesagt? (20)

Getting Started With Aura
Getting Started With AuraGetting Started With Aura
Getting Started With Aura
 
Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomad
 
Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
What\'s new in Rails 2.1
What\'s new in Rails 2.1What\'s new in Rails 2.1
What\'s new in Rails 2.1
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansible
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 
把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
 
Automating Infrastructure with Chef
Automating Infrastructure with ChefAutomating Infrastructure with Chef
Automating Infrastructure with Chef
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13
 
Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)
 

Ähnlich wie Puppet Performance Profiling - CM Camp 2015

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Deliveryripienaar
 
Introduction to MCollective - SF PUG
Introduction to MCollective - SF PUGIntroduction to MCollective - SF PUG
Introduction to MCollective - SF PUGPuppet
 
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Puppet
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010Puppet
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resquehomanj
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Masahiro Nagano
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Yuriy Senko
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGIMike Pittaro
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and MaintenanceJazkarta, Inc.
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Managementripienaar
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Herokuronnywang_tw
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with BackstageOpsta
 
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppet
 
OSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamOSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamNETWAYS
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastMichelangelo van Dam
 

Ähnlich wie Puppet Performance Profiling - CM Camp 2015 (20)

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Delivery
 
Introduction to MCollective - SF PUG
Introduction to MCollective - SF PUGIntroduction to MCollective - SF PUG
Introduction to MCollective - SF PUG
 
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resque
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGI
 
Nginx3
Nginx3Nginx3
Nginx3
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
What's Rio 〜Standalone〜
What's Rio 〜Standalone〜What's Rio 〜Standalone〜
What's Rio 〜Standalone〜
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Management
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with Backstage
 
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
 
OSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamOSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga Team
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfast
 

Kürzlich hochgeladen

Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 

Kürzlich hochgeladen (20)

Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 

Puppet Performance Profiling - CM Camp 2015

  • 2. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Who am I? • Puppet user since 0.22.x • Blog at http://devco.net • Tweets at @ripienaar • Volcane on IRC
  • 3. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Why? • Unit and Integration testing • Cloud based scaling • Maintenance windows and fast feedback • Resource usage on the master
  • 4. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Agent Life Cycle • Agent gather facts using facter * • Agent submit facts and request catalog • Master compiles catalog, sends to agent * • Agent stores catalog • Agent applies catalog * • Agent submits report • Master processes report
  • 5. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Facter
  • 6. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Shows per fact timings $ facter —timing lsbdistid: 56.06ms operatingsystem: 57.21ms osfamily: 58.54ms macaddress: 0.29ms ipaddress6: 18.36ms ipaddress6_lo: 31.41ms mtu_dummy0: 29.82ms vlans: 0.20ms selinux: 11.91ms mtu_ip_vti0: 29.09ms Timing Facts
  • 7. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Shows per fact timings…but only the setcode part FREEGEOURL = “http://freegeoip.net/json/" geoipinfo = JSON.parse(open(FREEGEOURL).read) geoipinfo.each do |k, v| next if k == "ip" Facter.add("geo_#{k.downcase}") { setcode { v } } end Timing Facts geo_latitude: 0.02ms geo_region_name: 0.04ms geo_metro_code: 0.04ms geo_time_zone: 0.03ms geo_country_code: 0.02ms geo_country_name: 0.02ms geo_zip_code: 0.02ms geo_region_code: 0.04ms geo_city: 0.04ms geo_longitude: 0.03ms
  • 8. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Restructuring fact to do the slow work in setcode geoipinfo = nil ["country_code", “country_name”…].each do |key| Facter.add(“geo_%s” % key.downcase) do setcode do geoipinfo ||= JSON.parse(open(FREEGEOURL).read) ["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key] end end end Timing Facts geo_zipcode: 7174.49ms geo_metro_code: 0.04ms geo_country_code: 0.03ms geo_region_name: 0.04ms geo_latitude: 0.05ms geo_area_code: 0.04ms geo_country_name: 0.03ms geo_city: 0.04ms geo_longitude: 0.04ms geo_region_code: 0.04ms Fetch once per run and re-use
  • 9. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Add a local cache, now only the first invoke is slow def geoip_cached_fetch store = PStore.new(File.join(Dir.tmpdir, “fgeoip_fact.pstore")) store.transaction do store[:freegeoip] ||= JSON.parse(open(FREEGEOURL).read) end end geoipinfo = nil ["country_code", “country_name”…].each do |key| Facter.add(“geo_%s” % key.downcase) do setcode do geoipinfo ||= geoip_cached_fetch ["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key] end end end Timing Facts
  • 10. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Catalog Compilation
  • 11. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation
  • 12. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation Needs to find the file
  • 13. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Compilation $ strace puppet parser validate test.pp 2>&1 |grep stat|wc -l 10546 $ strace puppet parser validate test.pp 2>&1 |egrep '((stat|open). +modules)'|wc -l 217
  • 14. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation hiera(“apache::version”, “present”)
  • 15. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar :hierarchy: - 01_Nodes/%{::fqdn} - 02_Domain/%{::domain} - 03_Perimeter/%{::perimeter}/%{::datacenter} - 03_Perimeter/%{::perimeter} - 04_DC/%{::datacenter} - 05_OS/%{::operatingsystem}/%{::hardwareisa} - 05_OS/%{::operatingsystem} - 06_Manufacturer/%{::manufacturer} - 07_RealTime/%{::real_time} - 09_Mco_Teams/%{::team} - 50_Teams/%{team}/01_Nodes/%{::fqdn} - 50_Teams/HPCE/%{::hpce_env}/%{::hpce_type} - 50_Teams/HPCE/%{::hpce_env}/common - 50_Teams/%{::team}/common - common Compilation
  • 16. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Compilation $ puppet apply test.pp 2>&1|grep "Looking for data source"|wc -l 3562
  • 17. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation ruby code, similar issues as the fact
  • 18. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation also speeds up finding the class internally
  • 19. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation No hiera lookup, authoritative value supplied
  • 20. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Profiling Compilation $ puppet apply test.pp —profile
  • 21. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar importing ‘..epel/manifests/init.pp’ importing ‘..epel/manifests/params.pp’ importing ‘..epel/manifests/rpm_gpg_key.pp’ importing ‘..puppetdb/manifests/init.pp’ importing ‘..puppetdb/manifests/params.pp’ PROFILE [apply] 2.3.1 Called defined: took 0.0001 seconds PROFILE [apply] 2.3.2 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.3 Called validate_re: took 0.0000 seconds PROFILE [apply] 2.3.4 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.5 Called validate_re: took 0.0000 seconds PROFILE [apply] 2.3.6 Called downcase: took 0.0001 seconds PROFILE [apply] 2.3.7 Called validate_re: took 0.0000 seconds importing ‘..puppetdb/manifests/server.pp’ in environment production PROFILE [apply] 2.3.8 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.9 Called validate_re: took 0.0000 seconds Profiling Compilation class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true }
  • 22. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Scope(Apache::Vhost[default]): Retrieving template apache/ vhost.conf.erb template[…vhost.conf.erb]: Bound template variables for … vhost.conf.erb in 0.00 seconds template[…vhost.conf.erb]: Interpolated template …vhost.conf.erb in 0.05 seconds Profiling Compilation define apache::vhost(…) { file { “${priority_real}-${filename}.conf": content => template(‘apache/vhost.conf.erb’) } }
  • 23. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar AGGREGATE PROFILING RESULTS: compiler -> compile: 5.800916 ms (1 calls) compiler -> evaluate_resource: 1.53646 ms (79 calls) compiler -> evaluate_resource -> Apache::Vhost[…]: 0.148923 ms functions: 1.892293 ms (562 calls) functions -> include: 1.091945 ms (41 calls) functions -> template: 0.754388 ms (137 calls) Profiling Compilation
  • 24. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Catalog apply phase
  • 25. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # puppet agent —test —evaltrace Class[Postgresql::Server::Reload]: Starting to evaluate Class[Postgresql::Server::Reload]: Evaluated in 0.00 seconds Class[Postgresql::Server::Config]: Starting to evaluate Class[Postgresql::Server::Config]: Evaluated in 0.00 seconds Class[Postgresql::Server::Service]: Starting to evaluate Class[Postgresql::Server::Service]: Evaluated in 0.00 seconds Apache::Vhost[puppet-localhost]: Starting to evaluate Apache::Vhost[puppet-localhost]: Evaluated in 0.00 seconds Package[mailcap]: Starting to evaluate Package[mailcap]/ensure: created Package[mailcap]: Evaluated in 65.36 seconds Profiling the Agent Tracing the catalog apply phase
  • 26. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # report_print.rb —count 5 —report 201411101110.yaml Report for localhost at Wed Nov 10 11:10:54 +0000 2014 Report File: /var/…/last_run_report.yaml Report Kind: apply Puppet Version: 3.7.3 Report Format: 4 Configuration Version: 1416395447 UUID: d4a9fac9-…-7db61b0dfa89 Log Lines: 2 (show with —log) Profiling the Agent Processing reports for performance metrics
  • 27. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Report Metrics: Changes: Total: 2 Events: Total: 2 Success: 2 Failure: 0 Resources: Total: 213 Out of sync: 2 Changed: 2 Scheduled: 0 Skipped: 0 Failed to restart: 0 Failed: 0 Restarted: 0 Profiling the Agent Processing reports for performance metrics
  • 28. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Time: Total: 28.44 Package: 15.55 Config retrieval: 7.71 File: 1.43 Exec: 1.33 Puppetdb conn validator: 0.87 Service: 0.73 Postgresql psql: 0.66 Augeas: 0.07 Ini setting: 0.04 Profiling the Agent Processing reports for performance metrics
  • 29. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Resources by resource type: 107 File 38 Ini_setting 13 Exec 12 Postgresql_psql 9 Package 6 Yumrepo 6 Anchor 6 Schedule 4 Service 3 Postgresql_conf Profiling the Agent Processing reports for performance metrics
  • 30. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Slowest 5 resources by evaluation time: 15.55 Package[mailcap] 0.88 Puppetdb_conn_validator[puppetdb_conn] 0.66 File[/usr…/validate_postgresql_connection.sh] 0.31 Exec[validate postgres connection] 0.30 Service[puppetmaster] Profiling the Agent Processing reports for performance metrics
  • 31. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar 5 largest managed files (only those that are readable) 3.85 KB /var/…/bin/concatfragments.sh 1.65 KB /etc/puppet/rack/config.ru 1.61 KB /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 1.23 KB /etc/puppet/puppet.conf 849.00 B /etc/httpd/conf/httpd.conf Profiling the Agent Processing reports for performance metrics
  • 32. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Questions? twitter: @ripienaar email: rip@devco.net blog: www.devco.net github: ripienaar freenode: Volcane geo fact: http://srt.ly/hx report processor: http://srt.ly/gq