Monitoração de serviços com o Zabbix PDF Imprimir E-mail
Artigos - Redes
Escrito por Fernando Mercês   
Sáb, 29 de Maio de 2010 16:08

 

Uma importante parte da pós-implementação de um produto é a monitoração constante. Primeiro porque é a partir dela que o administrador do sistema obterá dados para servir de parâmetros numa anlálise e segundo porque, quando enfrentando problemas, o troubleshooting é bastante facilitado quando a monitoração bem feita existe.

 

Geralmente os serviços comumente utilizados em ambientes UNIX-like possuem interfaces que informam dados sobre o que está ocorrendo. Cabe aos administradores de sistemas e redes saber capturar esta informação, armazenar e manter num formato padronizado para consultas estastísticas ou em tempo real. O problema é que cada serviço utiliza uma forma diferente para prover tais informações e geralmente o sysadmin precisa escrever longos scripts para atingir o nível de inteligibilidade necessário na organização dessas informações, geralmente um script para cada serviço. É aí que entra o Zabbix, um poderoso software livre com a proposta de monitorar e alertar quando um sistema ou serviço não está de acordo com regras pré-definidas, além de manter uma base de dados com histórico de alteração dos dados coletados, podendo gerar inclusive gráficos valor/tempo com essas informações. Sem dúvida, uma tarefa essencial para o administrador. Neste artigo mostrarei como instalar e configurar o Zabbix num ambiente Debian GNU/Linux (Squeeze). Boa leitura!

 

Basicamente, o Zabbix é dividido em quatro partes. São elas:

 

Servidor

Um daemon que deve ser instalado no seu servidor de monitoração (e não no servidor que será monitorado, até porque é possível monitorar serviços em vários servidores diferentes). Ou seja, você deve dedicar, na sua rede, uma máquina para ser o servidor Zabbix, nem que seja virtual.

 

Agente

Este sim, é um daemon para ser instalado nas máquinas que serão monitoradas. Vamos exemplificar no artigo apenas uma máquina para ser  monitorada (Debian Lenny com Apache). Este agente recolhe as informações dos serviços e SO e envia, pela rede, para o servidor do Zabbix.

 

Backend

O banco de dados que o Zabbix utilizará para armazenar os dados coletados. Os repositórios do Debian possuem binários do Zabbix para PostgreSQL e MySQL mas sendo compilado a partir do código-fonte, o Zabbix também pode ser configurado para trabalhar com bancos de dados Oracle ou SQLite. O backend não precisa ficar na mesma máquina que o servidor Zabbix, mas neste artigo vamos adotar que sim. Usaremos uma base MySQL.

 

Frontend

Uma interface feita em PHP, que roda no servidor do Zabbix. Esta interface facilita a visualização dos dados e permite gerar gráficos e outros itens de forma rápida. Dessa forma, acessar o Zabbix significa digitar o nome DNS ou o IP do servidor do Zabbix no navegador de qualquer máquina da rede que tenha acesso.

 

O Zabbix pode monitrar um software/hardware que envie dados pelo protocolo SNMP, mas não é só isso. Com o agente, é possível monitorar praticamente qualquer serviço de software. Veremos isso mais adiante.

 

A instalação no Debian Squeeze é simples:

$ sudo apt-get install zabbix-server-mysql zabbix-frontend-php mysql-server apache2 php5

Conforme é perceptível, instalamos o binário do Zabbix referente ao MySQL, o frontend em PHP, o servidor MySQL, o Apache e o PHP (ambos para abrigarem o frontend do Zabbix).

 

O pacote Debian possui um conjunto de scripts prontos para ajudar na configuração inicial. Ao final da configuração do Apache e MySQL Server, a tela abaixo será exibida:

 

1-zabbix-install-db-config

 

Se o seu sitema estiver em português, esta tela também estará. Ela pergunta justamente se queremos fazer com o dbconfig, de forma automática, ou manualmente via MySQL Console ou outra ferramenta. Escolha "Yes" para poupar trabalho de criação e configuração da nova base de dados.

 

Agora a senha do usuário root do MySQL é requisitada. Digite-a.

 

2-zabbix-install-root

 

