Translate

domingo, 11 de dezembro de 2011

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO DO SISTEMA DE MONITORAMENTO ZABBIX




MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO DO SISTEMA DE MONITORAMENTO ZABBIX


1 – Instalação

Os seguintes passos mostram como instalar os pré-requisitos do Zabbix (LAMP e outros pacotes) no Ubuntu 10.04:
a. Instalando o Apache:
sudo apt-get install apache2
b. Instalando o PHP 5: {{{sudo apt-get install php5 libapache2-mod-php5 && sudo /etc/init.d/apache2 restart }}} c. Instalar o MySQL Server:
sudo apt-get install mysql-server #solicitará o password do usuário root do BD
d. Instalar o painel de controle PHPmyadmin:
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
e. Habilitar extension=msql.so em /etc/php5/apache2/php.ini;
f. Reiniciar o serviço apache2:
sudo /etc/init.d/apache2 restart
g. Instalar outras dependência do Zabbix:
sudo apt-get install build-essencial php5-gd snmp libsnmp9-dev snmpd
h. Adicionar usuário Zabbix ao sistema:
sudo useradd zabbix
i. Acessar o MySQL para gerar o database Zabbix e dar privilégio total a usuário Zabbix em localhost:
mysql -u root -p
(Digite a senha do banco de dados, especificada durante o processo de instalação do mesmo)
CREATE DATABASE zabbix;
GRANT ALL PRIVILEGES ON zabbix.* to zabbix@localhost;
j. Instalar o Zabbix através do aptitude (apresentaram-se erros através do apt-get e do pacote baixado do site): sudo aptitude install zabbix-server-mysql zabbix-agent zabbix-frontend-php (perguntará sobre a necessidade de criar um database no BD, não aceitar pois já foi criado anteriormente, será necessário indicar a senha do BD durante o processo de instalação)
l. Reniciar o apache:
sudo /etc/init.d/apache 2 restart
m. Editar o o arquivo de configuração do PHP para adequa-lo as necessidades do Zabbix:
# vi /etc/php5/apache2/php.ini
Localizar as seguintes linhas e alterar os valores:
date.timezone = America/Sao_Paulo
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
n. Acessar o Zabbix: http://localhost/zabbix (usuário: admin / senha: zabbix):



2 - Possível erro após a instalação: “Zabbix Server is Running: No”

Após todos os procedimentos para instalação do Zabbix, é feito o acesso através do endereço especificado anteriormente. Ao verificar o “status” do sistema em dashboard, o primeiro campo informa que o sistema não está operante (“Zabbix Server is Running = No”).




Acessando o arquivo de log do Zabbix-Server (sudo vi /var/log/zabbix-server/zabbix_server.log), o seguinte erro é registrado: “Connection to database failed: [1045] Access denied for user 'zabbix'@'localhost'”, ficando claro que se trata de uma falha de conexão entre o Zabbix e o MySQL. Para alterar os parâmetros de conexão ao banco, deve-se editar o arquivo de configuração /etc/zabbix/zabbix_server.conf. Analisando o conteúdo do arquivo, as linhas “DBuser”, “DBpassword” e “DBhost” estavam corretas, mas o campo “DBname” que deveria conter “zabbix”, mas estava vazia. Depois de tal correção, reinicie o serviço zabbix-server e acesse novamente o webadmin.
Outro erro bastante comum é o caminho do "mysql.sock" indicado incorretamente no arquivo de configuração do Zabbix. Para saber o caminho correto, basta vevificar a linha socket do arquivo de configuração do MySQL (/etc/mysql/my.cnf).

3 - Instalando o Zabbix-Agent nas estações


a. Instalar o Zabbix-Agent:
# apt-get install zabbix-agent

b. Configurar o Agente do Zabbix
# vi /etc/zabbix/zabbix_agentd.conf






c. Reiniciar o agente do Zabbix para que as alterações tenham efeito.
# /etc/init.d/zabbix-agent restart

d. Com o agente configurado, cadastrar o novo host no servidor Zabbix:
e. Configuração > Hosts > Clique em Criar Hosts





**Caso o Campo: Nos Grupos – esteja com o Grupo Zabbix servers, vamos remover clicando em ">>"

