sexta-feira, 6 de fevereiro de 2015

Configuração de failover de links de internet

#!/bin/bash

#---------------------------#
# CONFIGURAÇÃO DOS GATEWAYS #
#---------------------------#

GW1=10.0.2.2
GW2=192.168.1.1
LOG=/root/rc.firewall.log

#------------------------------#
# INÍCIO DA FUNÇÃO DE FAILOVER #
#------------------------------#

# Aqui optei em por uma função para deixar a estrutura do
# script mais organizada e legível. É de suma importância
# que você esteja familiarizado com o shell script

failover ()
{

# Criação de um loop infinito para testar a disponibilidade
# dos links de internet

while [ 1 ]
do

# Altera sempre para o gateway padrão dentro da tabela
# main de roteamento, ou seja, quando o link primário voltar,
# automáticamente a navegação volta para este

/sbin/ip route replace default via $GW1

# Neste for, o comando dig retornará os dois IPs relacionados
# ao site do UOL. Você poderia por qualquer site aí, porém o UOL
# retorna dois IPs que serão utilizados pelo script para saber
# se o link de internet principal está fora

for i in `dig +short uol.com.br`
do

# Verificando a comunicação do link de internet

        /bin/ping -c 1 $i
done

# Caso o resultado do comando anterior seja 0 (zero), o link
# de internet principal está ok. Se for 1 (um) houve falha no comando
# deduzindo assim ausência de conexão. Quem vai determinar isso é o
# comando echo $?. Mais abaixo, haverá um if para testar as condições

STATUS_CMD_LINK=`echo $?`

if [ $STATUS_CMD_LINK -eq 0 ]; then

# Caso haja sucesso no teste do comando do ping
# as regras para o compartilhamento de internet serão inseridas

        /sbin/iptables -F
        /sbin/iptables -t nat -F

        /sbin/modprobe iptable_nat
        echo 1 > /proc/sys/net/ipv4/ip_forward
        /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
else

# Se o link falhar, os comandos mais abaixo farão a limpeza
# das regras de iptables e irão configurar o segundo link de internet
# e será criado um arquivo de log informando quando houve a queda

        echo "_________________________" >> $LOG
        echo " " >> $LOG
        echo "# LINK SECUNDARIO ATIVO.: `date +%d/%m/%y-%H:%M:%S`">> $LOG
        echo " " >> $LOG
        echo "_________________________" >> $LOG

                /sbin/ip route replace default via $GW2

                /sbin/iptables -F
                /sbin/iptables -t nat -F

                /sbin/modprobe iptable_nat
                echo 1 > /proc/sys/net/ipv4/ip_forward
                /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

fi

# A cada 2 minutos (120 segundos) será feito um teste no link
# principal para constar se o mesmo encontra-se no ar.

sleep 120

done
}

####### CHAMA A FUNÇÃO ########

failover

Dicas rápidas para linha de comando!

#1 - ASSISTA STAR WARS EM MODO ASCII

Dê o seguinte comando no shell:
  $telnet towel.blinkenlights.nl
Agora é só curtir o filme. :D

#2 - DESCUBRA SEU IP EXTERNO PELA LINHA DE COMANDO

