The Art and Zen of Managing Nagios
with Puppet
Michael Merideth - VictorOps
mike@victorops.com
Puppet and Nagios
• Why use config management?
• Using Puppet with Nagios:
• Generating config
• Data separation
• Pr...
Why Config Management?
The age of virtualization
• IT pros, even at startups, are managing hundreds
of nodes per person...
DevOps and Config Management
DevOps from an IT perspective:
• Infrastructure as code
• SCM as an IT workflow tool
• Co...
Key Puppet Features
• Exported Resources
• Hiera
• Inline Templates
• Facter
• Nagios Resource Types
• Puppet Forge
Key Puppet Features
Exported Resources:
• A resource gets defined on one host, and
implemented on another
• Requires t...
Exported Resources
A resource gets defined on one host (web1.dev):
@@nagios_service { "${::hostname}.${::vo_env}-http": ...
Key Puppet Features
Hiera:
• Separate code from data
• Set defaults and provide overrides
• Encrypted back-ends mean s...
Key Puppet Features
Inline Templates:
• Not just for file content
• Allows the use of native
Ruby code within Puppet
...
Key Puppet Features
Facter:
• Variables defined at run-time,
on the client
• Extensible with Ruby
libraries
Key Puppet Features
Nagios Resource Types:
• Makes creating Nagios configs simple
• Enforces correct syntax
• Not suit...
Key Puppet Features
Puppet Forge:
• A public repository of Puppet modules
• Modules can be libraries, defined resource ...
Why Not Use an Existing Module?
Functionality I’m looking for:
• Automatically add new hosts
• Provision service checks...
This Approach Isn’t For Everybody
This Will Work Great if…
• Servers have
functional names
• Environment is
moderatel...
Putting It All Together
Facter and Puppet Policy Define Roles
• Facter provides things like fqdn, IP, virtual vs.
physi...
From Facts to Roles
# vo_env( development or staging)
case $::domain {
/^.*dev..*.victorops.net$/: { $vo_env = 'dev' } ...
Putting It All Together
Hiera defines the variables
• Sane defaults for most values
• Environment-specific overrides (d...
hiera.yaml
---
:backends:
- yaml
:yaml:
:datadir: "/etc/puppet/environments/%{::environment}/hieradata"
:hierarchy: ...
Example Hiera Data
nagios_serverip: '10.2.0.3'
nagios_config_tmpdir: '/etc/nagios3/tmp/'
nagios_config_rundir: '/etc/na...
Putting It All Together
Clients build their own config:
• Each client figures out its own hostgroup
memberships
• Arra...
Putting It All Together
Special service definitions get embedded
with the node’s profile
• A change to a service config...
Putting It All Together
Common service definitions are templatized
• Not everything needs to be built dynamically
• Som...
Ugly Hack Alert
Dynamic files get built every
run, installed if there’s a diff
• Allows automatic removal of
decommiss...
Sidebar: Monitoring Puppet
On the Puppet master:
• Apache and passenger processes
• PuppetDB processes
• Optionally pu...
The Demo Environment
Linux
Ubuntu 14.04LTS “Trusty”
Puppet
Community Version 3.7.1
Nagios
Core Version 3.5.1 (stock ...
The Demo Environment
Vagrant
• Awesome way to test Puppet code as
you develop
Github repository
• Contains Vagrantfil...
Running low on slides, so it must be…
DEMO TIME!
The Demo Environment
https://github.com/victorops/puppet-nagios
• Check it out
• Contribute!
• Or fork it! I don’t min...
Questions?
The End
Michael Merideth
mike@victorops.com
@vo_mike
of 30

Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios with Puppet

Mike Merideth's presentation on The Art and Zen of Managing Nagios with Puppet. The presentation was given during the Nagios World Conference North America held Oct 13th - Oct 16th, 2014 in Saint Paul, MN. For more information on the conference (including photos and videos), visit: http://go.nagios.com/conference
Published on: Mar 3, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios with Puppet

  • 1. The Art and Zen of Managing Nagios with Puppet Michael Merideth - VictorOps mike@victorops.com
  • 2. Puppet and Nagios • Why use config management? • Using Puppet with Nagios: • Generating config • Data separation • Provisioning and de-provisioning • Monitoring Puppet • Demo Time!
  • 3. Why Config Management? The age of virtualization • IT pros, even at startups, are managing hundreds of nodes per person • There are simply too many running OSes for most shops to manage manually • Config management solves the problems of drift and inconsistency • Easy to rebuild, easy to back up • Config management becomes living documentation
  • 4. DevOps and Config Management DevOps from an IT perspective: • Infrastructure as code • SCM as an IT workflow tool • Continuous integration • Unit testing • Integration testing • Letting the developers into the sandbox
  • 5. Key Puppet Features • Exported Resources • Hiera • Inline Templates • Facter • Nagios Resource Types • Puppet Forge
  • 6. Key Puppet Features Exported Resources: • A resource gets defined on one host, and implemented on another • Requires the use of PuppetDB, which usually means a Puppet Master • Saves having to use shared storage or insecure file transfers • Keeps the number of configuration files low
  • 7. Exported Resources A resource gets defined on one host (web1.dev): @@nagios_service { "${::hostname}.${::vo_env}-http": check_command => 'check_http', use => "${::vo_env}-service", display_name => 'http port 80', host_name => "${::fqdn}", servicegroups => 'application-services', service_description => "${::hostname}.${::vo_env}-http", tag => "${::vo_env}-service", } And “collected” on another (nagios1.dev): Nagios_service <<| tag == “${::vo_env}-service” |>>
  • 8. Key Puppet Features Hiera: • Separate code from data • Set defaults and provide overrides • Encrypted back-ends mean security, even if your source code is stolen
  • 9. Key Puppet Features Inline Templates: • Not just for file content • Allows the use of native Ruby code within Puppet policy
  • 10. Key Puppet Features Facter: • Variables defined at run-time, on the client • Extensible with Ruby libraries
  • 11. Key Puppet Features Nagios Resource Types: • Makes creating Nagios configs simple • Enforces correct syntax • Not suitable for every config in every file • Warning: This functionality is getting externalized
  • 12. Key Puppet Features Puppet Forge: • A public repository of Puppet modules • Modules can be libraries, defined resource type collections, or classes • OMG WARNING: 3rd party submissions are not evaluated by Puppet Labs
  • 13. Why Not Use an Existing Module? Functionality I’m looking for: • Automatically add new hosts • Provision service checks in other modules • Automatically remove deactivated hosts • Make use of host and service groups
  • 14. This Approach Isn’t For Everybody This Will Work Great if… • Servers have functional names • Environment is moderately dynamic • Every host and service is managed by Puppet • 10s or 100s of nodes Keep Looking if… • Highly elastic environment • Thousands of nodes • Ad-hoc hosts and services • Need instant response to changes
  • 15. Putting It All Together Facter and Puppet Policy Define Roles • Facter provides things like fqdn, IP, virtual vs. physical, etc. • Puppet policy assigns roles based on those facts • Profile classes are defined for each role
  • 16. From Facts to Roles # vo_env( development or staging) case $::domain { /^.*dev..*.victorops.net$/: { $vo_env = 'dev' } /^.*stg..*.victorops.net$/: { $vo_env = 'stg' } default: { fail('VO Environment cannot be determined') } } # vo_location ( physical location, or 'vagrant' for vagrant environments ) case $::domain { /^.*vagrant.victorops.net$/: { $vo_location = 'vagrant' } default: { fail('VO Location cannot be determined') } } # Server-type classification by hostname $vo_st_nagios_server = $::hostname =~ /^nagios[0-9].*$/ $vo_st_puppet_server = $::hostname =~ /^puppet[0-9].*$/ $vo_st_web_server = $::hostname =~ /^web[0-9].*$/ $vo_st_haproxy_server = $::fqdn =~ /^haproxy.*/
  • 17. Putting It All Together Hiera defines the variables • Sane defaults for most values • Environment-specific overrides (dev, staging, production) • Site-specific overrides for different datacenters
  • 18. hiera.yaml --- :backends: - yaml :yaml: :datadir: "/etc/puppet/environments/%{::environment}/hieradata" :hierarchy: - "%{::fqdn}” - "%{::vo_env}.%{::vo_location}" - "%{::vo_env}" - "%{::vo_location}" - defaults
  • 19. Example Hiera Data nagios_serverip: '10.2.0.3' nagios_config_tmpdir: '/etc/nagios3/tmp/' nagios_config_rundir: '/etc/nagios3/objects/' nagiosadmin_password: '$apr1$K9h.rQtY$r182KTHAW0IOVSHMW3.DY1' nag_local_servicegroups: - 'database-services' - 'application-services' - 'system-services' nag_local_contactgroups: - 'sysops' - 'devops'
  • 20. Putting It All Together Clients build their own config: • Each client figures out its own hostgroup memberships • Array is built with an inline template • Other facts integrate into the host definition • NRPE config built from a common template
  • 21. Putting It All Together Special service definitions get embedded with the node’s profile • A change to a service config means a change to how you monitor it • Manage that all in one place • NRPE include_dir enables custom NRPE configs
  • 22. Putting It All Together Common service definitions are templatized • Not everything needs to be built dynamically • Some services are monitored on all hosts • A single template means more configuration is in one place • Templates can be easier to debug
  • 23. Ugly Hack Alert Dynamic files get built every run, installed if there’s a diff • Allows automatic removal of decommissioned hosts • Prevents excessive Nagios restarts
  • 24. Sidebar: Monitoring Puppet On the Puppet master: • Apache and passenger processes • PuppetDB processes • Optionally puppet-dashboard or Foreman processes On the client: • Watch file age on last_run_summary.yaml • last_run_summary.yaml can also be parsed for failures
  • 25. The Demo Environment Linux Ubuntu 14.04LTS “Trusty” Puppet Community Version 3.7.1 Nagios Core Version 3.5.1 (stock for Ubuntu 14.04)
  • 26. The Demo Environment Vagrant • Awesome way to test Puppet code as you develop Github repository • Contains Vagrantfile and complete Puppet policy • github.com/victorops/puppet-nagios
  • 27. Running low on slides, so it must be… DEMO TIME!
  • 28. The Demo Environment https://github.com/victorops/puppet-nagios • Check it out • Contribute! • Or fork it! I don’t mind! • If you like, help work towards a Puppet Forge module: • Paramaterized vo_nagios module • Support more Nagios versions • Cross platform support • Unit tests • Documentation
  • 29. Questions?
  • 30. The End Michael Merideth mike@victorops.com @vo_mike

Related Documents