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.
Gostou deste conteúdo?
Siga o Sysadmin Urbano para mais artigos técnicos sobre Infraestrutura, SysOps e DevOps.

Nenhum comentário:
Postar um comentário