18
Automating Zabbix with Puppet

Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

Embed Size (px)

Citation preview

Page 1: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

Automating Zabbix with Puppet

Page 2: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

$ whoamiWerner Dijkerman

WorkCurrent: System Engineer @ iWelcomePrevious: Promedico, Bol.com

Private34 years old, Married (Francina), 2 cats (Janice & Vlokje)

TV shows, movies, Music & Monitoring

www.werner-dijkerman.nl@djwasabiman

Page 3: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

wdijkerman-zabbixStarted April 2014, 36 committers, 74 pull requests

Page 4: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

PuppetConfiguration management utility

The user describes system resources and their state, either using Puppet's declarative language or a Ruby DSL (domain-specific language).

• Automatically installs /configures systems / applications• Keep all systems in sync

Page 5: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

Puppetpackage { 'zabbix-agent': ensure => present,}

service { 'zabbix-agent': ensure => running, require => Package['zabbix-agent']}

Page 6: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

file { '/etc/zabbix/zabbix_server.conf': ensure => present, owner => 'zabbix', group => 'zabbix', mode => '0640', notify => Service['zabbix-server'], require => Package['zabbix-server-mysql'], content => template('zabbix/zabbix_server.conf.erb'), }### option: startpollers# number of pre-forked instances of pollers.#StartPollers=<%= @startpollers %>

Page 7: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

zabbix::serverWhat database?• PostgreSQL• MySQL

What kind of setup?• Single node• Multi node

Page 8: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

node 'zabbix.example.com' { class { 'apache': mpm_module => 'prefork', } include apache::mod::php class { 'postgresql::server':} class { 'zabbix': zabbix_url => 'zabbix.example.com', }}

Page 9: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

class { 'zabbix': zabbix_url => 'zabbix.example.com', zabbix_version => '2.4', zabbix_timezone => 'Europe/Amsterdam', database_type => 'mysql', database_user => 'zabbix', database_password => 'V3ry5tr0ngP@$$0rd', apache_use_ssl => true, apache_ssl_cert => '/etc/httpd/conf.d/keys/zabbix_ssl.crt', apache_ssl_key => '/etc/httpd/conf.d/keys/zabbix_ssl.key', manage_resources => true, manage_database => true, manage_vhost => true, cachesize => '128M', startpollers => 10, timeout => 17,}

Page 10: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

zabbix::proxyWhat database?• PostgreSQL• MySQL• Sqlite3

What kind of setup?• Single node• Multi node

Page 11: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

node 'server11.example.com' { class { 'postgresql::client': } class { 'zabbix::proxy': zabbix_server_host => '192.168.20.11', manage_database => false, database_host => 'server12.example.com', database_name => 'zabbix-proxy', database_user => 'zabbix-proxy', database_password => 'zabbix-proxy', }}

node 'server12.example.com' { class { 'postgresql::server': listen_addresses => '192.168.30.12' } class { 'zabbix::database': zabbix_type => 'proxy', zabbix_proxy_ip => '192.168.30.11', database_name => 'zabbix-proxy', database_user => 'zabbix-proxy', database_password => 'zabbix-proxy', }}

Page 12: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

zabbix::javagatewaynode server05.example.com { class { 'zabbix::javagateway': }}

For the zabbix::server (or zabbix::proxy)node server01.example.com { class { 'zabbix::server': zabbix_url => 'zabbix.example.com', javagateway => '192.168.20.15', }}

Page 13: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

zabbix::agentclass { 'zabbix::agent': server => '192.168.20.11', timeout => 10, include_dir => '/etc/zabbix/zabbix_agent.d',}

'server' parameter is ip/fqdn for the zabbix-server, or zabbix-proxy

Page 14: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

zabbix::userparametersUserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}’UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c aliveUserParameter=mysql.version,mysql –V

zabbix::userparameters { 'mysql': source => 'puppet:///modules/mysql/zabbix_mysqld.conf', template => 'Template App MySQL',}

Page 15: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

Installing Template

zabbix::template { 'Template App MySQL': templ_source => 'puppet:///modules/zabbix/MySQL.xml'}

zabbix::template

Page 16: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

manage_resources => truePuppetdb

Storing puppet-agent related data in database.

ZabbixMake use of the APIRuby gem: express42/zabbixapi

Page 17: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

node 'database.example.com' { class { 'mysql::server':} class { 'zabbix::agent': server => '192.168.20.11', manage_resources => true, zbx_group => 'Linux Servers', zbx_templates => [ 'Template OS Linux', 'Template App SSH Service', 'My Awesome Template', ] }}

Page 18: Automating Zabbix with Puppet (Werner Dijkerman / 26-11-2015)

Questions?

Puppet Forge:https://forge.puppetlabs.com/wdijkerman/zabbix

Github:https://github.com/dj-wasabi/puppet-zabbix

Pull requests always welcome!