Upload
william-coral
View
12
Download
0
Embed Size (px)
DESCRIPTION
Configuração Zabbix
Citation preview
www.mentebinaria.com.br
0x11 - Monitoração de serviços com o Zabbix
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).
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 A
pache). 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:
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.
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).
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.
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 distro
s 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:
PS.: 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".
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).
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 é 112) ou nome DNS, porta onde o agente está escutando e pelo menos um
grupo de hosts template associado.
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.
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.
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.
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:
$ sudo /etc/init.d/zabbix-agentd restart
Aguarde alguns instantes e vá novamente à configuração de hosts no servidor Zabbix. S
e 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 a
gente Zabbix. Aproveite e perceba que o Zabbix pode trabalhar com SNMP e IPMI, dis
pensando o uso do agente em alguns casos. Entre no dashboard também e perceba os ale
rtas 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 interesse
m ou, numa melhor prática, criar um templade de acordo com suas necessidades. Falan
do 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:
Order Deny, Allow
Allow from localhost 111
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 abaixo 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://112/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://112/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:
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):
----------------------------------CODE----------------------------------
#!/bin/bash
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
----------------------------------CODE----------------------------------
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:
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.