quinta-feira, 13 de junho de 2013

Monitorando tamanho dos bancos de dados postgres com Low-level discovery do Zabbix em servidores windows

Bom dia amigos,

Depois de muito tempo sem postar aqui, estou disponibilizando um tutorial para quem utiliza o zabbix e deseja monitorar o tamanho dos bancos de dados postgres em um servidor Windows.

Para que não sabe, ou ja ouviu falar mas não mexeu ainda, o Zabbix é um software open source(código aberto) que é utilizado para monitoramento de devices e de serviços em uma rede de dados. Pode-se monitorar quase tudo, ou utilizando um cliente zabbix, ou via SNMP, ou via trapper entre alguns outros métodos.

Hoje, vou explicar um pouquinho do que eu sei sobre o Low-level discovery do Zabbix e em seguida deixarei um tutorial para criar um monitoramento do tamanho dos bancos de dados em postgres de um servidor Windows.

Low-Level Discovery

Low-level discovery, ou lld, nada mais é que uma ferramenta do Zabbix que tem a função de coletar informações variáveis de um device, um servidor por exemplo, e montar automaticamente itens, gatilhos e gráficos de acordo com as informações recebidas.

Utilizando Low-Level para monitoramendo de DB postgres (Windows)


Bem, para não precisar ficar criando um item manualmente para cada DB criado, utilize o Low-Level discovery do zabbix, assim ele faz a varredura no servidor a ser monitorado listando os DBs e criando automaticamente os itens.

Primeiramente, antes de tudo é importante criar um usuário com permissão apenas de leitura no banco de dados com o nome zabbix. Após isso, altre o arquivo pg_hba.conf do postgres no caminho "C:\Program Files\PostgreSQL\9.2\data" incluindo nos usuários as linhas:

# Zabbix
host    all             zabbix          ::1/32                  trust

Isso fará com que o banco confie no usuário zabbix em localhost e não solicite a senha. Não esqueça de reiniciar o banco para aplicar as alterações.

Agora vamos por a mão na massa! No servidor windows o qual será monitorado criamos um script no notepad e salvamos com o nome postgres_zabbix.bat, eu sugiro colocar esse arquivo no caminho "C:\zabbix\externalscripts\db_postgres"por questão de organização mesmo:

:: Autor: Andrei Tunes Claro
:: Data: 06/06/2013
@echo off
setlocal enabledelayedexpansion

cd C:\Program Files\PostgreSQL\9.2\bin\

for /f "delims=" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|" /c') do @set lines=%%a
set loop=1

set out={"data":[

for /f "tokens=1 delims=|" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|"') do (

    if !loop! == %lines% (
        set out=!out!{"{#DBNAME}":"%%a"}
        goto exit
    )
    set /a loop=!loop!+1
    set out=!out!{"{#DBNAME}":"%%a"},
)

:exit
set out=!out!]}
echo %out%

A função deste script é buscar os nomes de todos os bancos de dados postgres.

Após a criação do script, vamos alterar o arquivo  "zabbix_agentd.conf" localizado no caminho "C:\zabbix\conf", inserindo um novo parametro com uma chave nova. No final do arquivo acrescente dois novos parametros:

## Postgres
UserParameter=pgsql.db.names,C:\zabbix\externalscripts\db_postgres\postgres_zabbix.bat
UserParameter=pgsql.db.size[*],C:\"Program Files"\PostgreSQL\9.2\bin\psql --dbname postgres -U zabbix -Atc "select pg_database_size('$1') as size

O primeiro parâmetro criado tem a chave "pgsql.db.names", este parâmetro executa o arquivo "postgres_zabbix.bat" e retorna os nomes de todos os DBs do servidor. O segundo parâmetro tem a chave "pgsql.db.size", ele vai executar o comando para buscar o tamanho de um DB específico.
Após alterar o arquivo de configuração do agente do zabbix no servidor, reinicie o serviço do zabbix.

Para saber se tudo esta funcionando, entre no servidor Zabbix de monitoramento e digite o comando "zabbix_get -s'<IP_do_servidor_postgres>' -p'10050' -k'pgsql.db.names'

A saída deve ser assim:


É importante saber que o script criado mostra a saída como “{#DBNAME}”: “banco100f”. O valor “{#DBNAME}” é o que será utilizado pelo zabbix para associar ao item, gatilho ou gráfico criado. Como no exemplo acima ele irá criar os itens, triggers e gráfico para dois bancos de dados, o “banco100f” e o “bancopgsql100”.

Após todas as configurações, crie um novo template com o nome "Template Postgres DB" para as regras de descobertas que irão ser criadas. Nesse template crie a aplicação "Postgres Databases" e salve.

Clique em "Regras de descoberta" ou (Discovered rules) e clique no botão "Criar regra de descoberta" no canto superior direito. Crie a regra conforme a imagem abaixo e salve:


Dentro de "Regras de descoberta" ou (Discovery rules) entre na aba "Protótipos de item" ou (itens prototypes), conforme indicado na imagem abaixo:




 Crie um protótipo de item como descrito na imagem abaixo:


Após a criação salve o protótipo de item. Pronto, o template novo esta criado, agora é só associa-lo ao servidor de banco de dados postgres windows e aguardar a coleta dos dados, ele automaticamente montará um item para cada banco de dados existente.

Com o lld fica muito mais fácil o monitoramento, pois a criação dos itens fica automática e facilita a vida. Se tiver outro servidor com banco de dados postgres, é só copiar o script e criar o usuário zabbix, ai adicionamos o servido ao template e pronto.

Ta ai pessoal! qualquer duvida só postar nos comentários!
Abraço.

Esse post foi baseado no Blog do colega Rodrigo Lang (http://openingyourmind.wordpress.com). Lá ele ensina a fazer o mesmo monitoramento em um servidor linux.

Nenhum comentário:

Postar um comentário