f. Preencha os Campos: Nome: Outros Grupos: Clique em Linux servers e depois em "<<" Endereço IP: Preencher com o IP do Cliente Campos do Associado aos templates: Clique em adicionar, e será aberto um popup – Clique em Grupo e selecione Templates – Localize e marque Template_Linux – Clique no final do popup em Selecionar




De volta a tela de cadastro de Hosts clique em SALVAR
O servidor Zabbix tentará se conectar ao Cliente, caso não haja nenhum problema No Campo Status teremos "Monitorado".



4. Definições


a. Items: são os “dados” coletados pelo zabbix, por si só não fazem nada, apenas ficam armazenados no banco de dados do monitoramento;
b. triggers (Gatilhos): “analisam” os Items coletados e geram alarmes de acordo com condições pré-definidas;
c. actions: ações que o servidor de monitoramento toma mediante a mudança de estado de um trigger (ou grupo de triggers). Estas podem ser: email, sms, mensagem via jabber, execução de um script local ou remoto no servidor que originou o alarme por exemplo.

5. Coleta de dados através de scripts


Na estação a ser monitorada, faça:
a. dê privilégio ao user zabbix para executar comandos através do "sudo" sem solicitar a credencial root
# sudo visudo (sudo é necessário caso o usuário não esteja logado com o usuário root)

Ao final do documento, adicionar: zabbix ALL=NOPASSWD: ALL
b. Criar a pasta onde os scripts serão armazenados:
mkdir /etc/zabbix/scripts

c. Depositar o script na pasta e dar a devida permissão de execussão ao user zabbix
d. No arquivo de configuração do agente zabbix (/etc/zabbix/zabbix_agentd.conf), informar os parâmetros de utilização do script (ao final do arquivo):
UserParameter=auth.log,sudo /etc/zabbix/scripts/auth.log.sh #em negrito refere-se a uma chave inventada por mim para ser apontada na criação do ítem no servidor zabbix, relacionando este item com o comando para executar o script

No servidor Zabbix, faça:
a. Na página de configuração, acesse Configurações>Templates
Neste exemplo será criada a aplicação dentro da template (modelo) Linux. Localize esta template e clique em "Aplicações" na respectiva template
b. Na parte superior direita, clique em "criar aplicação"e dê um nome a ela, tal como: "Log de Acesso"
c. Volte para a página de templates e clique em "itens" da respectiva template. Crie um novo Item, com os seguintes dados:
  • Descrição (nome do item) - Log de Acesso
  • Tipo - agente Zabbix
  • Chave (importante! refere-se a chave colocada em negrito na linha UserParameter nas configurações do agente) - auth.log
  • Tipo de informação (neste script gerado por mim, retornará apenas "0" e "1") - numérico
  • Intervalo de atualização (intervalo entre as verificações) - neste exemplo coloquei 300
  • Status - ativo
  • Aplicaçoes - Log de Acesso
  • Salvar!

d. Reinicie o agente no servidor monitorado:
/etc/init.d/zabbix-agent restart
Pronto, ele estará coletando informações. Caso seja necessário, ative o item acessando Configurações>Hosts>Na linha do servidor monitorado, clique em itens>Locatilze o ítem "Log de Acesso" e clique em cima de "não suportado" (na coluna status) para ativa-lo.

Agora definiremos quais valores retornados pelo ítem devem ser tratados como normal ou criticos
Acesse Configurações>Hosts>Clique em Triggers do referido servidor>Criar trigger
  • Dê um nome a Trigger
  • Expressão, localize o ítem criado (NOME_DO_SERVDIOR:Log de Acesso) e defina a função "Last value = N" e deixe N = 0
  • Defina um grau de risco da ocorrência
  • Clique em salvar

Quando o script captar mudanças no arquivo de log do Linux (/var/log/auth.log), irá retornar o valor "1", acionando o alerta do Zabbix.


Conteúdo do Script: 
#!/bin/bash
diff /var/log/auth.log /var/log/auth.log.old > alteracao
if [ "$alteracao" ==  "" ]; then
        exit 0