De vez em sempre precisamos saber o nosso IP dinâmico externo fornecido pela operadora. Existem N formas de fazer isso. Aqui vou passar somente algumas dicas para a linha de comando, pois é a forma que julgo mais rápida, até mais rápida do que ter de acessar a página de configuração do roteador/modem para consultar o IP adquirido.
  • Usando wget: (utilize qualquer uma das opções, encontre a que você achar mais eficiente)
      $wget -qO - icanhazip.com
      $wget -qO - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
      $wget -qO - ifconfig.me
      $wget -qO - ip.appspot.com
      $wget http://ipecho.net/plain -O - -q ; echo
    
  • Usando curl: (utilize qualquer uma das opções, encontre a que você achar mais eficiente)
      $curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
      $curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+'
      $curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
      $curl -s monip.org | iconv -f iso-8859-1 | sed -n 's/.*IP : \([0-9.]*\).*/\1/p'
      $curl ifconfig.me
      $curl ipecho.net/plain
      $curl icanhazip.com
      $curl ipv4.icanhazip.com (explicitamente evoca o IPv4)
      $curl ipv6.icanhazip.com (explicitamente evoca o IPv6)
      $curl curlmyip.com
      #curl l2.io/ip
      $curl ip.appspot.com
      $curl ifconfig.me/ip
      $curl eth0.me
    
  • Com JSON caso você queira:
      $curl httpbin.org/ip
      $curl wtfismyip.com/json
    
  • Usando dig:
      $dig +short myip.opendns.com @resolver1.opendns.com
    
  • Usando lynx:
      $lynx -dump checkip.dyndns.org | grep 'Current IP Address:'
      $lynx -dump eth0.me
      $lynx --dump monip.org | grep 'IP'
    
    Não vou me prolongar mais nesta parte, com oeu disse: EXISTEM "N" MANEIRAS PARA SE CHEGAR AO MESMO RESULTADO! Cabe a você escolher a que achar melhor. Faça alterações nos comandos, faça suas experiências, adapte-os. Basta olhar na lista e verá que exitem várias adaptações e modificações para um mesmo comando principal. O que influencia no final é sua escolha. Finalizando esta parte, indico uma última alternativa: Quem usa Debian/Ubuntu pode instalar, caso já não tenha instalado, o pequeno programa miniupnpc se o seu roteador/modem tiver suporte para UPnP. Depois de instalado é só executar:
      $upnpc -s | grep ^ExternalIPAddress | cut -c21-
    
    Esse comando fará o mesmo que todos os outros indicados nesta seção: te mostrará seu IP dinâmico externo.

Dica

Você pode criar um shell script simples com algum dos comandos acima para tornar o processo ainda mais rápido. Exemplo
  #!/bin/bash
  
  #Cria váriável e atribui valor
  MYDINIPADDRESS="`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`"
  
  echo "\n O seu endereço IP externo é: $MYDINIPADDRESS"
Salve o arquivo (de preferência coloque a extensão .sh), torne-o executáve alterando suas permissões e depois é só executar.

#3 - EXTRAINDO TEXTO PURO DE ARQUIVOS HTML

Certa vez precisei extrair texto puro de um arquivo html. Encontrei várias opções de conversores e etc, mas a maneira mais rápida e eficaz para mim foi utilizando o lynx.
Basta executar o comando:
  $lynx --dump arquivo.html > arquivo.txt
Funciona também com arquivos PHP

#4 - UM POUCO DE CURL

Alguns usos úteis do curl:
  • Baixando arquivos:
      $curl -o nome_arquivo_local http://url_direta_para_o_arquivo
    
    Este comando funciona mesmo com binários, desde que você tenha o link direto para o arquivo
  • Baixando/Upando arquivos de/para servidores FTP:
      $curl -u ftpuser:ftppass -O ftp://diretório_do_servidor/nome_do_arquivo
    
    O comando acima baixa o arquivo e salva no diretório local
      $curl -u ftpuser:ftppass -O ftp://diretório_do_servidor/outro_diretório/
    
    O comando acima lista todo o conteúdo existente em outro_diretório
      $curl -u ftpuser:ftppass -T arquivo.txt ftp://ftp.algumserver.org
    
    O comando acima upará o arquivo.txt para o servidor
      $curl -u ftpuser:ftppass -T "{arquivo1,arquivo2}"  ftp://ftp.algumserver.org
    
    O curl permite upar vários arquivos de uma vez, exatamente como feito no exemplo acima. Você também pode utilizar curingas, como no comando abaixo, onde todos arquivos que satisfazerem a expressão serão baixados:
      $curl   ftp://ftp.server.org/downloads/linux/[a-z]/
    
    O curl é possui grande poder e versatilidade (aliás, todo o Linux é assim :D), os comandos aqui foram apenas uma simples mostra. Não vou aprofundar ou então deixar de ser "Dicas rápidas para linha de comando!"