A próxima tela pedirá uma senha para o usuário "zabbix", que será criado no servidor MySQL, para ter acesso à nova base, de mesmo nome. É bom escolher uma senha. No nosso exemplo para o artigo, colocamos a senha "zabbix" (sem aspas).

 

3-zabbix-install-apppw

 

Na tela a seguir, é necessário informar qual base de dados o frontend utilizará. No nosso caso, MySQL. A senha do usuário zabbix no BD, que você criou na tela anterior, será requisitada novamente.

 

4-zabbix-install-frontend

 

Finalizada a instalação, o serviço já deve estar no ar. Para conferir, comande:

$ pgrep zabbix

 

Deverão ser mostrados na tela vários PIDs de processos do Zabbix, indicando que ele está no ar. O Zabbix é bem rigoroso para subir. Tudo deve estar bem ajustado.

 

Configuração

Para o frontend funcionar bem, é preciso configurar alguns itens no arquivo php.ini. Localize os itens abaixo e faça-os ficar como apresentados:

 

date.timezone = "America/Sao_Paulo"

post_max_size = 16M

max_execution_time = 300

max_input_time = 300

 

O Zabbix usa  arquivos de configuração que armazena em /etc/zabbix (no caso de distros baseadas em Debian). São eles:

 

/etc/zabbix/apache.conf - cria um alias para o frontend do Zabbix no Apache.

/etc/zabbix/dbconfig.php - configura o backend para o frontend.

/etc/zabbix/zabbix_server.conf - configuração geral do Zabbix server.

 

Recomendo que você leia todos os arquivos, com calma. Os dois primeiros arquivos são simples e curtos. Já o terceiro, exige um pouco de atenção. Por hora, nos atendemos as seguinte opções:

 

ListenPort=10051

Por padrão o Zabbix server escuta na porta 10051 (o agente enviará informações para o servidor nesta porta), mas pasta descomentar e alterar este valor, se for o caso. No artigo, manteremos o padrão.

 

DBHost, DBName, DBUser e DBPassword

Configurações do backend. Como o debconf já fez isso pra gente, deve estar correto, mas é bom que você saiba onde alterar, caso precise.

 

As outras opções fogem do escopo deste artigo. Em sua maioria, são opções de tuning e configuração multi-nó (um pool de servidores Zabbix), que talvez seja tema de um próximo artigo. ;)

 

Abra um navegador e acesse http://localhost/zabbix para abrir a página inicial do frontend. Você deve ver uma página como na imagem abaixo:

 

zabbix-frontend-login

O usuário padrão de administração do Zabbix é admin e a senha é zabbix.

 

Por enquanto, o Zabbix não está monitorando nada. Após fazer login como administrador, confira na aba "Monitoring > Dashboard" as estatísticas gerais. Para que haja monitoração, é preciso criar o host no Zabbix server e instalar o agente na máquina que será monitorada. Vamos primeiro criar o host:

 

Vá até a aba "Configuration > Hosts".


zabbix-frontend-hosts

 

Nesta tela, aperecerá somente um host pré-cadastrado, que é o próprio servidor Zabbix (sim, ele pode ser monitorar-se). Se você seguiu o artigo, este servidor apresenta um status "Not monitored". Isso acontece porque não instalamos o agente no Zabbix server pois a idéia do artigo é monitorar uma máquina remota (cenário mais comum).

 

Na extrema direita, abaixo do formulário de busca, há um botão "Create host". Clique nele para adicionarmos um novo host (a máquina que queremos monitorar).

 

zabbix-frontend-createhost

 

Uma tela para preenchermos as informações sobre o novo host será aberta. Nela, precisamos de basicamente nome, endereço IP (no nosso caso, o IP da máquina a ser monitorada é 192.168.56.2) ou nome DNS, porta onde o agente está escutando e pelo menos um grupo de hosts template associado.


zabbix-frontend-hostinfo

 

Template, no Zabbix, é um dos itens mais importante a ser aprendido. Um template é um conjunto de regras específicas para um produto que efetua sua monitoração. O Zabbix já vem com templates pré-definidos para monitor alguns serviços de sistemas GNU/Linux e Windows. Vamos aproveitar que boa parte do trabalho já foi feito e utilizar um template pré-definido para Linux (já que nosso host monitorado roda Debian) e para monitorar o Apache nele, criaremos um template novo mais à frente.

 

