quinta-feira, 27 de maio de 2010

Monitorando serviços no Zabbix através do SNMP

Uma forma de monitorar o status de um serviço utilizando uma ferramenta de monitoramento é verificando se porta do mesmo está aberta. Por exemplo, poderíamos verificar se a porta 80 está OK e assim supor que o servidor HTTP está operando. No entanto, esta opção pode se tornar inútil se o serviço não responde utilizando sua porta padrão e, com isso, obter dados errôneos.
Uma forma de contornar isso é verificando se o processo correspondente ao serviço está em execução no servidor. Isso pode ser feito através do protocolo SNMP, pois na MIB do sistema operacional há uma tabela com todos os programas abertos naquele momento. Porém, o índice do mesmo pode ser alterado quando o serviço ou o sistema forem reiniciados. A forma que encontrei para contornar este problema foi a criação de um shell script que recebe o nome do executável do processo e retorna 1 caso o mesmo esteja aberto ou 0 para parado.
Este procedimento se aplica ao Zabbix em execução em um servidor Linux. As configurações e instalação das ferramentas SNMP nos sistemas operacionais podem ser encontradas facilmente na internet.
Antes de iniciar o monitoramento através de scripts próprios, é necessário verificar a opção ExternalScripts no arquivo de configuração do servidor Zabbix, geralmente chamado zabbix_server.conf, pois é neste caminho que o software procura os scripts externos criados pelo administrador.
Em seguida, crie um arquivo no diretório citado acima, aqui eu chamo de checaservico.sh com o seguinte conteúdo:



#!/bin/bash
# Criado por Rafael Oliveira
#Comunidade SNMP
COMUNIDADE=public
#Procura o ID do processo na tabela da MIB
IDPROCESSO=`/usr/bin/snmpwalk -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrSWRunName 2> /dev/null | grep $2 | cut -d : -f 3 | cut -d = -f 1 | cut -d . -f 2`
#Retorna o status do mesmo
STATUS=`/usr/bin/snmpwalk -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrSWRunStatus.$IDPROCESSO 2> /dev/null | cut -d : -f 4 | cut -d "(" -f 2 | cut -d ")" -f 1`
#Para o Windows o status de execucao eh 1 no Linux eh 2
if [ "$STATUS" = 1 ]; then
        echo 1;
elif [ "$STATUS" = 2 ]; then
        echo 1;
else
        echo 0;
fi





Lembrando que a variável COMUNIDADE deve ser alterada para o community SNMP utilizada em sua rede.
Após salvar o arquivo, é necessário conceder permissão de execução ao mesmo e alterar o dono para o usuário zabbix, utilizado na execução da ferramenta. Isto pode ser realizado da seguinte forma:

# chmod a+x checaservico.sh
# chown zabbix.zabbix checaservico.sh

Agora vamos a configuração do Zabbix. 
O item pode ser associado a um host ou template. No exemplo, vamos supor que desejamos monitorar o SQL Server. O executável dele chama-se sqlservr.exe. Devemos criar um item no Zabbix com as configurações exibidas na figura abaixo.


O item acima possui outras opções como, por exemplo, Update interval, que pode ser alterada de acordo com sua necessidade. Onde trabalho, utilizo um tempo de 60 segundos para o monitoramento de qualquer serviço.
Após a criação do item, vamos a criação do trigger, pois, a partir dele, será exibido um alerta na Dashboard ou poderá criar-se uma ação para o envio de alguma mensagem.
Deve acessar a opção Configuration > Triggers e selecionar o mesmo template ou host o qual o item acima foi associado. Em seguida, ao escolher a opção de criação do trigger, na linha Expression, clica-se em Insert e seleciona-se o item criado anteriormente conforme exibido abaixo.


Após clicar em Insert é retorna-se a tela de criação do trigger. É necessário inserir um nome para o mesmo.


Após escolher Save, o trigger será criado e, a partir daí, qualquer verificação que retorne um valor 0, ou seja, serviço interrompido, o Zabbix exibirá um alerta na Dashboard.
O procedimento acima pode ser utilizado, inclusive, foi aplicado em um ambiente de produção, tanto para verificação de processos no Windows quanto no Linux.

Nenhum comentário:

Postar um comentário