#5 - COMANDOS ÚTEIS

  • Testando se uma porta está aberta com o comando echo:
      $echo >/dev/tcp/xxx.xxx.xxx.xxx/53 && echo "open"
    
    No lugar do xxx.xxx.xxx.xxx coloque o endereço IP que deseja testar
  • Criando senhas aleatórias:
      < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-10};echo;
    
    Esta senha possui 10 caracteres. Altere a quantidade de caracteres desejados editando o comando em: {1:-10}
  • Exibir nome de dono do arquivo ou diretório:
      $stat -c %U arquivo.txt
    
  • Exibindo o IP local:
      $ifconfig | grep "inet end.:" | awk '{print $3}' | grep -v '127.0.0.1' | cut -f2 -d:
    
    Este comando pode não funcionar em sua máquina dependendo do sistema e configuração. Se não funcionar você deve efetuar as devidas alterações no mesmo. Ex.: seu sistema pode estar em inglês, neste caso, "grep "inet end.:"" deve ser alterado para "grep "inet addr:"", etc, etc. Existe um comando mais rápido: "$ip addr show". Minha intenção foi mais uma vez demonstrar como existem vários caminhos para se chegar ao mesmo resultado.
  • Star Wars DNS
      $traceroute 216.81.59.173
    
    O comando acima te dará o traceroute de Star Wars.. Não entendeu? Execute.
      $( seq 1 8 200 ; seq 6 8 200 ) | sort -n | xargs -I{} -n 1 dig +short -x 206.214.251.{}
    
    Acima: Star Wars Episodio IV em DNS reverso 
fonte:
http://www.dicas-l.com.br/arquivo/dicas_rapidas_para_linha_de_comando.php#.VNSaqzVVKlM

sábado, 10 de janeiro de 2015

DECIFRANDO O /ETC/FSTAB

DECIFRANDO O /ETC/FSTAB


fstab
 é um arquivo em texto puro para configuração de dispositivos de armazenamento e pontos de montagem do GNU/Linux e que pode ser editado facilmente se você for administrador. 

Abaixo um exemplo do fstab:
Linux: Editando o /etc/fstab

Onde temos:

1ª COLUNA - PARTIÇÃO, DISPOSITIVO OU PASTA DE REDE

Aqui você indica a partição do HD, o CD-ROM, disquete, pendrive ou pasta de rede a serem montados no boot ou com o comando: 

# mount -a 

Obs.: para montar pastas de rede Windows recomento a dica do amigo Anderson Raimundo Lopes Nascimento:
E para NFS:

2ª COLUNA - PONTO DE MONTAGEM

Aqui você indica o local onde serão montadas as partições, dispositivos e pastas compartilhadas da rede. 

3ª COLUNA - SISTEMA DE ARQUIVOS

Aqui você indica o sistema de aquivos utilizado, sendo comum o uso do "auto" em drivers de CD-ROM, disquetes e até mesmo em pendrives. 

Os sistemas de arquivos mais comuns são: swap, ext2, ext3, ext4, ReiserFS, XFS, JFS, VFAT, NTFS, entre outros. 

4ª COLUNA - REGRAS DE MONTAGEM

Aqui você indica o que quer que o sistema permita para cada ponto de montagem. Uma boa parte da segurança do seu sistema pode ser configurada aqui. 

Segue link com algumas dicas:
Algumas opções de uso são:
  • rw - permissão de leitura e escrita
  • ro - permissão de leitura apenas
  • suid - permite a utilização do bit suid (set-user-identifier) ou sgid (set-group-identifier)
  • nosuid - não permite a utilização do bit suid ou sgid, tratando como arquivos comuns

Mais informações sobre SUID e SGID em:
Mais opções:
  • dev - permite a criação de arquivos de dispositivos
  • nodev - não permite a criação de arquivos de dispositivos
  • exec - permite execução de binários
  • noexec - não permite a execução de binários
  • auto - monta automaticamente no boot
  • noauto - não monta no boot
  • user - pode ser montado por usuários simples
  • nouser - só pode ser montado pelo root
  • sync - gravação síncrona do dispositivo, ou seja, grava no disco assim que o comando é executado.
  • async - gravação assíncrona do dispositivo, ou seja, grava na memória primeiro e depois no disco.
  • defaults - rw, suid, dev, exec, auto, nouser, e async

5ª COLUNA - OPÇÕES DO DUMP

Opção de backup da partição onde:
  • 0 - está desativado
  • 1 - está ativo

6ª COLUNA - OPÇÕES DO FSCK