else
        cat alteracao | mail DESTINATARIO_DE_E-MAIL -s "[Citosina] Auth.log at ${DATE}" # esta linha foi adiciona para que o diff do log seja enviado por e-mail
        exit 1
fi




5.1. Monitoramento de temperatura

  1. Instalar dependências: libusb-dev, libinline-perl e libdevice-usb-pcsensor-hidtemper-perl;
  2. Baixar pacote que exibe a temperatura: http://www.isp-sl.com/pcsensor-0.0.1.tgz
  3. Instalar pacote: make; cp pcsensor /usr/local/bin/
  4. Adicionar script que coletará a temperatura para o Zabbix (em /etc/zabbix/scripts/temperatura.sh):
    #!/bin/bash
    sudo pcsensor -m | sed -n '1p'
    
  5. Permitir ao usuário zabbix executar "pcsensor" como root sem solicitar senha. Adicione a seguinte linha em /etc/sudoers:
    #Permitir que o usuario zabbix execute a verficação de temperatura como root
    zabbix  ALL = NOPASSWD:/usr/local/bin/pcsensor
    
  6. Adicionar referência do script de coleta de temperatura com a solicitação do servidor Zabbix - configuração /etc/zabbix/zabbix_agentd.conf (computador cliente), adicionar ao final do arquivo:
    #Temperatura ambiente
    UserParameter=temperatura,/etc/zabbix/scripts/temperatura.sh
    
  7. Adicionar item de monitoramento ao Zabbix: em configurações > hosts > itens (do servidor pretendido) > criar item.
    Os dados devem ser preenchidos da seguinte forma:


** chave: refere-se ao ID identificador do script a ser executado no passo f.

h. Adicionar trigger (limite que dispara uma ação/notificação) ao Zabbix: em configurações > hosts > triggers (do servidor pretendido) > criar trigger.
Os dados devem ser preenchidos da seguinte forma:

5.2. Demais scripts em operação

5.2.1. Monitoramento de nobreak

apcupsd é um pacote open source (disponível em repositório APT) que possibilita o monitoramento de nobreaks APC. Informações coletadas:
  1. APC - version, number of records and number of bytes following
  2. DATE - Date and time of last update from UPS
  3. HOSTNAME - hostname of computer running apcupsd
  4. VERSION - apcupsd version number, date and operating system
  5. UPSNAME - UPS name from configuration file (dumb) or EEPROM (smart)
  6. CABLE - Cable type specified in the configuration file
  7. MODEL - UPS model derived from UPS information
  8. UPSMODE - Mode in which UPS is operating
  9. STARTTIME - Date and time apcupsd was started
  10. STATUS - UPS status (online, charging, on battery etc)
  11. MASTERUPD - Last time the master sent an update to the slave
  12. ENDAPC - Date and time of status information was written
Tutorial de configuração: http://www.vivaolinux.com.br/artigo/Desligamento-automatico-seletivo-com-apcupsd/

Através deste pacote é possível enviar dados ao Zabbix através do script (/etc/zabbix/scripts/check_apc_ups.sh, disponível em http://www.zabbix.com/wiki/templates/start):
#!/bin/sh
## Modified for Zabbix by Clayton Kramer (C) 2007
##

## Originally base on Nagios Plugin for apcupsd APC Smart-UPS
## janthony@negative1.org
## Copyright (C) 2004  Joe Anthony
##

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


APCA="/sbin/apcaccess"
APCA_ARGS="status"

if [ ! -x $APCA ]; then
        echo "$0: Error: $APCA not found!"
        exit 3
fi

dishelp() {
                echo "Usage: $0 hostname $2 <load|bcharge|time|status>"
                echo "       $0 status"
                echo
                echo "load (%): Returns the percentage of the UPS power load"
                echo "bcharge (%): Returns the percentage of batter charge left"
                echo "time (minutes): Amount of time in minutes the UPS can supply power based on current charge and load"
                echo "staus: Returns a true value if status is critical"
                echo
                echo "UNKNOWN UPS State"
                exit 3
}

case "$2" in
        load)
                LOAD=`$APCA $APCA_ARGS | grep LOAD | awk '{print $3}' | sed -e 's/\.[0-9]* *$//g'`
                echo "${LOAD}"
                exit 0
                ;;
        bcharge)
                CHRG=`$APCA $APCA_ARGS | grep BCHARGE | awk '{print $3}' | sed -e 's/\.[0-9]* *$//g' | sed -e 's/0*//'`
                echo "${CHRG}"
                exit 0
                ;;
        time)
                TLEFT=`$APCA $APCA_ARGS | grep TIMELEFT | awk '{print $3}' | sed -e 's/\.[0-9]0* *$//g'`
                echo "${TLEFT}"
                exit 0
                ;;
        status)
                ONLINE=`$APCA $APCA_ARGS | grep STATUS | awk '{print $3}'`
                if [ "$ONLINE" != ONLINE ]; then
                        exit 2
                fi
                exit 0
                ;;
        *)
                dishelp
