sexta-feira, 21 de agosto de 2015

Instalando o Zabbix Server e Zabbix Agent no Raspberry Pi





Instalando o Zabbix Server e Zabbix Agent no Raspberry Pi
Olá pessoal!
Na Byte Livre nós utilizamos sempre o que há de mais novo em tecnologia, para isso realizamos incontáveis testes (em novos produtos e novas ferramentas) antes de colocar algo em produção.
Um dos testes que estamos fazendo e que estamos tendo um grande resultado é a utilização do Raspberry Pi (no caso o modelo B+) como servidor Zabbix.
Pela limitação de hardware do nosso amigo, essa solução não é aconselhável para grandes redes, porém em pequenas redes com até 5 servidores sendo monitorados, ele está se saindo muito bem!
Mas você deve estar se perguntando: Porque não virtualizar uma máquina para isso? Não é mais fácil usar então um desktop para essa função?
Sim! Você pode virtualizar uma máquina para isso e pode também utilizar um computador que esteja parado para essa função. Porém o Raspberry Pi tem algumas vantagens que no final das contas decide essa disputa:
 Preço: por 200 reais você consegue comprar um Raspberry Pi novinho!
 Comodidade: o Raspberry Pi não ocupa espaço (parece que não, mas para algumas empresas isso é extremamente importante).
 Fácil manutenção: o Raspberry Pi utiliza um cartão SD para o armazenamento dos arquivos, sendo assim, é muito simples criar um backup completo de todo o sistema operacional e repor esse backup acaba sendo mais rápido ainda.
 Baixo consumo de energia: no preço que estamos pagando a energia, nem preciso dizer que esse fator importa, e MUITO!
 Porta GPIO: para mim, essa é a principal vantagem. Com a porta GPIO você pode agregar mais funções ao seu Raspberry Pi além de servidor Zabbix. Não vou entrar afundo aqui pois teremos artigos futuros para isso!
Convencido de que o Raspberry Pi como servidor Zabbix é uma opção interessante, vamos colocar a mão na massa agora!
Como não é o escopo deste artigo descrever os primeiros passos com o Raspberry Pi, para seguir adiante é necessário que você esteja com ele em funcionamento. No nosso exemplo, estamos utilizando o Raspbian como distribuição Linux.
Vale lembrar que iremos utilizar o MySQL (MariaDB) como Banco de Dados pois o SQLite3 ainda não possui um suporte oficial para o Zabbix Server. Utilize um cartão SD de pelo menos 8Gb.
Vamos lá!
Atualize o sistema:
# apt-get update
# apt-get upgrade
Instale os pacotes necessários para a instalação do Zabbix Server e Zabbix Agent:
# apt-get install build-essential snmp libiksemel-dev vim libssh2-1-dev libssh2-1 libopenipmi-dev libsnmp-dev wget libcurl4-gnutls-dev fping libxml2 libxml2-dev curl libcurl3-gnutls libcurl4-gnutls-dev sudo apache2 php5 libapache2-mod-php5 php5-gd php-net-socket php5-ldap php5-curl php5-mysql mysql-server mysql-client libmysqld-dev
Baixe a última versão do Zabbix (na época deste artigo: 2.4.6)
# wget http://ufpr.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.6/zabbix-2.4.6.tar.gz
Descompacte o arquivo baixado:
# tar -zxvf zabbix-2.4.6.tar.gz
Acesse a pasta criada:
# cd zabbix-2.4.6/
Configure a instalação:
# ./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-jabber=/usr --with-libcurl --with-libxml2 --with-openipmi
Instale:
# make install
Adicione o usuário  zabbix:
# adduser zabbix
Reinicie o MySQL:
/etc/init.d/mysqld restart
Acesse o MySQL:
mysql -u root -p
Crie o banco de dados do zabbix:
mysql> create database zabbix character set utf8;
Dê permissão para o usuário zabbix:
mysql> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'senha';
Saia do mysql:
mysql> exit
Importe os SQL’s do zabbix para o banco de dados:
cat database/mysql/schema.sql | mysql -u zabbix -p zabbix
cat database/mysql/images.sql | mysql -u zabbix -p zabbix
cat database/mysql/data.sql | mysql -u zabbix -p zabbix
Edite o arquivo de configuração do zabbix-server:
# nano /usr/local/etc/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=senha
Copie os arquivos de inicialização do Zabbix Server e do Zabbix Agent:
# cp misc/init.d/debian/zabbix-server /etc/init.d/
# cp misc/init.d/debian/zabbix-agent /etc/init.d/
Dê permissão para os arquivos:
# chmod 775 /etc/init.d/zabbix-server
# chmod 775 /etc/init.d/zabbix-agent
Coloque os scripts na inicialização do sistema:
# update-rc.d zabbix-server defaults
# update-rc.d zabbix-agent defaults
Crie a pasta para o zabbix-web:
# mkdir /var/www/zabbix
Copie os arquivos do zabbix-web para a pasta zabbix:
# cp -a frontends/php/* /var/www/zabbix/
Dê as devidas propriedades a pasta zabbix:
# chown -R www-data:www-data /var/www/zabbix
Inicie os serviços:
# /etc/init.d/zabbix-server start
# /etc/init.d/zabbix-agent start