Opção de verificação da partição onde:
  • 0 - não verifica
  • 1 - prioridade de verificação (partição do sistema, /)
  • 2 - prioridade de verificação (outras partições)

fonte:
http://www.vivaolinux.com.br/dica/Decifrando-o-etcfstab

terça-feira, 30 de dezembro de 2014

Monitorando Rede com Zabbix no Debian 7

Introdução / Pré-Instalação / Configuração


Introdução

Neste tutorial, abordarei uma ferramenta muito interessante que testo por alguns meses, mas já posso dizer que é uma das melhores ferramentas para monitoramento de redes, seja ela pequena ou grande.

Criado para monitorar disponibilidade e desempenho de redes, ele é capaz de monitorar e coletar muita coisa. Podemos monitorar, por exemplo, recursos de hardware (velocidade do cooler, temperatura do processador, temperatura do HD, etc), recursos lógicos (Processamento, memória utilizada, IO dos discos, partições, trafego de rede, etc) ambientes (temperatura e umidade do seu CPD ou de outros locais).

Enfim, tudo o que você consegue monitorar por IPMI, SNMP, Simple Check, entre outras maneiras de monitoramento de Servidores, Sensores, Switchs, Roteadores, No-Breaks, enfim, muita coisa pode ser monitorado pelo nosso amigo Zabbix. Digo amigo, porque esse 'cara' é muito útil para nós, profissionais de TI.

Então, você me pergunta: Jeferson, para que vou querer monitorar minha rede? Por que?

Respondo: por vários motivos! Imagine você sem ferramenta nenhuma de monitoramento? Como é que você vai provar e convencer o seu gerente/diretor que você precisa de um upgrade do seu servidor porque o 'coitadinho' não está aguentando mais processar o volume de dados da sua empresa?

Como é que você vai convencer o seu gerente/diretor que você precisa aumentar a sua banda, porque o seu link atual não está mais dando conta do volume de trafego que tem em sua empresa?

Talvez essa não seja solução garantida, mas com gráficos de monitoramento, pode acreditar que fica muito mais fácil. Estes são uns dos exemplos, pois você poderia utilizar, por exemplo, para saber quando alguma coisa está errada em sua rede, um switch/roteador desligado, um servidor reiniciando sozinho, um broadcast muito alto na sua rede, enfim, você consegue monitorar tudo isso, ajudando e muito no tempo de resolução de um problema, deixando a sua infra-estrutura o mais disponível possível.

Então, vamos à instalação dessa ferramenta maravilhosa!

Neste tutorial estou usando o Debian 7 como servidor/cliente. Caso tenha preferencia por outra distribuição, verifique e adapte os comandos.

Pré-Instalação

Antes de começar a instalação do Zabbix, precisamos antes atender a alguns pré-requisitos para a instalação, como compilador, Java, MySQL, PHP, Apache e algumas bibliotecas.

Para instalarmos os pacotes necessários, vamos utilizar os seguintes comandos:

# echo "deb http://ftp.br.debian.org/debian stable main" >> /etc/apt/sources.list
# apt-get update

# apt-get install -y --force-yes make flex gcc gpp apache2 php5 php5-mysql libapache2-mod-php5 php5-gd php-net-socket libpq5 libpq-dev snmp libiksemel-dev libcurl4-gnutls-dev vim libssh2-1-dev libssh2-1 libopenipmi-dev libsnmp-dev mysql-server-5.5 mysql-client wget libmysqld-dev curl fping openjdk-6-jdk


Obs: na instalação do MySQL, será solicitada a senha do root.

Pronto, depois de instalarmos as dependências para a instalação do Zabbix, vamos criar os diretórios onde ficarão os arquivos.

# mkdir -pv /etc/zabbix/install
# cd /etc/zabbix/install


Já dentro do diretório, vamos baixar e descompactar o pacote do Zabbix:

# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.0.8/zabbix-2.0.8.tar.gz
# tar -xzvf zabbix-2.0.8.tar.gz

Pronto, agora vamos às configurações.

Configuração

O que devemos fazer agora, é criar e configurar a base do MySQL que será usada pelo Zabbix, criar um usuário para o Zabbix no Unix e configurar o Apache/PHP.

