quarta-feira, 22 de outubro de 2025

Zabbix — da Migração ao Fine-Tuning - capítulo 7

Zabbix Proxies: distribuindo carga e garantindo resiliência

Publicado por Sysadmin Urbano | Infraestrutura, SysOps e DevOps

Um guia prático para quem vive na linha de frente da operação de sistemas.

Zabbix Proxies: distribuindo carga e garantindo resiliência

Capítulo 7 da série “Zabbix — da Migração ao Fine-Tuning” no Sysadmin Urbano.

O Zabbix Proxy é um dos recursos mais poderosos — e subutilizados — do ecossistema. Ele permite descentralizar a coleta, reduzir carga no servidor principal e manter a monitoração funcionando mesmo em caso de falhas de rede.

“Sem proxies, o Zabbix é uma estação meteorológica de um único sensor. Com proxies, torna-se uma rede completa de satélites.”

1) Por que usar proxies

  • Reduz carga e conexões simultâneas no servidor principal.
  • Coleta local mesmo sem link ativo com o servidor.
  • Permite segmentar monitorações por regiões, clientes ou data centers.
  • Armazena dados temporariamente e sincroniza quando possível.

2) Instalando um Zabbix Proxy

O processo é simples e pode ser feito tanto com SQLite (para ambientes pequenos) quanto MySQL/MariaDB (para alta escala).

# Exemplo para Oracle Linux / RHEL / CentOS
dnf install zabbix-proxy-mysql mariadb-server

systemctl enable --now mariadb
mysql_secure_installation

# Criar banco e permissões
mysql -e "CREATE DATABASE zabbix_proxy CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
mysql -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'senha_proxy';"
mysql -e "GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

# Importar schema
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql -uzabbix -p zabbix_proxy

3) Configuração do Proxy

O arquivo de configuração principal é /etc/zabbix/zabbix_proxy.conf. Os parâmetros críticos incluem:

Server=192.168.10.100
Hostname=proxy_datacenter1
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=senha_proxy
ProxyLocalBuffer=24
ProxyOfflineBuffer=48
ConfigFrequency=3600
DataSenderFrequency=1
StartPollers=20

O parâmetro ProxyOfflineBuffer define quantas horas o proxy armazenará dados localmente caso o servidor principal fique indisponível.


4) Comunicação com o Zabbix Server

No servidor principal, cadastre o proxy em Administration → Proxies → Create Proxy. Defina o nome exatamente igual ao campo Hostname do arquivo de configuração.

Depois disso, os hosts poderão ser atribuídos a esse proxy, e o tráfego fluirá automaticamente.


5) Manutenção e expurgo do banco local

5.1) Verificando tamanho das tabelas

SELECT table_name,
       ROUND((data_length + index_length)/1024/1024, 2) AS tamanho_mb
FROM information_schema.tables
WHERE table_schema = 'zabbix_proxy'
ORDER BY tamanho_mb DESC
LIMIT 10;

Em proxies grandes, o banco local também cresce rapidamente. O mesmo processo de particionamento e expurgo pode ser aplicado aqui.


5.2) Script simples de limpeza

Para proxies menores (com SQLite), use a seguinte limpeza controlada por data:

#!/usr/bin/env bash
sqlite3 /var/lib/zabbix/zabbix_proxy.db \
"DELETE FROM history WHERE clock < strftime('%s','now','-7 day');
 VACUUM;"

Esse script remove dados mais antigos que 7 dias e compacta o banco.


5.3) Para bancos MySQL

#!/usr/bin/env bash
MYSQL="mysql --defaults-extra-file=$HOME/.my.cnf"
DB="zabbix_proxy"
DAYS=30
LOG="/var/log/zbx_proxy_cleanup_$(date +%F).log"

echo "== Limpando tabelas proxy ==" | tee -a "$LOG"
for T in history history_uint history_str history_text history_log; do
  echo "Tabela: $T" | tee -a "$LOG"
  $MYSQL -e "DELETE FROM ${DB}.${T} WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL ${DAYS} DAY));" >> "$LOG" 2>&1
done
echo "== Concluído ==" | tee -a "$LOG"

6) Sincronização e cache

O proxy armazena dados temporariamente em memória e no disco até que consiga reenviar ao servidor. Para verificar o status dessa comunicação:

zabbix_get -s proxy_datacenter1 -k "proxy.ping"
zabbix_get -s proxy_datacenter1 -k "proxy.history.lastsync"
zabbix_get -s proxy_datacenter1 -k "proxy.history.fromserver"

Esses dados ajudam a entender se há atraso de envio ou fila acumulada no buffer local.


7) Estratégias de distribuição

  • Use proxies por segmento de rede ou cliente.
  • Evite proxies genéricos para todo o ambiente.
  • Proxies com banco local em SSD têm desempenho muito superior.
  • Monitore a fila de sincronização com um item do tipo zabbix[proxy,queue].

8) Boas práticas

  • Mantenha versões de proxy e server sempre alinhadas.
  • Evite SQLite em ambientes de alta coleta (prefira MySQL/MariaDB).
  • Automatize a limpeza local como no capítulo 6.
  • Em ambientes críticos, configure dual proxies para redundância.
  • Verifique o espaço em disco com alertas no próprio Zabbix.

9) Conclusão

Os proxies são o elo entre performance e resiliência no Zabbix. Eles distribuem o peso, reduzem a latência e garantem que nenhum dado se perca, mesmo sob falhas de rede. Com uma configuração bem planejada e manutenção automatizada, o ambiente cresce sem sustos — e com confiança.


Sobre o Sysadmin Urbano

O Sysadmin Urbano nasceu da vivência real no front das operações de infraestrutura moderna. Aqui falamos de servidores, containers, automação, boas práticas e também dos desafios invisíveis da rotina de quem mantém sistemas vivos. Sem fórmulas mágicas, sem tutoriais pela metade — apenas conteúdo prático, direto e feito para quem sabe que a TI é tanto técnica quanto sobrevivência.

🔗 Confira mais artigos ou volte para a página inicial.

Gostou deste conteúdo?

Siga o Sysadmin Urbano para mais artigos técnicos sobre Infraestrutura, SysOps e DevOps.

Voltar para a página inicial

Nenhum comentário:

Postar um comentário