segunda-feira, 20 de outubro de 2025

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

Automação de manutenção: scripts que mantêm seu Zabbix saudável

Publicado por Sysadmin Urbano | Infraestrutura, SysOps e DevOps

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

Automação de manutenção: scripts que mantêm seu Zabbix saudável

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

Com o banco de dados particionado e os ajustes de desempenho feitos, o próximo passo é deixar tudo autônomo. Este capítulo reúne os principais scripts de manutenção que mantêm o Zabbix limpo, rápido e previsível — sem depender de ações manuais.

“Manter um Zabbix saudável é mais sobre rotina do que intervenção. Automatize o que é repetitivo, e o sistema fará o resto.”

1) Estrutura de diretórios e boas práticas

Crie um diretório dedicado para armazenar todos os scripts e logs de manutenção:

mkdir -p /opt/zbx_maintenance
mkdir -p /var/log/zbx_maintenance
chmod 750 /opt/zbx_maintenance
chmod 770 /var/log/zbx_maintenance

Manter tudo centralizado facilita auditoria, versionamento e integração com ferramentas de monitoramento externas.


2) Script de expurgo manual (por data)

Ideal para bancos ainda não particionados ou ambientes pequenos, o script abaixo remove dados antigos de acordo com uma data de corte definida.

#!/usr/bin/env bash
set -euo pipefail

MYSQL="mysql --defaults-extra-file=$HOME/.my.cnf --batch --raw"
DB="zabbix"
CUTOFF_DAYS=90
LOG="/var/log/zbx_maintenance/cleanup_$(date +%F).log"

echo "== Expurgo de dados antigos (history*) iniciado em $(date -Is) ==" | tee -a "$LOG"

for T in history history_uint history_str history_text history_log; do
  echo "Limpando tabela $T ..." | tee -a "$LOG"
  $MYSQL -e "DELETE FROM ${DB}.${T} WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL ${CUTOFF_DAYS} DAY));" \
    >> "$LOG" 2>&1 || echo "Erro em $T, continuando..." | tee -a "$LOG"
done

echo "== Expurgo concluído em $(date -Is) ==" | tee -a "$LOG"

3) Script de criação automática de partições

Este script complementa o particionamento do Capítulo 3 e garante que o banco sempre tenha a partição do dia seguinte e remova partições expiradas.

# /opt/zbx_maintenance/partitions.sh
#!/usr/bin/env bash
set -euo pipefail

DB="zabbix"
MYSQL="mysql --defaults-extra-file=$HOME/.my.cnf --batch --raw"
HISTORY_RETENTION_DAYS=90
TRENDS_RETENTION_DAYS=365
LOG="/var/log/zbx_maintenance/partitions_$(date +%F).log"

echo "== Manutenção de partições iniciada em $(date -Is) ==" | tee -a "$LOG"

# Criação da partição do dia seguinte
TOMORROW=$(date -u -d "tomorrow" +%F)
NEXT=$(date -u -d "$TOMORROW +1 day" +%F)

for T in history history_uint history_str history_text history_log; do
  echo "Verificando tabela $T..." | tee -a "$LOG"
  $MYSQL -e "ALTER TABLE ${DB}.${T}
             REORGANIZE PARTITION pMAX INTO (
               PARTITION p${TOMORROW//-/\_} VALUES LESS THAN (UNIX_TIMESTAMP('${NEXT}')),
               PARTITION pMAX VALUES LESS THAN (MAXVALUE)
             );" >> "$LOG" 2>&1 || echo "  - Partição já existe." | tee -a "$LOG"
done

echo "== Concluído em $(date -Is) ==" | tee -a "$LOG"

4) Script de auditoria de integridade

O script abaixo checa se as tabelas de histórico possuem a partição do dia atual, se o disco tem espaço livre suficiente e se o banco está acessível.

#!/usr/bin/env bash
set -euo pipefail

DB="zabbix"
MYSQL="mysql --defaults-extra-file=$HOME/.my.cnf --batch --raw"
LOG="/var/log/zbx_maintenance/audit_$(date +%F).log"

echo "== Auditoria de partições $(date -Is) ==" | tee -a "$LOG"

for T in history history_uint history_str history_text history_log; do
  echo -n "$T: " | tee -a "$LOG"
  $MYSQL -N -e "SELECT COUNT(*) FROM information_schema.PARTITIONS
                WHERE TABLE_SCHEMA='${DB}' AND TABLE_NAME='${T}'
                  AND PARTITION_NAME=CONCAT('p', REPLACE(CURDATE(), '-', '_'));" | tee -a "$LOG"
done

echo "== Verificando espaço em disco =="
df -h | grep -E 'Filesystem|mysql' | tee -a "$LOG"

echo "== Finalizado em $(date -Is) ==" | tee -a "$LOG"

5) Automatizando no cron

Com os scripts prontos, crie uma agenda diária de manutenção:

# /etc/cron.d/zbx_maintenance
# Executa às 01h10 (partições) e às 02h00 (auditoria)
10 1 * * * root /opt/zbx_maintenance/partitions.sh >> /var/log/zbx_maintenance/cron.log 2>&1
0  2 * * * root /opt/zbx_maintenance/audit.sh >> /var/log/zbx_maintenance/cron.log 2>&1

A auditoria noturna é útil para enviar resultados via e-mail ou mesmo para um item no próprio Zabbix via zabbix_sender.


6) Relatório de integridade via Zabbix Sender

Com o zabbix_sender, é possível enviar resultados dos scripts para o próprio Zabbix Server.

#!/usr/bin/env bash
STATUS=$(grep "Erro" /var/log/zbx_maintenance/audit_$(date +%F).log | wc -l)

if [ "$STATUS" -gt 0 ]; then
  zabbix_sender -z 127.0.0.1 -s "Zabbix Server" -k maintenance.audit -o 0
else
  zabbix_sender -z 127.0.0.1 -s "Zabbix Server" -k maintenance.audit -o 1
fi

Depois, crie um item Zabbix trapper com chave maintenance.audit e uma trigger para alertar caso o valor seja 0 (falha).


7) Boas práticas

  • Centralize todos os logs em /var/log/zbx_maintenance/.
  • Use nomes de partição previsíveis (pYYYY_MM_DD).
  • Evite cron jobs com overlap — cada script deve terminar antes do próximo.
  • Valide o espaço em disco e os backups antes de executar expurgos automáticos.
  • Documente os scripts e commits de alteração em repositório Git.

8) Conclusão

Com poucas linhas de bash, o Zabbix passa a cuidar de si mesmo. Essas automações previnem o crescimento descontrolado do banco e criam uma camada de previsibilidade — o que antes era manutenção emergencial vira rotina programada.


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