# mysql –u root –p

 mysql> create database zabbix character set utf8;
 mysql> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
 mysql> quit;

Obs: em password, coloque a senha da base de dados para o usuário zabbix que não terá ligação com o usuário do Unix.

# useradd -s /bin/false zabbix

Vamos agora alterar algumas configurações do Apache/PHP, editando o seguinte arquivo:

# pico /etc/php5/apache2/php.ini

date.timezone = "America/Brasilia"
max_execution_time = 300
max_input_time = 300
post_max_size = 16M

Como alteramos as configurações do Apache/PHP, vamos reinicia-lo:

# /etc/init.d/apache2 restart

Instalação


 Vamos começar, realmente, a instalação do Zabbix. O primeiro passo é popular a base de dados que criamos anteriormente:

# cat /etc/zabbix/install/zabbix-2.0.8/database/mysql/schema.sql | mysql -u zabbix -p<password> zabbix
# cat /etc/zabbix/install/zabbix-2.0.8/database/mysql/images.sql | mysql -u zabbix -p<password> zabbix
# cat /etc/zabbix/install/zabbix-2.0.8/database/mysql/data.sql | mysql -u zabbix -p<password> zabbix 


Depois de popular o banco de dados, vamos configurar o pacote para a instalação. Para isso, navegue até o deretório "/etc/zabbix/install/zabbix-2.0.8/":

# ./configure --prefix=/etc/zabbix --enable-server --enable-agent --enable-java --with-mysql --with-net-snmp --with-jabber --with-libcurl=/usr/bin/curl-config --with-ssh2 --with-openipmi

Onde:
  • --prefix=/etc/zabbix → Indicando o diretório dos arquivos de instalação.
  • --enable-server → Habilitando o servidor Zabbix.
  • --enable-agent → Habilitando o agente Zabbix.
  • --enable-java → Habilitando o Java.
  • --with-mysql → Indicando qual será a nossa base de dados, no nosso caso o MySQL.
  • --with-net-snmp → Habilitando o monitoramento SNMP.
  • --with-jabber → Habilitando o envio de mensagens via Jabber.
  • --with-libcurl=/usr/bin/curl-config → Habilitando a biblioteca Curl e indicando o seu diretório.
  • --with-ssh2 → Habilitando o modulo SSH2 para comandos remotos e monitoramento via SSH.
  • --with-openipmi → Habilitando o monitoramento IPMI.

Obs: caso queira verificar todos os módulos disponíveis no Zabbix, execute o comando

$ ./configure --help

Depois de configurarmos o pacote, vamos compilar e instalar:

# make; make install

Vamos editar o arquivo "/etc/services", adicionando as portas necessárias para comunicação do Zabbix:

# pico /etc/services

zabbix-agent    10050/tcp #Zabbix Agent
zabbix-agent    10050/udp #Zabbix Agent
zabbix-trapper  10051/tcp #Zabbix Trapper
zabbix-trapper  10051/udp #Zabbix Trapper

Obs: como é possível reparar neste arquivo, as portas estão em ordem, adicione as linhas acima nesta ordem. Lembrando que, em alguns casos, a linha é adicionada automaticamente, então, tente localiza-las antes de inserir manualmente.

Agora, vamos criar alguns links para ficar mais fácil a localização dos arquivos de configuração, tanto do cliente, como do servidor Zabbix:

# ln -s /etc/zabbix/etc/zabbix_agentd.conf /etc/zabbix
# ln -s /etc/zabbix/etc/zabbix_server.conf /etc/zabbix


Vamos editar o arquivo "/etc/zabbix/zabbix_agentd.conf", alterando os seguintes valores:

# pico /etc/zabbix/zabbix_agentd.conf

PidFile=/tmp/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log
LogFileSize=2
DebugLevel=3
EnableRemoteCommands=1
LogRemoteCommands=1
Server=127.0.0.1
ListenPort=10050
Hostname=Informe_o_nome_do_seu_servidor

Depois, vamos alterar as configurações do arquivo "/etc/zabbix/zabbix_agentd.conf", que é a configuração do servidor Zabbix:

# pico /etc/zabbix/zabbix_server.conf