Portanto, antes de salvar o host e criá-lo efetivamente, temos que associá-lo a um template. Vá no menu da direita e clique no botão "Add" para linkar o host com pelo menos um template.

 

zabbix-frontend-linktempl

 

Surgirá uma janela que navega entre os grupos de templates existentes e permite escolher um template já criado. O único grupo pré-definidos que possui templates é justamente o grupo "Templates" (com o perdão da redundância). Escolha-o e perceba que vários templates serão exibidos para escolha.

 

zabbix-frontend-templselect

 

Marque apenas o template "Template_Linux", como na imagem abaixo e clique no botão "Select", no fim da página. Depois pode salvar o host.

 

zabbix-frontend-templinux

 

A monitoração deste host ainda não está completa, nem funcionando, por dois motivos: falta instalar o agente na máquina e falta criar um template para monitorar o Apache, certo?

 

Instalação do agente

O agente é ainda mais fácil de ser instalado, como creio esperar-se. Como o cliente é um Debian, bata instalar o pacote zabbix-agent mas também pode ser compilado do fonte. Depois de instalado, um arquivo de configuração é criado: /etc/zabbix/zabbix_agentd.conf. É nele que vamos configurar o agente.

 

No cenário mais básico, basta configurar a opção Server com o IP do servidor Zabbix. No nosso caso, o servidor é 192.168.56.1, então a linha fica:

 

Server=192.168.56.1

 

Agora é só reiniciar o agente para aplicar as novas configurações:

 

[codecitation="brush: bash;"}

$ sudo /etc/init.d/zabbix-agentd restart

{/codecitation}

 

Aguarde alguns instantes e vá novamente à configuração de hosts no servidor Zabbix. Se tudo correr bem com a comunicação entre as máquinas, o ícone do Zabbix na coluna "Availability" deve ficar verde. Isso significa que o host está sendo monitorado por um agente Zabbix. Aproveite e perceba que o Zabbix pode trabalhar com SNMP e IPMI, dispensando o uso do agente em alguns casos. Entre no dashboard também e perceba os alertas que o Zabbix informa. Como dito, o Template_Linux monitora vários serviços que não estou utilizando neste host como servidores de e-mail e SSH. Por isso cabe à você excluir as monitorações de serviços que não interessem ou,  numa melhor prática, criar um templade de acordo com suas necessidades. Falando em template...

 

Agora temos monitoração de tudo que o Template_Linux monitora, mas ainda não temos Apache. Chegou o momento de criarmos um template para o Apache, para isto, vamos revisar o funcionamento do Zabbix:

 

- O agente recolhe informações e num intervalo de tempo pré-definidio as envia para o servidor Zabbix (porta de destino padrão é 10051).

- O servidor recebe essas informações e armazena no backend (banco de dados), mas ele também verifica, num intervalo de tempo pré-definido, se o agente está no ar (porta de destino padrão é 10050).

- Para verificar se o status de um alerta é verde ou vermelho, o servidor Zabbix envia um comando, que está definido no template, para o agente. Este o recebe e executa um comando equivalente, localmente, filtra a resposta e devolve para o servidor Zabbix. Dependendo da regra que existir no servidor, essa resposta significará um alerta vermlho (problema) ou verde (normal).

 

Então, já que vamos monitar o Apache, precisamos de um comando local (de SO) que nos permita obter informações sobre o Apache. E não estou falando de número do processo ou processamento consumido, mas sim de estatísticas no nível da aplicação como tráfego entrante e sainte, threads, etc.

 

Aí entra a pesquisa. Antes de monitrar um serviço/software no Zabbix, você tem que levantar como é feita uma monitoração manual no produto. Qualquer produto que se preze permite alguma forma de monitoração manual, mesmo que mínima. No caso do Apache, é preciso carregar o mod_status e configurá-lo (geralmente /etc/apache2/mods-available/status.conf). Mãos à obra:

 

Configure o arquivo /etc/apache2/mods-available/status.conf para permitir acesso ao diretório virtual server-status a partir do localhost e do servidor Zabbix, deixando a ordem de acesso assim:

 

<Location /server-status>
Order Deny, Allow
Allow from localhost 192.168.56.1
</Location>

 