Altere as configurações do PHP para optimizar a performance do Zabbix:
# nano /etc/php5/apache2/php.ini
max_execution_time = 300
max_input_time = 600
post_max_size = 16M 
date.timezone = America/Sao_Paulo
Reinicie o apache2:
# /etc/init.d/apache2 restart
Acesse o endereço: http://ip_do_server/zabbix
Complete a configuração conforme as imagens:



Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi
Zabbix Server no Raspberry Pi

Desta maneira o seu Raspberry Pi funciona agora como um poderoso servidor Zabbix!
Nos próximos artigos, iremos utilizar as portas GPIO do Raspberry Pi em conjunto com o Zabbix!
Caso você tenha se interessado por este artigo, você provavelmente irá se interessar pelo nosso Curso de Zabbix (básico e intermediário) com OCS Inventory e pelo nosso Curso de Zabbix Avançado!
fonte: http://bytelivre.net/blog/instalando-o-zabbix-server-e-zabbix-agent-no-raspberry-pi/

quarta-feira, 12 de agosto de 2015

Análise de desempenho com Iperf

O Iperf é um software de análise de desempenho de banda e cálculo de perda de datagramas na rede que é mantido pela Universidade de Illinois sob licença GPL.

O Iperf é um software cliente/servidor adequado para medições ativas. Além das medições, esse software pode ser usado com um gerador simples de carga na rede, quando não há preocupação com o perfil do tráfego que está sendo gerado. Também com Iperf é possível medir o Jitter (variação do atraso) e a perda. O Iperf é capaz de usar tanto o protocolo UDP, quanto TCP e pode lidar com múltiplas conexões simultâneas.

O Iperf usado com protocolo UDP necessita de especificação de banda, utilizando o parâmetro -b. No caso do protocolo TCP há um mecanismo de controle de congestionamento que procurará usufruir de toda a banda disponível no caminho, se o mecanismo de controle de fluxo permitir.

Segue alguns parâmetros:

Entre os parâmetros da linha de comandos encontrar-se-ão os seguintes:
  • -l: Comprimento da mensagem;
  • -c/-s: Especificação de cliente/servidor;
  • -t: Intervalo de tempo entre mensagens (envio contínuo por omissão).

Após execução, uma vez terminada, a aplicação cliente deverá fornecer as informações para análise.

Iperf - Testes

Objetivo: Analisar e comparar o desempenho de uma rede alterando os ambientes de testes usando para isso o software Iperf. Precisamos de pelo menos duas máquinas para fazer os testes: um Servidor e outra Cliente.

1) Teste básico default:

Servidor: iperf -s
Cliente: iperf -c <IP>

2) Teste utilizando 130k no tamanho do buffer para transmissão:

Servidor: iperf -s -w 130k
Cliente: iperf -c <IP> -w 130k

3) Teste utilizando 1M no tamanho do Buffer para transmissão, mas agora um servidor e dois clientes:

Servidor: iperf -s -w 1M
Cliente1: iperf -c <IP> -w 1M
Cliente2: iperf -c <IP> -w 1M -P 2

4) Teste do MSS (Maximum Segment Size) que representa o tamanho do maior bloco de dados que poderá ser enviado para o destino. Não é negociável, cada host divulga o seu MSS. Default: 536 bytes (20 bytes IP, 20 bytes TCP, para um total de 576 bytes). Ethernet: 1460 bytes (20 bytes IP, 20 bytes TCP, para um total de 1500 bytes)

Servidor: iperf -s -m
Cliente: iperf -c <IP> -m

5) Teste utilizando protocolo UDP, onde neste pode ser passado o tempo em segundos para analisar uma faixa de intervalos.

Servidor: iperf -s -u -i 1
Cliente: iperf -c <IP> -u -b 400k

6) Teste passando como parâmetro o tamanho do datagrama para read/write (default 8 KB) sendo 32K e utilizando 300K no tamanho do Buffer para transmissão. Ainda é passado o tempo em segundos para analisar uma faixa de intervalos.

Servidor: iperf -s -u -l 32k -w 300k -i 1
Cliente: iperf -c < IP > -b 10m -l 32k -w 300k

Importante: Para efeitos de testes repita as medidas, mas agora em presença de tráfego anormal gerado através do ping, faça testes executando o ping em várias máquinas. Também pode utilizar um ambiente misto, trabalhando com Linux e Windows ao mesmo tempo, fazer testes com a internet, com Hub, Switchs, com placas de rede em 10 MB 100 MB ou 1 GB.

fonte: http://www.vivaolinux.com.br/dica/Analise-de-desempenho-com-Iperf

quinta-feira, 6 de agosto de 2015

Automatizando o envio de emails utilizando o mutt

Já se falou um bocado aqui no Dicas-L sobre o mutt. Recentemente, porém me deparei com um problema cuja solução pode vir a ajudar mais alguém.
Normalmente eu utilizo o Evolution como software gerenciador de emails, mas me deparei com uma tarefa onde tenho que enviar, de forma automática e regular um email. Depois quebrar um pouco a cabeça resolvi o problema de forma simples utilizando o mutt.
Depois de instala-lo, é necessário realizar uma pequena personalização no arquivo ~/.muttrc:
  # Nome do Remetente
   set realname="Seu Nome"
  
  # Email do Remetente
   set from="SeuEmail@gmail.com;"
  
  # Identificação do usuário da conta de email
   set my_user=SeuEmail@gmail.com
  
  # Senha da conta de email
   set my_pass='SuaSenha'
  
  # Autentificação no servidor smtp de email, nesse caso do gmail.com
  set smtp_url = "smtp://SeuEmail@smtp.gmail.com:587/"
  set smtp_pass = "SuaSenha"find / -nouser -print
  # Camada de segurança, requerida pelo gmail.com
  set ssl_force_tls = yes
Pode-se, então, criar um arquivo contendo o texto padrão para o corpo da mensagem e invocar o mutt a partir da linha de comando:
  $ mutt -s "Assunto" destino@qqcoisa.com.br < ~/ArquivoDoCorpoDaMsg.txt
E, para automatizar o processo, pode-se criar uma entrada no crontab , inserindo-se uma linha após realizar a chamada do comando crontab -e:
  00 13 01 * * mutt -s "Assunto" destino@qqcoisa.com.br < ~/ArquivoDoCorpoDaMsg.txt
Isso fará com que o seu email seja enviado no dia primeiro de cada mês às 13:00h. Neste caso é obrigatório o redirecionamento < ~/ArquivoDoCorpoDaMsg.txt, ou o muut abrirá no modo edição de mensagens.
Para anexar um arquivo ao seu email, utiliza a opção -a. Desta forma, para, por exemplo, enviar para si mesmo um email contendo informações de um servidor remoto poderia ser criada mais uma entrada no crontab do root:
  01 00 * * * mutt -s "Secure do servidor tal" SeuEmail@gmail.com -a /var/log/secure < ~/CorpoDaMsg.txt
Que enviaria para si uma mensagem contendo o arquivo /var/log/secure todos os dias às 00:01h.

segunda-feira, 3 de agosto de 2015

Balanceamento de links - Load balance + Failover + Failback (não foi testado)

Balanceamento de links - Load balance + Failover + Failback



Após diversos artigos/tutorias seguidos passo a passo e sem resultado, me vi na situação desesperada de não conseguir fazer funcionar:
  • Balanceamento de links de internet (load balance).
  • Migração de links em caso de queda de um link (failover).
  • Restauração do link que voltou a funcionar (failback).

Como minha necessidade era urgente adquiri o Roteador TP-Link TL-R470T, que me permitiu usufruir de todas essas funcionalidades, posso dizer que só tenho elogios ao mesmo. No entanto sempre tive o desejo de fazer funcionar com minhas próprias mãos e utilizando o GNU/Linux. Após muito tempo com inúmeras tentativas conseguir fazer funcionar todas essas funções, neste artigo mostrarei como fazê-las. 

Este artigo será dividido em partes, de modo que, seguido todos os passos ou até apenas um, o leitor terá a capacidade de implementá-los. Todos os dados/comandos utilizados neste artigo foram obtidos da internet durante os últimos anos, desta forma existem dezenas de partes adquiridas de fontes diversas e algumas funções desenvolvidas por mim. 

Primeiramente trabalharemos com o balanceamento de carga, permitindo que uma rede utilize dois links ou mais ao mesmo tempo. A maioria dos artigos não deixa claro os requisitos e as configurações para o correto funcionamento do balanceamento de carga. Mostraremos aqui todos os detalhes de modo que qualquer pessoa que seguir esse artigo possa implementar todos as funções de forma eficaz. 

Requisitos:
  • iproute2
  • iptables

Configurações: 

Criar as tabelas no arquivo rt_tables localizado em /etc/iproute2/rt_tables. Adicionando duas novas tabelas, como exemplo criaremos as duas tabelas abaixo, sabendo que as tabelas deve conter um número de identificação e o nome: 