ListenPort=10051
LogFile=/tmp/zabbix_server.log
LogFileSize=2
PidFile=/tmp/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=senha do zabbix para acessar o banco de dados
StartIPMIPollers=1
StartDiscoverers=5
FpingLocation=/usr/sbin/fping

Obs: certifique-se que o caminho do fping da sua instalação é realmente igual ao do nosso exemplo com o comando whereis fping, para que não haja problemas posteriormente.

Vamos configurar agora, a parte dos frontends:

# mkdir /var/www/zabbix
# cp -R /etc/zabbix/install/zabbix-2.0.8/frontends/php/* /var/www/zabbix/
# chown -R www-data:www-data /var/www/zabbix/
# /etc/init.d/apache2 restart


Agora, precisamos criar os scripts de start-stop-restart, tanto do servidor, quanto do cliente Zabbix:

# pico /etc/init.d/zabbix_agentd

#!/bin/sh
#
# Zabbix agent start/stop script.
#
# Written by Alexei Vladishev <alexei.vladishev@zabbix.com>.

NAME=zabbix_agentd
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/zabbix/bin
DAEMON=/etc/zabbix/sbin/${NAME}
DESC="Zabbix agent daemon"
PID=/tmp/$NAME.pid
test -f $DAEMON || exit 0
set -e
case "$1" in
  start)
        echo "Starting $DESC: $NAME"
        start-stop-daemon --oknodo --start --pidfile $PID \
                 --exec $DAEMON
        ;;
  stop)
        echo "Stopping $DESC: $NAME"
        start-stop-daemon --oknodo --stop  --pidfile $PID \
                --exec $DAEMON
        ;;
  restart|force-reload)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
#       echo -n "Restarting $DESC: zabbix_agent"

        $0 stop
        $0 start
#       start-stop-daemon --stop --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       sleep 1
#       start-stop-daemon --start --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       echo "$NAME."

        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|force-reload}" >&2
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0

# pico /etc/init.d/zabbix_server

#!/bin/sh
#
# Zabbix daemon start/stop script.
#
# Written by Alexei Vladishev <alexei.vladishev@zabbix.com>.

NAME=zabbix_server
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/zabbix/bin
DAEMON=/etc/zabbix/sbin/${NAME}
DESC="Zabbix server daemon"
PID=/tmp/$NAME.pid
test -f $DAEMON || exit 0
set -e
case "$1" in
  start)
        echo "Starting $DESC: $NAME"
        start-stop-daemon --oknodo --start --pidfile $PID \
                --exec $DAEMON
        ;;
  stop)
        echo "Stopping $DESC: $NAME"
        start-stop-daemon --oknodo --stop --pidfile $PID \
                --exec $DAEMON
        ;;
  restart|force-reload)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is 10
        #       just the same as "restart".
        #
#       echo -n "Restarting $DESC: zabbix_server"

        $0 stop
        $0 start
#       start-stop-daemon --stop --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       sleep 1
#       start-stop-daemon --start --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       echo "$NAME."

        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|force-reload}" >&2
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0

Vamos dar permissão aos scripts e iniciar o agente e o servidor Zabbix:

# chmod +x /etc/init.d/zabbix_server /etc/init.d/zabbix_agentd
# /etc/init.d/zabbix-server start
# /etc/init.d/zabbix-agentd start


Vamos configurar a inicialização do sistema para que os serviços sejam devidamente iniciados junto com o sistema:

# update-rc.d -f zabbix_server defaults
# update-rc.d -f zabbix_agentd defaults


Pronto, já fizemos todas as configurações necessárias no Unix. Vamos agora à parte gráfica do negócio, para isso, devemos acessar o endereço:

http://ip_do_servidor/zabbix

Uma janela semelhante a essa será exibida. Clique em: Next

Verifique todas as dependências e se estiver tudo Ok, clique em: Next
Preencha os campos para conexão com o banco de dados, clique em Test connection para testar a conexão e, se estiver Ok, clique em: Next

Deixe padrão o nome do host e a porta, e em Name, insira o nome do seu servidor e clique em: Next

Confira os dados inseridos e clique em: Next

Pronto, o Zabbix já está configurado. Logo após clicar em Finish, será exibida a tela de login.