esac



5.2.2. Enviar SMS gratuito de notificação através do Google Agenda

Disponível em: http://gesielbernardes.blogspot.com.br]] Local do script: /etc/zabbix/scripts/sms.sh Implementado em: Zabbix

5.2.3. RAID Health - HP Utillity

Local do script: /etc/zabbix/scripts/raid_status_dados_zabbix.sh Conteúdo:
#!/bin/bash
sudo /opt/compaq/hpacucli/bld/hpacucli controller all show config | grep "logicaldrive 1" | cut -f3 -d, | 
>> cut -c2-3 | while read status; do [ "$status" = "OK" ] && echo -n 1 || echo -n 0; done
Dependência: hpacucli

5.2.4. RAID Health - SoftRAID

Local do script: /etc/zabbix/scripts/raidstatus.sh
Conteúdo:
#!/bin/bash
if /sbin/mdadm --detail --test /dev/md1 2>> /var/log/mdadm.log 1> /dev/null
then
        exit 1
else
        exit 0
fi
Dependência: SoftRAID implementado Implementação em: Servidor de Backup

6. Comandos remotos


Quando um gatilho (trigger) é acionado, através de ações preestabelecidas o Zabbix poderá enviar mensagens (e-mail, SMS ou jabber) avisando sobre a ocorrência, ou até mesmo executar ações (scripts) de correções.
Por exemplo, poderemos "startar" script de recuperação para o Apache caso o mesmo, por algum motivo, pare de ser executado. Para isto, deve-se habilitar a opção que habilita a execução de scripts remotos:
a. na estação a ser monitorada, adicione "EnableRemoteCommands=1" no arquivo de de configuração do agente (/ect/zabbix/zabbix_agentd.conf);
b. definiremos o script através da área administrativa no servidor (WebGUI), em Configuracoes > Ações e clicando em "Criar ação";
c. deve-se dar um nome a ação (ex. Apache, tal como na imagem abaixo);
d. em condições da ação, deve-se definir qual trigger ativará a ação;
e. ao lado direito, em "operações da ação", clique em "Nova" e escolha "Comando remoto" para o "Tipo de operação";
f. inserir o script, sempre precedido de: {HOSTNAME}:sudo ( {HOSTNAME}: indica o destino do comando, não alterar; sudo: para que os comandos sejam executados com privilégios administrativos). Veja na imagem abaixo o funcionamento;
g. Não se esqueça de salvar a Ação.



7. Backup da Base de Dados


O MySQLDUMP pode produzir arquivos no formato SQL que contenham declarações CREATE TABLE e INSERT para recriar os arquivos ou para produzir arquivos de dados delimitados por tabulações.
O comando para efetuar o backup da base de dados do Zabbix será semelhante ao seguinte:
# mysqldump --user=root --password=DEFINIDO_NA_INSTALACAO_DO_DB --databases zabbix > backup.zabbix-06-12-1.sql

Sugestão de leitura (script de backup aprimorado): http://zabbixzone.com/zabbix/backuping-full-database

8. Informações complementares


a. Configuração do serviço de Discovery
Um recurso muito interessante do Zabbix, é o Discovery, com ele, você define um range de IPs e os testes que serão realizados. Para cada IP que o Zabbix encontrar, ele passará a monitorar na parte do discovery.
Para configurar o discovery, basta ir em Configuration -> Discovery -> Create Rule
Definir o Nome, range de IPs e os testes que devem ser realizados, ex: icmp ping, http smtp, etc.
Observação, dependendo da sua topologia de rede, cuidado para não definir um intervalo muito pequeno para não sobrecarregar a rede e o servidor.