Agora configure o modo extendido deste módulo, adicionando a opção "ExtendedStatus On" (sem aspas) ao arquivo de configuração principal (apache2.conf ou httpd.conf).

 

O comando acima habilitará o módulo do Apache mod_status, responsável por prover informações de monitoração.

$ sudo a2enmod status

 

Ao acessar este diretório (http://192.168.56.2/server-status) você verá uma página HTML cheia de informações sobre o Apache. Se passar um parâmetro especial para esta URL (http://192.168.56.2/server-status?auto), verá simplesmente um texto compacto com as informações, menos bonito que a página HTML, mas mais atraente para que as informações sejam capturadas:

 

server-status-auto

 

Certo, mas como pegamos essas informações e enviamos para o servidor Zabbix? Basta fazer um script. :)

 

Aí entra em jogo a criatividade do administrador de sistemas e o poder de scripting. Uma maneira simples é usar o wget (já que os dados estão num servidor web) para capturar e tratar tais informações. Aqui usei um script assim (achei na Wiki do Zabbix e alterei um pouco):

 

apache_host="localhost"
rval=0
tmp="/tmp/apache_status"
REFRESH=$(wget --quiet -O $tmp http://$apache_host/server-status?auto)

case $1 in
 'TotalAccesses')
 $REFRESH
 fgrep "Total Accesses:" $tmp | awk '{print $3}'
 rval=$?;;
 'TotalKBytes')
 $REFRESH
 fgrep "Total kBytes:" $tmp | awk '{print $3}'
 rval=$?;;
 'Uptime')
 $REFRESH
 fgrep "Uptime:" $tmp | awk '{print $2}'
 rval=$?;;
 'ReqPerSec')
 $REFRESH
 fgrep "ReqPerSec:" $tmp | awk '{print $2}'
 rval=$?;;
 'BytesPerSec')
 $REFRESH
 fgrep "BytesPerSec:" $tmp | awk '{print $2}'
 rval=$?;;
 'BytesPerReq')
 $REFRESH
 fgrep "BytesPerReq:" $tmp | awk '{print $2}'
 rval=$?;;
 'BusyWorkers')
 $REFRESH
 fgrep "BusyWorkers:" $tmp | awk '{print $2}'
 rval=$?;;
 'IdleWorkers')
 $REFRESH
 fgrep "IdleWorkers:" $tmp | awk '{print $2}'
 rval=$?;;
 *)
 echo "ZBX_NOTSUPPORTED"
esac

if [ "$rval" -ne 0 ]; then
 echo "ZBX_NOTSUPPORTED"
fi

exit $rval

 

Salve este script como zabbix_apache.sh no diretório /etc/zabbix/ da máquina a ser monitorada e adicionete a seguinte linha ao arquivo /etc/zabbix/zabbix_agentd.conf:

 

UserParameter=apache[*],/etc/zabbix/zabbix_apache.sh \$1

 

Dessa forma, toda vez que o agente rodar, vai executar este comando definido pelo usuário. Este comando chama o script, que coletará as informações de status e devolverá para o agente, que por sua vez, enviará ao servidor.

 

Voltando ao servidor Zabbix, vamos criar o nosso template. Vá em "Configuration > Hosts" e escolha "Templates" no menu drop-down da direita. Depois clique no botão "New template" para inserir as informações do novo template. Insira apenas o nome como "Template_Apache_Linux" e clique em "Save".

 

O tempalte está zerado. Vamo adicionar o que é preciso:

 

- Clique em "Applications" e adicione uma application chamada "Apache2" (sem aspas).

- Clique em "Items" e adicionar um item TotalAccesses como mostra a figura abaixo:

 

zabbix-frontend-additem

 

Repita o passo anterior, criando um item para cada informação, sendo elas: TotalKBytes, Uptime, ReqPerSec, BytesPerSec, BytesPerRec, BusyWorkers e IdleWorkers. Respeite o caso das letras, ok?

 

Ao final da adição dos itens, você deverá ter uma lista completa com todos os itens sendo monitorados. Se o agente já estiver em funcionamento, os itens estão verdes no servidor.

 

Bem, esta foi uma rápida introdução ao Zabbix. Existem recursos especializados como triggers, gráficos e contra-medidas que o Zabbix é capaz de fazer, mas isso vai ficar para um artigo futuro. Boa monitoração! :)