Por padrão:
  • Usuário: admin
  • Senha: zabbix
Linux: Monitorando Rede com Zabbix no Debian 7   Linux: Monitorando Rede com Zabbix no Debian 7
Por padrão, o monitoramento via agente no servidor Zabbix é desabilitado.

Para habilita-lo, vá em Configuration e depois em Host, logo você visualizará o servidor. E em Status, estará como Not monitored, basta clicar em cima que o status ficará como Monitored

Instalação e Configuração Clientes Linux e Windows


Cliente Linux

Antes de configurarmos o cliente, devemos criar os diretórios que irão alocar os arquivos de instalação:

# mkdir -pv /etc/zabbix/install
# cd /etc/zabbix/install


Já dentro do diretório, vamos baixar e descompactar o pacote do Zabbix:
# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.0.8/zabbix-2.0.8.tar.gz
# tar -xzvf zabbix-2.0.8.tar.gz
# cd zabbix-2.0.8/


O próximo passo, seria a compilação dos módulos que vamos instalar, mas antes, vamos instalar o gcc e o make:

# apt-get update
# apt-get install –y gcc make


Depois de instalado o gcc e o make, vamos compilar nossa instalação:

# ./configure --prefix=/etc/zabbix --enable-agent --enable-static

Onde:
  • --prefix=/etc/zabbix → Indicando o diretório dos arquivos de instalação.
  • --enable-agent → Habilitando o agente Zabbix.
  • --enable-static → Criando links estáticos para os binários.

Depois de compilado, vamos instalar:

# make; make install

Vamos agora, depois de instalado, criar alguns links para facilitar o acesso ao arquivo de configuração do agente:

# ln -s /etc/zabbix/etc/zabbix_agentd.conf /etc/zabbix/

Agora, vamos configurar o script de gerenciamento (start / stop / ... /):

# pico /etc/init.d/zabbix_agentd

#!/bin/sh
#
# Zabbix agent start/stop script.
#

NAME=zabbix_agentd
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/zabbix/bin
DAEMON=/etc/zabbix/sbin/${NAME}
DESC="Zabbix agent daemon"
PID=/tmp/$NAME.pid
test -f $DAEMON || exit 0
set -e
case "$1" in
  start)
        echo "Starting $DESC: $NAME"
        start-stop-daemon --oknodo --start --pidfile $PID \
                 --exec $DAEMON
        ;;
  stop)
        echo "Stopping $DESC: $NAME"
        start-stop-daemon --oknodo --stop  --pidfile $PID \
                --exec $DAEMON
        ;;
  restart|force-reload)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
#       echo -n "Restarting $DESC: zabbix_agent"

        $0 stop
        $0 start
#       start-stop-daemon --stop --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       sleep 1
#       start-stop-daemon --start --quiet --pidfile \
#               /tmp/$NAME.pid --user zabbix --exec $DAEMON
#       echo "$NAME."

        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|force-reload}" >&2
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0

Vamos aplicar permissão de execução ao script:

# chmod +x /etc/init.d/zabbix_agentd

Vamos alterar algumas configurações para que o agente funcione corretamente:

# pico /etc/zabbix/ zabbix_agentd.conf

PidFile=/tmp/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log
LogFileSize=1
EnableRemoteCommands=1
LogRemoteCommands=1
Server=IP_SERVIDOR_ZABBIX
ListenPort=10050
StartAgents=3
#ServerActive=127.0.0.1
Hostname=NOME_CLIENTE

Obs: note que em Server, você deve colocar o IP do seu servidor Zabbix, deve também comentar a linha ServerActive, e em Hostname, você deve colocar o nome do seu cliente, do mesmo jeito que aparece no shell.

Antes de iniciarmos o nosso agente, vamos criar um usuário no sistema para o Zabbix:

# useradd -s /bin/false zabbix

Agora vamos, finalmente, iniciar nosso agente:

# /etc/init.d/zabbix_agente start

Se tudo estiver OK, o agente será iniciado. Vamos configura-lo para iniciar junto com o sistema:

# update-rc.d -f zabbix_agentd defaults

Pronto, o nosso agente está configurado no nosso cliente. Basta configurar no console de administração do Zabbix para iniciar o monitoramento.

