Puppet – Como instalar e configurar o zabbix-agent de forma automática via Puppet

Como instalar e configurar o zabbix-agent 3.x de forma automática via Puppet.

Instalação em servidores RedHat/Centos 7
Ubuntu 14
Debian 7 e 8

Ambiente Puppet:
Puppet 4.3
Puppet Server 2.2.1
Puppet-agent 1.3.5

Pré-requisitos:
Puppet-agent instalado e funcionando nos nodes/clientes.

Repositórios Zabbix Centos/Redhat
http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/

Ubuntu
http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/

Debian
http://repo.zabbix.com/zabbix/3.0/debian/pool/main/z/

1. Criação do módulo

Logado no Puppet Server crie o módulo zabbixagent.

#cd /etc/puppetlabs/code/environments/production/modules
#puppet module generate devopslab-zabbixagent --skip-interview

2. criação da pasta “templates” para o armazenamento do template

#mkdir /etc/puppetlabs/code/environments/production/modules/zabbixagent/templates

3. Criação do template zabbix_agent.rb

Copie o arquivo zabbix_agent.conf para dentro da pasta “templates” e renomeie-o para zabbix_agent.rb.

[root@puppetserver-01 templates]# mv -v zabbix_agentd.conf zabbix_agentd.rb

O arquivo zabbix_agent.conf você pode pegar de alguma instalação, ou baixe o pacote zabbix-agent.rpm abra e copie o arquivo zabbix_agent.conf.

Altere as diretivas:
#vi zabbix_agentd.rb

Server=servidorzabbix-exemplo.devopslab.com.br
ListenIP=<%= @ipaddress_enp0s3 %>
ServerActive=proxyzabbix-exemplo.devopslab.com.br
Hostname=<%= @hostname %>

Basicamente você informou quais são os servidores Zabbix Server e Proxy Server. (proxy server é opcional).
Seu IP e hostname serão configurados automáticamente através das entradas “ListenIP” e “Hostname”.
@ipaddress_enp0s3 e @hostname são os facter do puppet.

Veja como ficou meu template:

[root@puppetserver-01 templates]# grep -v ^# zabbix_agentd.rb | grep -v ^$

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
Server=servidorzabbix-exemplo.devopslab.com.br
ListenIP=<%= @ipaddress_enp0s3 %>
ServerActive=proxyzabbix-exemplo.devopslab.com.br
Hostname=<%= @hostname %>
Include=/etc/zabbix/zabbix_agentd.conf.d/

4. Definição da classe

#vi /etc/puppetlabs/code/environments/production/modules/zabbixagent/manifests/init.pp

class zabbixagent {

#expressao condicional para instalacao dos repositorios.
if $osfamily == 'RedHat' and $operatingsystemrelease =~ /^7.*/  {
   package {'zabbix-release':
         provider => rpm,
         ensure   => installed,
         source   => "http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm"
        }
    }

#Instalacao da versao mais nova do zabbix-agent
package { [ 'zabbix-agent' ]:
	ensure    => latest,
	require   => Package['zabbix-release'],
	}

#Zabbix-agent rodando
service { 'zabbix-agent':
	ensure    => 'running',
	enable    => 'true',
	require   => Package['zabbix-agent'],
	}

#criando o arquivo de configuracao zabbix_agent.conf.
file 	{ "zabbix_agentd.conf":
      	path => "/etc/zabbix/zabbix_agentd.conf",
	content => template("zabbixagent/zabbix_agentd.rb"),
	#crie a pasta "templates" em ../zabbixagent/"
	#o template zabbix_agentd.rb vai ficar dentro da pasta templates.
	owner     => 'root',
	group     => 'root',
	mode      => '0644',
	notify    => Service['zabbix-agent'],
	}
}

Valide a classe para garantir a falta de erros.

#puppet parser validate init.pp

5. Definição dos nodes (clientes)

Basta agora criar um cliente e declarar a classe.

#vi /etc/puppetlabs/code/environments/production/manifests/cliente-01.pp

node 'cliente-01.devopslab.com.br' {	
	include	zabbixagent
}

No cliente
Por fim se logue no cliente e rode o comando “puppet agent -t“, isto vai instalar, configurar e iniciar o Zabbix-agent.

Instalação em Ubuntu e Debian

Tudo que foi feito até aqui, também deve ser feito em sistemas Ubuntu e Debian, porém tem algumas coisas que mudam em relação ao Centos/Redhat.

Template Ubuntu/Debian
O arquivo zabbix_agentd.conf é diferente entre Centos/Redhat e Ubuntu/Debian, então você vai criar um novo template por exemplo zabbix_agentd.conf.ubuntu.rb.
Neste caso você vai copiar o zabbix_agentd.conf de uma instalação Ubuntu.

Facter da interface de rede
No Centos/Redhat 7 a interface de rede é nomeada como “enp0s3”, no Ubuntu/Debian utiliza-se o bom e velho “eth0”.
Então edite o template zabbix_agentd.conf.ubuntu.rb e deixe o ListenIP desta forma:
ListenIP=<%= @ipaddress_eth0 %>

Lembrando que @ipaddress_eth0 é a consulta do facter.

Abaixo segue uma classe que eu utilizo para a instalação do agente Zabbix em Ubuntu.

class zabbixagent::ubuntu {

#expressao condicional para instalacao do repositorio Ubuntu
if $osfamily == 'Debian' and $operatingsystemrelease =~ /^14.*/  {
	exec {'curl http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb -sJL -o /tmp/zabbix-release_3.0-1+trusty_all.deb':
	path 	=> ['/usr/bin', '/usr/sbin'],
	unless  => ['test -f /tmp/zabbix-release_3.0-1+trusty_all.deb']
	}
	package  {'zabbix-release':
	provider => dpkg,
	ensure   => installed,
	source   => '/tmp/zabbix-release_3.0-1+trusty_all.deb'
	}
}

#Instalacao da versao mais nova do zabbix-agent
package { ['zabbix-agent']:
	ensure    => latest,
	require   => Package['zabbix-release'],
	}

#Zabbix-agent rodando
service {'zabbix-agent':
	ensure    => 'running',
	enable    => 'true',
	require   => Package['zabbix-agent'],
	}

#criando o arquivo de configuracao zabbix_agent.conf.
file 	{'zabbix_agentd.conf':
      	path => '/etc/zabbix/zabbix_agentd.conf',
	content => template('zabbixagent/zabbix_agentd.conf.ubuntu.rb'),
	#crie a pasta 'templates' em ../zabbixagent/'
	#o template zabbix_agentd.conf.ubuntu.rb vai ficar dentro da pasta templates.
	owner     => 'root',
	group     => 'root',
	mode      => '0644',
	notify    => Service['zabbix-agent'],
	}

}

Até mais.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *