O que é o Zabbix Proxy?
Zabbix proxy é uma espécie de agente remoto de monitoramento, onde pode-se monitorar ambientes remotos com diversos dispositivos, a vantagem disso é que se os dispositivos forem monitorados diretamente, pode ocasionar perda de dados, alertas falsos, lentidão e etc. Com isso, é comum que o Zabbix apresente gráficos incompletos, triggers acionadas erroneamente, entre outros problemas.
A partir da versão 1.6 o Zabbix disponibiliza o monitoramento por meio do proxy, onde apenas um Agente-Gerente envia as informações para o servidor Zabbix, conforme ilustração abaixo:
Agora que entendemos um pouco mais sobre o Zabbix Proxy, vamos a motivação deste artigo: O proxy pode ser executado em diversas distribuições Linux, mas ter um computador alocado somente para o Zabbix proxy é um recurso caro, desta forma fui atrás de opções mais baratas e descobri que ele pode ser executado no OpenWRT (https://openwrt.org/). O OpenWRT é uma distribuição Linux para dispositivos embarcados, ou seja, uma distribuição super enxuta, e suporta diversos dispositivos de baixo custo como roteadores Wifi (Dlink, Linksys, TP-link e etc).
Neste ponto começaram os meus desafios, como instalar e fazer isso funcionar. Depois de apanhar um monte consegui fazer tudo rodar em um dispositivo com 4Mb de memória flash (onde os dados são armazenados) e 32 Mb de memória RAM. Desta forma resolvi compartilhar o passo a passo.
Para este post utilizei o dispositivo Dlink DIR-320, a primeira coisa que fiz foi realizar a instalação padrão do OpenWRT que vem com diversos recursos (wifi, servidor web, dhcp e etc), porém como meu dispositivo dispões de somente 4Mb de memória flash, não houve espaço disponível instalar o Zabbix-Proxy e suas dependências, desta forma tive que personalizar minha própria imagem.
Agora vamos parar de lero, lero e vamos ao que interessa.
Criando a imagem personalizada para gravar no dispositivo.
O Howto original de como realizar este procedimento pode ser encontrado em http://wiki.openwrt.org/doc/howto/obtain.firmware.generate. Como serei bem específico neste post segue abaixo os passos que realizei.
A criação da imagem necessita ser realizada em uma outra maquina que não o nosso dispositivo Dlink. No meu caso a maquina está rodando um Ubuntu server.
Para este ambiente criei um diretório dentro do /root nomeado openwrt.
Download do gerador de imagem OpwnWRT
- Acesse o endereço http://backfire.openwrt.org/10.03.1/
- Clique na arquitetura do seu dispositivo. Caso não saiba qual é verifique através deste link http://wiki.openwrt.org/toh/start. No meu caso brcm47xx
- Realize o download do ImageBuilder (gerador de imagem) para o diretório criado anteriormente. Utilize i686 em sistemas 32 bits ou x86_64 para sistemas 64 bits
- Extraia o conteúdo do arquivo.
[sourcecode language="shell"]cd /root/openwrt/
wget http://backfire.openwrt.org/10.03.1/brcm47xx/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686.tar.bz2
tar –xvjf OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686.tar.bz2
cd OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686[/sourcecode]
Download do pacote do Zabbix-proxy
- Dentro do diretório /root/openwrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686 crie um diretório nomeado pkg
- Entre no diretório pkg e realize o download do pacote do Zabbix-proxy
[sourcecode language="shell"]
cd /root/openwrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686
mkdir pkg
wget http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages/zabbix-proxy_2.0.5-1_brcm47xx.ipk
[/sourcecode]
- Dentro deste mesmo diretório crie um arquivo nomeado Packages com o seguinte conteúdo. Ou faça o download deste arquivo aqui (Packages)
[sourcecode language="text"]
Package: zabbix-proxy
Version: 2.0.5-1
Depends: libc, libsqlite3
Source: feeds/packages/admin/zabbix
SourceFile: zabbix-2.0.5.tar.gz
SourceURL: @SF/zabbix
Section: admin
Maintainer: Mirko Vogt <mirko@openwrt.org>
Architecture: brcm47xx
Installed-Size: 222192
Filename: zabbix-proxy_2.0.5-1_brcm47xx.ipk
Size: 222216
MD5Sum: d6e25fdd0a4924f7038248b4b191f649
Description: Zabbix proxy
[/sourcecode]
Configurando o gerador de imagem para utilizar este diretório como repositório adicional de pacotes
- Dentro do diretório /root/openwrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686 edite o arquivo repositories.conf
- Adicione a linha src custom file:///root/opwndrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686/pkg
Visualizando os perfis de geração de imagem disponível
Execute o comando
[sourcecode language="shell"]make info[/sourcecode]
Os perfis disponíveis serão listados.
[sourcecode language="text"]
root@svux-0001:~/openwrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686# make infoCurrent Target: "brcm47xx"
Default Packages: base-files libc libgcc busybox dropbear mtd uci opkg udevtrigger hotplug2 dnsmasq iptables ppp ppp-mod-pppoe kmod-ipt-nathelper firewall wpad-mini kmod-switch kmod-diag nvram
Available Profiles:
Broadcom-b43:
Broadcom BCM43xx WiFi (default)
Packages: kmod-b43 kmod-b43legacy
Atheros:
Atheros WiFi
Packages: kmod-madwifi
Atheros-ath5k:
Atheros WiFi (atk5k)
Packages: kmod-ath5k
None:
No WiFi
Packages: -wpad-mini
WGT634U:
Netgear WGT634U
Packages: kmod-madwifi kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ocf kmod-crypto-ocf-ubsec-ssb
WL500GPv1:
ASUS WL-500g Premium v1 (Atheros WiFi)
Packages: kmod-madwifi kmod-usb-core kmod-usb-uhci kmod-usb2
WRT350Nv1:
Linksys WRT350Nv1
Packages: kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ssb-gige kmod-ocf-ubsec-ssb
WRTSL54GS:
Linksys WRTSL54GS
Packages: kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-storage kmod-scsi-core kmod-fs-ext3 e2fsprogs kmod-b43
[/sourcecode]
Para a nossa utilização escolhi o perfil None por ser o mais enxuto deixando espaço para o que interessa, o Zabbix-proxy.
Gerando a imagem
- Dentro do diretório /root/openwrt/OpenWrt-ImageBuilder-brcm47xx-for-Linux-i686 execute o comando make image PROFILE=None PACKAGES="libc libsqlite3 zabbix-proxy fping"
- Este processo demora alguns
Se tudo ocorreu como esperado será criado um diretório nomeado bin/brcm47xx/ e haverá dentro dele as imagens.
No meu caso utilizei a imagem openwrt-brcm47xx-squashfs.trx gerada para gravar em meu Dlink DIR-320.
Caso seu dispositivo já esteja com o OpenWRT, copie via SCP a imagem para o /tmp, acesse este diretório e execute o comando abaixo para gravar a imagem
[sourcecode language="shell"]
mtd -r write openwrt-brcm47xx-squashfs.trx Linux[/sourcecode]
Caso seu dispositivo não esteja com o OpenWRT, o procedimento de gravação de imagem no dispositivo não será abordado neste post pois depende do seu dispositivo. No meu caso o próprio menu web do dlink permite essa gravação. A gravação da imagem segue o mesmo padrão de gravação das imagens OpenWRT e DD-WRT e pode ser localizado em diversos fórum pela internet inclusive nos sites oficiais da OpenWrt e DD-DRT.
Basta realizar a gravação e pronto, o dispositivo já está com o OpenWRT + Zabbix-proxy.
Como a imagem que gravamos é bem enxuta não há configuração web do dispositivo mostrarei como realizar o acesso ao dispositivo, troca de senha padrão do ssh e configuração da interface de rede.
Após a gravação desta imagem e reboot do dispositivo, o mesmo terá configurado em sua interface de rede o ip 192.168.1.1, e não estará entregando IP via DHCP, desta forma configure um ip desta faixa na sua interface de rede, conforme imagem abaixo:
Acesse o dispositivo através de telnet, no meu caso utilizei o aplicativo Putty para isso.
Se tudo estiver correto a imagem abaixo será apresentada, caso não acesse verifique sua configuração de rede e conectividade até o dispositivo com o OpenWRT.
Digite o comando passwd para alterar a senha de root
Agora o dispositivo já pode ser acessado via SSH com o usuário root e a senha definida no passo anterior.
Alterando a configuração de rede
- Edite o arquivo /etc/config/network
- Localize a sessão LAN conforme a imagem abaixo:
- Edite a configuração com as informações da sua rede
- No meu caso ficou assim
- Onde meu IP é 192.168.0.30, roteador padrão 192.168.0.1 e dns 192.168.0.1
- Reinicie as configurações de rede com o comando /etc/init.d/network restart ou reinicie seu dispositivo com o comando reboot
Configuração do Zabbix proxy
Neste post faremos a configuração básica para funcionamento do Zabbix proxy em modo ativo. Modo este onde o Proxy efetua a comunicação com o Zabbix server, bem como com os hosts a serem verificados. Para outras opções de configuração consulte o manual do Zabbix.
Edite o arquivo de configuração do proxy em /etc/zabbix_proxy.conf e altere os seguintes parâmetros:
- Hostname: Nome do proxy (este nome deve ser único que o identificará no Zabbiz server e deve ser igual ao configurado no server)
[sourcecode language="shell"]Hostname=proxy_1[/sourcecode]
- Server: IP ou hostname do servidor zabbix
[sourcecode language="shell"]Server=monitoring.helviojunior.com.br[/sourcecode]
- LogFile: Caminho completo do arquivo de log
[sourcecode language="shell"]LogFile=/tmp/zabbix_proxy.log[/sourcecode]
- PidFile: Caminho completo do arquivo de controle
[sourcecode language="shell"]PidFile=/tmp/zabbix_proxy.pid[/sourcecode]
- DBName: Caminho completo do arquivo de base de dados
[sourcecode language="shell"]DBName=/tmp/zabbix_proxy.db[/sourcecode]
Correções gerais
- Copie os executáveis do fping para o diretório que o Zabbix utiliza
[sourcecode language="shell"]cp /usr/bin/fping* /usr/sbin/[/sourcecode]
- Altere as permissões de execução do fping
[sourcecode language="shell"]
chown root:zabbix /usr/sbin/fping
chmod 710 /usr/sbin/fping
chmod ug+s /usr/sbin/fping
[/sourcecode]
Finalizando configurações de permissão e inicialização
- Crie o usuário para o zabbix, inserindo a seguinte linha no /etc/passwd
[sourcecode language="shell"]zabbix:*:42223:42223:zabbix:/var:/bin/false[/sourcecode]
- Crie o grupo para o zabbix, inserindo a seguinte linha no /etc/group
[sourcecode language="shell"]zabbix:x:42223:[/sourcecode]
- Crie um arquivo nomeado /etc/init.d/zabbix_proxy com o seguinte conteúdo
[sourcecode language="shell"]
#!/bin/sh /etc/rc.common
# Copyright (C) 2013 helviojunior.com.br
START=50
BIN=/usr/sbin/zabbix_proxy
PID=/tmp/zabbix_proxy.pid
start() {
[ -x $BIN ] || exit 0
[ -x $PID ] || rm -rf $PID
$BIN
}
stop() {
killall zabbix_proxy
rm -f $PID
}
[/sourcecode]
- Habilite o Zabbix para iniciar no boot com o comando
[sourcecode language="shell"]/etc/init.d/zabbix_proxy enable[/sourcecode]
- Inicie o Zabbix proxy
[sourcecode language="shell"]/etc/init.d/zabbix_proxy start[/sourcecode]