terça-feira, 28 de agosto de 2012

Configurando DBforBIX no Zabbix


     Nesse tutorial vou abordar a instalação e configuração do DBforBIX, uma excelente ferramenta de coleta de dados de Banco de Dados para o Zabbix. Ela suporta vários banco de dados, como MySQL, PostgreSQL, Oracle, entre outros.
     O DBforBIX age como um "intermediário" entre o servidor Zabbix e o banco de dados, fazendo a coleta dos dados no banco de dados e as enviando ao servidor Zabbix. Veja ilustração abaixo:
*Ilustração reproduzida a partir da documentação oficial do DBforBIX



     Pré-requisitos:

  • Centos 5x ou 6x (outras distro também são suportadas)
  • Java SE 1.6
  • Zabbix 1.8x ou posterior (funciona bem no Zabbix 2.0 :-) )
     Para que o DBforBIX funcione, é necessário que a máquina de instalação tenha acesso ao banco de dados que será monitorado. Outra alternativa, até mais segura, é fazer uma instalação stand-alone, ou seja, cada banco de dados ter o DBforBIX instalado no próprio host. Porém, além de isso gerar uma demanda maior de tempo de trabalho e complicar um pouco o gerenciamento, nem sempre isso é possível.
     No meu caso (que é o exemplo usado neste tutorial) fiz a instalação no Zabbix Server e criei uma VPN para cada host que possuí um banco a ser monitorado; isso porquê tenho vários hosts que conecto por meio da Internet, assim evito trafegar dados de forma "aberta".

     Instalação


  Faça o download em http://www.smartmarmot.com/?s2member_file_download=dbforbix-0.6.zip e descompacte o arquivo em /opt/dbforbix
  Cria uma entrada no init.d:
# cd /opt/dbforbix
# cp init.d/dbforbix /etc/init.d/

  Deixa arquivos executáveis:
# chmod +x /etc/init.d/dbforbiix
# chmod +x run.sh

  Habilita inicio automático
# chkconfig --add dbforbix
# chkconfig dbforbix on


     Configuração


     Toda a configuração do dbforbix fica em /opt/dbforbix/conf/config.props. Vamos utilizar o arquivo de exemplo para fazermos a configuração incial:

# cd /opt/dbforbix
# cp conf/config.props.sample conf/config.props
    
    Nessa instalação, usarei os seguintes dados como exemplo:

IP do Servidor Zabbix: 10.1.1.1
IP do banco Mysql que irei monitorar: 10.1.1.20
IP do banco PostgreSQL que irei monitorar: 10.1.1.30
Nome da base Mysql: my-db-mysql
Nome da base PostgreSQL: my-db-pgsql
Nome do host Mysql cadastrado no Zabbix=DB-Mysql
Nome do host PostgreSQL cadastrado no Zabbix=DB-Pgsql

    É recomendável que o DBforBIX utilize um usuário específico para esse fim. Abaixo crio o usuário zabbix_monitor no Mysql e PostgreSQL.

# Mysql
mysql> CREATE USER 'zabbix'@'%' identified by 'minhasenha';
mysql> GRANT SELECT, SHOW VIEW ON  *.* TO  'zabbix'@'%';

# PostgreSQL
postgres# CREATE USER zabbix_monitor WITH PASSWORD 'minhasenha';
postgres# GRANT SELECT ON pg_stat_activity to zabbix_monitor;
postgres# GRANT SELECT ON pg_stat_activity to zabbix_monitor;
postgres# GRANT SELECT ON pg_database to zabbix_monitor;
postgres# GRANT SELECT ON pg_authid to zabbix_monitor;
postgres# GRANT SELECT ON pg_stat_bgwriter to zabbix_monitor;
postgres# GRANT SELECT ON pg_locks to zabbix_monitor;
postgres# GRANT SELECT ON pg_stat_database to zabbix_monitor;


    Para outros banco de dados, você pode consultar a documentação oficial.

     Vamos configurar agora o dbforbix:
# vim conf/config.props.sample

#Lista de servidores Zabbix
ZabbixServerList=ZabbixServer

#Parâmetros dos servidor Zabbix
ZabbixServer.Address=10.1.1.1
ZabbixServer.Port=10051

#PidFile

DBforBIX.PidFile=./logs/dbforbix.pid

#Tempo de atualização dos itens
DBforBIX.Sleep=30


#Número de Thread's (máximo)
DBforBIX.MaxThreadNumber=100

#Lista de databases. É importante observar que esse é o nome do host cadastrado no Zabbix Server.
DatabaseList=DB-Mysql,DB-Pgsql 

#Altere as opções abaixo apenas se tiver necessidade:
DatabaseList.MaxActive=10

DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1


#Dados do banco Mysql
DB-Mysql.Url=jdbc:mysql://10.1.1.20:3306/my-db-mysql
DB-Mysql.User=zabbix_monitor
DB-Mysql.Password=minhasenha
DB-Mysql.DatabaseType=mysql
DB-Mysql.QueryListFile=./conf/mysqlquery.props

#Dados do banco PostgreSQL
DB-Pgsql.Url=jdbc:postgresql://10.1.1.30:5432/my-db-pgsql
DB-Pgsql.User=zabbix_monitor
DB-Pgsql.Password=minhasenha
DB-Pgsql.DatabaseType=pgsql
DB-Pgsql.QueryListFile=./conf/pgsqlquery.props


     Agora precisamos configurar as query's de consulta ao banco. Nesse caso, irei utilizar as que vem no exemplo, que já possuem bastante informações.

# mv conf/mysqlquery.props.sample conf/mysqlquery.props
# mv conf/pgsqlquery.props.sample conf/pgsqlquery.props


   O DBforBIX está configurado, basta apenas inicia-lo. Vamos configurar agora o Zabbix Server. Faça o    upload dos templates, que estão dentro da pasta Templates que vem no arquivo do DBforBIX.

    Clique em Configuration-Template


      Depois clique em Import

     Selecione o template, e clique em Import

Caso a importação tenha exito, mostrará a mensagem conforme tela abaixo:


    Importe todos os templates que irá utilizar, e pronto! Agora basta adicionar o template no host configurado e iniciar o DBforBIX, com o comando abaixo:

# service dbforbix start

OU

# /opt/dbforbix/run.sh


    Referencia