Obs: lembrando que caso haja um Firewall rodando no cliente, é necessário abrir as portas 10050/10051 UDP e 10050/10051 TCP, para que o servidor consiga comunicar-se com o agente.

Cliente Windows

Para configurarmos o agente no Windows, devemos primeiramente criar um diretório chamado ZABBIX em "C:", depois, devemos coletar alguns arquivos que estão no pacote que baixamos, tanto para instalação do servidor, quanto para a instalação do cliente Linux.

Depois de descompactado, entre no diretório bin, dentro deste diretório há duas pastas (win32 e win64). Verifique a arquitetura do seu Sistema Operacional e copie todo o conteúdo da pasta correspondente para a pasta ZABBIX que criamos anteriormente.

Você pode usar o Filezilla, por exemplo, para transferir do Linux para o Windows ou baixar o pacote diretamente no Windows pelo link para download do pacote Zabbix, usando o 7-zip ou Winrar para descompactar.

Depois de todos os arquivos transferidos, devemos criar o nosso arquivo de configuração com o nome "zabbix_agentd.conf" que deverá ter o seguinte conteúdo:

# This is a config file for Zabbix Agent (Windows)
# To get more information about Zabbix, go to http://www.zabbix.com

############ GENERAL PARAMETERS #################


LogFile=c:\ZABBIX\zabbix_agentd.log
DebugLevel=3
Server=IP_SERVER
StartAgents=5
Hostname=HOSTNAME_CLIENTE

############ ADVANCED PARAMETERS #################

Timeout=3

Obs: em IP_SERVER, coloque o que IP do seu servidor Zabbix e em HOSTNAME_CLIENTE, coloque o nome do cliente que está sendo configurado.

Agora, vamos abrir o prompt de comando como administrador, e navegar até o diretório "C:\ZABBIX" que criamos anteriormente. Para isso, digite o seguinte comando:

C:\Windows\System32> cd C:\ZABBIX

Obs: note que o prefixo "C:\Windows\System32>", é somente para indicar que estamos dentro do Prompt de comando do Windows.

Depois vamos criar o serviço:

C:\ZABBIX> zabbix_agentd.exe -i -c zabbix_agentd.conf

Agora vamos iniciar o serviço:

C:\ZABBIX> zabbix_agentd.exe -s -c zabbix_agentd.conf

Pronto, o nosso agente está configurado no nosso cliente. Basta configurar no console de administração do Zabbix para iniciar o monitoramento.

Obs: assim como no GNU/Linux, caso haja um Firewall rodando, deve-se abrir as portas 10050/10051 UDP e 10050/10051 TCP, para que o servidor Zabbix consiga comunicar-se com o agente.
 

Criando um Host no Console de Administração


Depois de configurarmos corretamente os agentes, vamos criar os Hosts no console de administração do Zabbix, para que seja iniciado o monitoramento.

No console de administração, posicione o mouse sobre Configuration e clique em Hosts, já na janela de configuração de Hosts, clique em Create Host e você verá uma janela semelhante a essa:
Linux: Monitorando Rede com Zabbix no Debian 7

Preencha todos os dados conforme sua necessidade. Depois de preenchido, devemos definir o que será monitorado, para isso, é utilizado os templates.

Para definirmos um template ao nosso Host, clique no guia Templates e depois clique em Add. Selecione o template desejado, clique em Select e depois em Save, para finalizar a configuração do Host.

Há vários outros parâmetros que podem ser configurados, mas para somente iniciarmos o monitoramento, o que fizemos já é o suficiente.

Concluindo

Com os passos acima, você já terá um servidor Zabbix operacional em sua rede, podendo monitorar tudo que possua IP.

Em próximas oportunidades, postarei a instalação de clientes em Slackware, CentOS e se houver oportunidade e demanda, posso postar a instalações do Zabbix/Cliente em outras distribuições, além de configuração de SNMP nos Switchs, Roteadores e outros Devices para monitara-los também.

Obrigado pela atenção.


Para baixar o tutorial em PDF, clique aqui.

Testado no Debian 7 / Zabbix 2.0.8 para Servidor | Linux Debian 7, Ubuntu Server, Windows Server 2003, 2008 e 7 para Cliente.

fonte: