Zabbix – Backup e Monitoramento – MySQL, Frontend e Files

0 Flares Twitter 0 Facebook 0 Google+ 0 LinkedIn 0 0 Flares ×
Zabbix – Backup e Monitoramento – MySQL, Frontend e Files
5 (100%) 4 votos

zabbix-topo

Olá a todos, dando continuidade a nossa série de artigos sobre Zabbix, neste artigo demonstrarei de forma objetiva como ter uma rotina de backup do banco MySQL, Frontend, arquivos importantes de configuração e sistema do nosso Zabbix Server, além de fazer o Zabbix monitorar os status dos backups feitos como nome do ultimo backup, tamanho do ultimo backup, hora e status do ultimo backup com trigger caso ocorra alguma falha nos mesmos, esta é uma alternativa aos que não usam softwares de backup como o Bacula e etc e querem faze-lo com um simples script, ressalto que testei em pequenos ambientes e bancos de dados moderados, então usem com moderação e sua conta em risco, espero que gostem e mão na massa.

Ambiente usado neste laboratório:

Ubuntu Server 14.04 LTS, Zabbix Server 3.0.2

Requisitos para este exercício:

Conhecimento básico em linux, editor de texto vim, vi ou nano, básico em UserParameters, shell e Cron.

Download:

Arquivos usados neste post, Template, UserParameter e Scripts:

Baixar: Zabbix-Backup-Arquivos.zip (413 downloads)

Estrutura dos diretórios, arquivos de configuração e userparameters do Agent Linux neste exemplo:

Diretório zabbix_agentd.conf: /etc/zabbix/

Diretório UserParameters: /etc/zabbix/UserParameters/

Diretório Scripts: /etc/zabbix/Scripts/

Parâmetro usado no zabbix_agentd.conf, informando o diretório que irá conter meus UserParameters:

Include=/etc/zabbix/UserParameters/

Atenção: Peço que fiquem atentos aos diretórios usados neste exemplo, pois podem variar de acordo com a sua instalação, então muita atenção nos caminhos informados nos arquivos de configuração e UserParameters utilizados neste exercício, caso você costuma utilizar UserParameters dentro do zabbix_agentd.conf realize os ajustes de acordo com o seu ambiente.

1º Passo:  Primeiramente iremos trabalhar com 2 scripts, o 1º que faz backup do banco de dados MySQL, compacta e guarda os ultimos 7 dias, e o 2º que faz backup de arquivos importantes do sistema, .confs do zabbiz personalizado e tudo mais o que você quizer acrescentar a tarefa, compacta e guarda os ultimos 7 dias, tudo isso é personalizável nos scripts e devem ajustar de acordo com o ambiente de vocês, então muita cautela com o que for adicionar,  adicionei comentários a cada passo.

Crie os diretórios para guardar os backups, neste exemplo usei os diretório abaixo, então use o diretório de sua preferência, não esqueça de alterar o caminho nos scripts.

mkdir /var/backup/zabbix/mysql
mkdir /var/backup/zabbix/frontend

2º Passo: Com os diretórios criados, vamos aos scripts, os mesmos estão disponíveis para download no inicio do post juntamente com template e userparameters, altere o conteúdo de acordo com o seu ambiente.

Script backup.zabbix.mysql.sh

# Variáveis
BACKUPDIR="/var/backup/zabbix/mysql"
DATA=`date +%d%m%Y_%H:%M:%S`
LOG="/var/log/backup.zabbix.mysql.log"
LOGERRO=".backup.err"
USER="usuario mysql"
PASSWORD="senha mysql"
DATABASE="nome do banco"
IP="127.0.0.1"
HOSTNAME="HOSTNAME DO ZABBIX SERVER"
ITEMKEY="backup.zabbix.mysql.status"
ITEMKEYERRO="backup.zabbix.mysql.status.erro"
SUCESSO="OK"
ERROPASSO1="erro.criacao.arquivo"
ERROPASSO2="erro.compactacao"
ERROPASSO3="erro.rotacao"

# Verificando existência do diretório
if [ -e $BACKUPDIR ]
   then
   echo "Diretorio ja existe"
else
   mkdir $BACKUPDIR
   echo "Diretorio criado com sucesso"
   echo "Diretorio criado com sucesso: $DATA" >> $LOG
   continue
fi

# PASSO 01 - Iniciando Backup Dump MySQL
echo "Iniciando Backup: $DATA" >> $LOG
mysqldump -u"$USER" --password="$PASSWORD" --single-transaction --routines $DATABASE > $BACKUPDIR/$DATABASE.$DATA.sql 2> $BACKUPDIR/$LOGERRO

if [ "$?" -eq 0 ]; then
   echo "Backup criado com sucesso"
   echo "Backup criado com sucesso: $DATA" >> $LOG
else
   zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO1
   echo "Erro encontrado na criacao do arquivo.sql PASSO 01"
   echo "Erro encontrado na criacao do arquivo.sql PASSO 01: $DATA" >> $LOG
   exit 0
fi

