View
1.055
Download
3
Embed Size (px)
Citation preview
Automating Zabbix with Puppet
$ 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
wdijkerman-zabbixStarted April 2014, 36 committers, 74 pull requests
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
Puppetpackage { 'zabbix-agent': ensure => present,}
service { 'zabbix-agent': ensure => running, require => Package['zabbix-agent']}
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 %>
zabbix::serverWhat database?• PostgreSQL• MySQL
What kind of setup?• Single node• Multi node
node 'zabbix.example.com' { class { 'apache': mpm_module => 'prefork', } include apache::mod::php class { 'postgresql::server':} class { 'zabbix': zabbix_url => 'zabbix.example.com', }}
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,}
zabbix::proxyWhat database?• PostgreSQL• MySQL• Sqlite3
What kind of setup?• Single node• Multi node
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', }}
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', }}
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
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',}
Installing Template
zabbix::template { 'Template App MySQL': templ_source => 'puppet:///modules/zabbix/MySQL.xml'}
zabbix::template
manage_resources => truePuppetdb
Storing puppet-agent related data in database.
ZabbixMake use of the APIRuby gem: express42/zabbixapi
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', ] }}
Questions?
Puppet Forge:https://forge.puppetlabs.com/wdijkerman/zabbix
Github:https://github.com/dj-wasabi/puppet-zabbix
Pull requests always welcome!