b. Montando um mapa de rede básico
O Zabbix permite que se monte um “Mapa de Rede” (topologia) com os devices monitorados. Este mapa, mostra a sua rede de forma gráfica em tempo real, dá um pouco de trabalho, mas se bem feito, o resultado final pode ser bem interessante.
Para criar o Mapa, vá em Configuration -> Maps -> Create Map. Após criar o mapa, edite ele, e uma janela com uma tela branca toda quadriculada irá aparecer.
O Mapa é basicamente composto de dois tipos de itens: Elements e Connectors e uma tela quadriculada a cada 50pixeis.
Crie um novo elemento associando a algum host (exemplo mailserver), observar que nesta tela, você pode associar até 4 ícones diferentes para um mesmo item. Um para cada estado OK, problem (exemplo um servidor pegando fogo), unknown e disabled. Após associar os ícones, você precisa informar em qual ponto da matriz este servidor irá aparecer ex: x50 y50
Agora cadastre um switch da mesma forma que cadastrou o servidor, apenas defina um ponto diferente na matriz.
Com estes dois itens cadastrados, podemos adicionar um Conector entre eles escolha quais itens serão interligados e em link status indicator, adicione uma condição para sempre que o “mailserver” estiver unreachable, o link fique vermelho, agora configure a cor para o estado OK (exemplo verde). Com este mapa, você pode acompanhar os problemas da sua rede de uma forma bem visual, uma outra dica (dependendo do tamanho da sua rede), seria exibir este mapa em um telão para pode acompanhar no seu NOC.

c. Criando um gráfico customizado
O Zabbix por default, provê gráficos para todos os itens monitorados, mas pode ser muito interessante, criar um gráfico mais “personalizado”, mostrando em uma unica imagem, diversas informações ao mesmo tempo. Isto pode ser realizado em Configuration -> Graphs. d. Criando telas específicas Se você gostou da idéia do “telão”, um outro item muito interessante, seria a criação de telas personalizadas. Você poderia inserir por exemplo o mapa da rede, com o gráfico de uso dos principais links (ou um gráfico customizado)junto com uma tela que mostra todos os alarmes ativos. Desta forma, otimizando a informação mostrada.
Para criar esta tela, vá em Configuration -> Screens -> Create Screen e o Zabbix pedirá um nome e a quantidade de linhas e colunas. Ao editar o gráfico criado, você verá uma “tabela”, e em cada célula desta tabela, pode ser inserido algum tipo de informação diferente.

9. Leitura recomendada


Referência Bibliográfica

"Zabbix Documentation". Disponível em: <http://www.zabbix.com/documentation>. Data de acesso: 01/12/2011;
UBUNTU-BR. “Zabbix”. Disponível em: <http://wiki.ubuntu-br.org/Zabbix>. Data de acesso: 01/12/2011;
RICARDO, Teotonio. “Instalar o LAMP no Ubuntu”. Disponível em: <http://www.webtuga.com/instalar-o-lamp-no-ubuntu>. Data de acesso: 01/12/2011;
BONOMO, Esley. “Gerenciamento e Monitoração de Redes de Computadores Utilizando-se Zabbix”. 62 páginas. Universidade Federal de Lavras. 2006;
PINHEIRO, Ricardo. "Instalando e configurando o Agente Zabbix". Disponível em: <http://www.cooperati.com.br/wordpress/2011/10/11/instalando-e-configurando-o-agente-zabbix/>. Data de acesso: 01/12/2011;
SILVA, Eduardo. "Instalando agentes e administrando o Zabbix". Disponível em: <http://eduardosilva.eti.br/sysadmin/zabbix_parte_iii_agentes_e_administracao/>. Data de acesso: 07/12/2011;
PINHEIRO E BERNARDES, Ricardo e Rafael. Diversos artigos sobre Zabbix. Disponível em: <http://www.cooperati.com.br/wordpress/?s=zabbix>. Acessado em 07/12/11.