# PASSO 02 - Compacta Backup
echo "Compactando Backup: $DATA" >> $LOG
bzip2 $BACKUPDIR/$DATABASE.$DATA.sql 2> /dev/null
if [ "$?" -eq 0 ]; then
   echo "Backup compactado com sucesso"
   echo "Backup compactado com sucesso: $DATA" >> $LOG
else
   zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO2
   echo "Erro na compactacao do backup PASSO 02"
   echo "Erro na compactacao do backup PASSO 02: $DATA" >> $LOG
   exit 0
fi

# PASSO 03 - Remove Backups mais antigos 7 dias
echo "Removendo Backups Antigos: $DATA" >> $LOG
ls -td1 $BACKUPDIR/* | sed -e '1,7d' | xargs -d '\n' rm -rif
numero=`ls $BACKUPDIR | wc -w`
if [ $numero -eq 7 ]; then
    echo "Backup Local rotacionado com sucesso, Total 07"
    echo "Backup Local rotacionado com sucesso, Total 07: $DATA" >> $LOG
else
    zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO3
    echo "Erro na rotacao do backup PASSO 03"
    echo "Erro na rotacao do backup PASSO 03: $DATA" >> $LOG
    exit 0
fi

# PASSO 04 - Zabbix Sender Final - Apenas se o backup for realizado com sucesso
zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEY -o $SUCESSO
echo "Backup finalizado com sucesso:"
echo "Backup finalizado com sucesso: $DATA" >> $LOG

Script backup.zabbix.frontend.sh

# Variáveis
BACKUPDIR="/var/backup/zabbix/frontend"
DATA=`date +%d%m%Y`
DATALOG=`date +%d%m%Y_%H:%M:%S`
TEMP="Files"
NOME="frontend"
LOG="/var/log/backup.zabbix.frontend.log"
IP="127.0.0.1"
HOSTNAME="HOSTNAME DO ZABBIX SERVER"
ITEMKEY="backup.zabbix.frontend.status"
ITEMKEYERRO="backup.zabbix.frontend.status.erro"
SUCESSO="OK"
ERROPASSO1="erro.criacao.subdiretorios"
ERROPASSO2="erro.indefinido"
ERROPASSO3="erro.compactacao"
ERROPASSO4="erro.rotacao"

# Verificando existência do diretório principal
if [ -e $BACKUPDIR ]
   then
   echo "Diretorio principal ja existe"
else
   mkdir $BACKUPDIR
   echo "Diretorio principal criado com sucesso"
   echo "Diretorio principal criado com sucesso: $DATALOG" >> $LOG
   continue
fi
 
# PASSO 01 - Cria sub-diretório no diretório principal
echo "Criando sub-diretorios: $DATALOG" >> $LOG
mkdir -p $BACKUPDIR/$TEMP
mkdir -p $BACKUPDIR/$TEMP/zabbix
mkdir -p $BACKUPDIR/$TEMP/mysql
mkdir -p $BACKUPDIR/$TEMP/cron
mkdir -p $BACKUPDIR/$TEMP/apache2
mkdir -p $BACKUPDIR/$TEMP/frontend
mkdir -p $BACKUPDIR/$TEMP/php5
mkdir -p $BACKUPDIR/$TEMP/phpmyadmin
mkdir -p $BACKUPDIR/$TEMP/odbc
numero=`ls $BACKUPDIR/$TEMP | wc -w`
if [ $numero -eq 8 ]; then
    echo "Sub-diretorios criados com sucesso, Total 08"
    echo "Sub-diretorios criados com sucesso, Total 08: $DATALOG" >> $LOG
else
    zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO1
    echo "Erro na criacao dos sub-diretorios PASSO 01"
    echo "Erro na criacao dos sub-diretorios PASSO 01: $DATALOG" >> $LOG
    exit 0
fi
 
# PASSO 02 - Copia arquivos do frontend e arquivos importantes de configuração
echo "Copiando Arquivos: $DATALOG" >> $LOG
cp -R /etc/zabbix/* $BACKUPDIR/$TEMP/zabbix
cp /etc/mysql/my.cnf $BACKUPDIR/$TEMP/mysql
cp /etc/zabbix/.my.cnf $BACKUPDIR/$TEMP/mysql/my.old.cnf
cp /etc/crontab $BACKUPDIR/$TEMP/cron
cp -R /etc/apache2/* $BACKUPDIR/$TEMP/apache2
cp -R /usr/share/monitoramento/* $BACKUPDIR/$TEMP/frontend
cp /etc/php5/apache2/php.ini $BACKUPDIR/$TEMP/php5
cp /etc/phpmyadmin/apache.conf $BACKUPDIR/$TEMP/phpmyadmin
cp /etc/phpmyadmin/config-db.php $BACKUPDIR/$TEMP/phpmyadmin
cp /etc/odbc.ini $BACKUPDIR/$TEMP/odbc
cp /etc/odbcinst.ini $BACKUPDIR/$TEMP/odbc

# PASSO 03 - Compactando o Backup, copiando e removendo diretório temporário
echo "Compactando Backup: $DATALOG" >> $LOG
cd $BACKUPDIR/$TEMP
tar czf $NOME.$DATA.tar.gz *
if [ -e $BACKUPDIR/$TEMP/$NOME.$DATA.tar.gz ]; then
   echo "Backup compactado com sucesso"
   echo "Backup compactado com sucesso: $DATALOG" >> $LOG
else
   zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO3
   echo "Erro na compactacao do backup PASSO 03"
   echo "Erro na compactacao do backup PASSO 03: $DATALOG" >> $LOG
   exit 0
fi
cp $NOME.$DATA.tar.gz /$BACKUPDIR
cd $BACKUPDIR
rm -r $BACKUPDIR/$TEMP

# PASSO 04 - Remove Backups mais antigos 7 dias
echo "Removendo Backups Antigos: $DATA" >> $LOG
ls -td1 $BACKUPDIR/* | sed -e '1,7d' | xargs -d '\n' rm -rif
numero=`ls $BACKUPDIR | wc -w`
if [ $numero -eq 7 ]; then
    echo "Backup Local rotacionado com sucesso, Total 07"
    echo "Backup Local rotacionado com sucesso, Total 07: $DATA" >> $LOG
else
    zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEYERRO -o $ERROPASSO4
    echo "Erro na rotacao do backup PASSO 04"
    echo "Erro na rotacao do backup PASSO 04: $DATA" >> $LOG
    exit 0
fi

# PASSO 05 - Zabbix Sender Final - Apenas se o backup for realizado com sucesso
zabbix_sender -z $IP -s "$HOSTNAME" -k $ITEMKEY -o $SUCESSO
echo "Backup finalizado com sucesso:"
echo "Backup finalizado com sucesso: $DATALOG" >> $LOG

3º Passo – Agora que temos os scripts, vamos adicioná-los ao Cron para que executem no horário que queremos, neste exemplo o script frontend é executado todos os dias as 00:10hs e o script mysql é executado todos os dias as 00:20hs, ajuste de acordo com sua necessidade.

vim /etc/crontab

 Adicione as linhas abaixo, altere de acordo com o horário que desejar.

# Backup Zabbix - Todos os dias depois das 00:00hs
10 00 * * * root sh /etc/zabbix/Scripts/backup.zabbix.frontend.sh
20 00 * * * root sh /etc/zabbix/Scripts/backup.zabbix.mysql.sh

Na imagem abaixo, vemos o resultado os scripts e seus respectivos backups rotacionados nos ultimos 7 dias.

0047
Lista de Backups Frontend – Retenção 7 últimos dias.
0048
Lista de Backups MySQL – Retenção 7 últimos dias.

4º Passo – Com nossos backups automatizados, agora vamos fazer com que o zabbix monitore os mesmos, exibindo nome do ultimo backup gerado, tamanho e status.

Abaixo os UserParameters que utilizaremos para esta tarefa.

backup.zabbix.conf

UserParameter=backup.zabbix.mysql.nome,ls -lt /var/backup/zabbix/mysql | grep "dbzabbix" | awk 'NR==1 {print;exit}' | awk '{print $9}'
UserParameter=backup.zabbix.mysql.tamanho,ls -lt /var/backup/zabbix/mysql | grep "dbzabbix" | awk 'NR==1 {print;exit}' | awk '{print $5}'
UserParameter=backup.zabbix.frontend.nome,ls -lt /var/backup/zabbix/frontend | grep "frontend" | awk 'NR==1 {print;exit}' | awk '{print $9}'
UserParameter=backup.zabbix.frontend.tamanho,ls -lt /var/backup/zabbix/frontend | grep "frontend" | awk 'NR==1 {print;exit}' | awk '{print $5}'

5º Passo – Reinicie o Agent.

 /etc/init.d/zabbix-agent restart

6º Passo – Por fim importe o template disponível para download no inicio do artigo e aguarde a coleta dos dados.

Dados coletados
0050
Gráfcos

É isso pessoal, espero que tenham gostado, deixem seus comentários em caso de dúvida ou sugestão, se gostou curte e compartilha, muitos artigos virão em breve, muito obrigado.

163,376 total views, 207 views today

0 Flares Twitter 0 Facebook 0 Google+ 0 LinkedIn 0 0 Flares ×

13 thoughts on “Zabbix – Backup e Monitoramento – MySQL, Frontend e Files

  1. Pessoal,
    Desculpe a ignorância Diego, mas como posso ver a tela acima com os dois Backups sendo monitorados ao mesmo tempo na tela …
    Agradeço e parabéns pelo post.
    Abraços

  2. Diego, desculpe a demora em responder… Então fiz os testes no Debian 8.4, e não precisei fazer ajustes no script. Funcionou 100%.

    Obrigado!

  3. Diego, consegui baixar os arquivos normalmente. Obrigado e parabéns pelo excelente post.

    Obrigado também por responder tão rápido!

  4. Diego, poderia verificar os arquivos para download? Ao baixar não é possível descompactar.

    Obrigado.

Comments are closed.