200 nome_tabela_1
201 nome_tabela_2

Observação: não defina nenhum gateway na configuração das placas de rede, pois o balanceamento não será reconhecido e o sistema utilizará apenas o gateway default. 

Utilizaremos como base uma pasta criada na raiz do sistema com o nome internet, onde ficaram os arquivos para balanceamento de link e migração de link, ficando assim:
  • /internet/

BALANCEAMENTO DE LINKS DE INTERNET (LOAD BALANCE)

Para o script de balanceamento de carga, crie um novo arquivo com o nome "balanceamento.sh" na pasta padrão, sendo o arquivo acessado pelo seguinte endereço:
  • /internet/balanceamento.sh

Conteúdo do arquivo "balanceamento.sh": 

# Dados da interfaces de rede conectadas com a internet - Link 1
placa_rede_1=eth0
tabela_1=nome_tabela_1
gateway_1=192.168.0.1
peso_balanceamento_link_1=30

# Dados da interfaces de rede conectadas com a internet - Link 2
placa_rede_2=eth1
tabela_2=nome_tabela_2
gateway_2=192.168.1.1
peso_balanceamento_link_2=70

# Dados da Rede Interna
placa_rede_interna=eth2
rede_interna=10.0.0.0/24

### Fim das Variáveis

#Carregar módulos
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ipt_MARK
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

# O uso do rp_filter faz o firewall sempre responder aos pacotes na mesma interface da qual eles foram originados, prevenindo previne ataques diversos tentem tirar proveito da regra que permite conexões na interface de loopback.
# No entanto faz com que o balanceamento seja menor, obrigando os pacotes irem sempre pelas mesmas interfaces
# Zero (0) para desativado e (1) para ativado
echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Deletar a rota default
ip route del default

# Limpa as regras das tabelas
ip route flush table $tabela_1
ip route flush table $tabela_2

# Define a rota para as tabelas
ip route add default dev $placa_rede_1 via $gateway_1 table $tabela_1
ip route add default dev $placa_rede_2 via $gateway_2 table $tabela_2

# Define as regras para balanceamento dos links
ip route add default scope global nexthop via $gateway_1 dev $placa_rede_1 weight $peso_balanceamento_link_1 nexthop via $gateway_2 dev $placa_rede_2 weight $peso_balanceamento_link_2

# Aplicar as regras
ip route flush cache

# Compartilha a conexão
iptables -t nat -A POSTROUTING -o $placa_rede_1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $placa_rede_2 -j MASQUERADE

MIGRAÇÃO E RESTAURAÇÃO DE LINKS EM CASO DE QUEDAS (FAILOVER + FAILBACK)

Nos dias atuais a redundância de links de internet é fundamental na estabilidade das empresas, onde poucos minutos sem conexão geram prejuízos gigantescos. A cada dia pequenas, médias e grandes empresas investem em tecnologias e redundância, com os links de acesso à internet não é diferente. Uma das dificuldades é como manter tudo funcionando e de forma redundante. 

Para o script de migração e restauração de links em caso de quedas, crie um novo arquivo com o nome "failover.sh" na pasta padrão, sendo o arquivo acessado pelo seguinte endereço:
  • /internet/failover.sh.

#!/bin/bash

# Adicionar no rc.local nohup > /dev/null /internet/failover &

# Tempo esperado para testar a conexão novamente
tempo_espera=30

# Número de pacotes a ser pingados
numero_pacotes=2

# Nome das interfaces de rede conectadas com a internet
placa_rede_1=eth0
placa_rede_2=eth1

# Gateway das interfaces
gateway_1=192.168.0.1
gateway_2=192.168.1.1

# Endereço IP a ser pingado (8.8.8.8 é o DNS do Google)
endereco_ping=8.8.8.8

# Arquivo de balanceamento de links
arquivo=/internet/balanceamento.sh

# Não alterar nada daqui para baixo
# Variáveis destinadas ao controle
i=0
link1=1
link2=1

# Ativação do Balanceamento de Links
sh $arquivo > /dev/null

while [ $i -le 10 ];
do

if [ $link1 = 0 ] || [ $link2 = 0 ]; then
sh $arquivo > /dev/null
fi

if (ping -I $placa_rede_1 -c $numero_pacotes $endereco_ping > /dev/null)
then
link1="1"
else
ip route del default
ip route add default via $gateway_2
ip route flush cache
link1="0"
fi

if (ping -I $placa_rede_2 -c $numero_pacotes $endereco_ping > /dev/null)
then
link2="1"
else
ip route del default
ip route add default via $gateway_1
ip route flush cache
link2="0"
fi

sleep $tempo_espera

done
   Fonte: http://www.vivaolinux.com.br/artigo/Balanceamento-de-links-Load-balance-Failover-Failback