Script de backup Graylog

Publicado por Leandro Rubert Jacomini (última atualização em 10/10/2017)

[ Hits: 5.125 ]

Homepage: Não tenho

Download 6704.backup_graylog.sh




Primeiro artigo escrito.

Espero que, para todos aqueles que estejam enfrentando a mesma dificuldade que eu, possam utilizar este script, adaptando-o para sua realidade. Eis um script para realizar o backup diário da base do Graylog.

Em nosso ambiente temos um volume muito alto de logs, e, mesmo não colocando todos os servidores para envia-los para o graylog, nosso volume é muito alto. Por esta razão, resolvemos separar a extração dos logs por intervalos críticos, de modo que o tempo de extração dos dados seja menor. Porém, para resolver esta questão e deixar um arquivo único, basta alterar a sessão "extrai()", retirando as linhas adicionais, e trocando o horário de extração para o período necessário ( "timestamp" : { "gte": "'`echo $DATADUMP`' 00:00:00.000", "lte": "'`echo $DATADUMP`' 09:59:59.999" ).

O arquivo "/etc/scripts/variaveis_graylog.cfg" contém variáveis usadas no script. Deve-se criá-lo de acordo com o ambiente de cada um, ou criar uma sessão no próprio script com esta finalidade (eu prefiro criar o arquivo ".cfg" pois posso utilizá-lo para outros scripts, editando-o de acordo com minha necessidade). Por esta razão, não coloquei o fonte deste arquivo, pois este é pessoal para cada ambiente.

Caso tenham alguma dúvida, ou sugestão, com relação ao script, favor entrar em contato comigo. Também sintam-se à vontade para editá-lo conforme a necessidade, porém gostaria apenas de que mantivessem a autoria do script, e incluissem abaixo as alterações efetuadas, no mesmo formato que o cabeçalho. Assim fica mais fácil de visualizar as alterações efetuadas.

Att.:
Leandro.

  



Esconder código-fonte

#!/bin/bash
#-------------------------------------------------------------------------------
# Data ..: 14/03/2017
# Autor .: Leandro Rubert Jacomini
# Funcao : Realizar o backup diario dos logs do elasticsearch e mongodb
#-------------------------------------------------------------------------------
# Extraindo base de dados
#-------------------------------------------------------------------------------
. /etc/scripts/variaveis_graylog.cfg  # Variaveis usadas no script. Caso prefiram utilizar uma sessao para isso, basta inclui-la no corpo do script.
extrai(){
echo "+---------------------------------------+
| Extraindo Dados `date +%F" "%T`   |
+---------------------------------------+" >>$LOG

"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 00:00:00.000", "lte": "'`echo $DATADUMP`' 09:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-00-10.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 10:00:00.000", "lte": "'`echo $DATADUMP`' 11:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-10-12.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 12:00:00.000", "lte": "'`echo $DATADUMP`' 13:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-12-14.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 14:00:00.000", "lte": "'`echo $DATADUMP`' 15:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-14-16.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 16:00:00.000", "lte": "'`echo $DATADUMP`' 17:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-16-18.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 18:00:00.000", "lte": "'`echo $DATADUMP`' 20:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-18-21.DUMP.gz" &
sleep 1
"$ELASTICDUMP" --input=http://localhost:9200/"`echo $INDICE`" --output=$ --type=data --searchBody='{ "query": { "range": { "timestamp" : { "gte": "'`echo $DATADUMP`' 21:00:00.000", "lte": "'`echo $DATADUMP`' 23:59:59.999" }}}}' |$GZIP >> $BACKUPDIR"/"$DATADUMP"/"$ARQBKP"-21-24.DUMP.gz" &
while true
do
    ps -wef |grep elasticdump |grep -v grep > /dev/null
    st1=$?
    if [ $st1 == 0 ]
    then
        sleep 60
        continue
    else
        break
    fi
done
echo "Finalizando processo de extracao `date +%T`" >>$LOG
}
#-------------------------------------------------------------------------------
# Funcao verifica datas
#-------------------------------------------------------------------------------
ver_datas(){
    DATA=$(date +%F)
    DIA=$(date +%d)
    MES=$(date +%m)
    ANO=$(date +%Y)
    if [ "$DIA" == "01" ]
    then
        case $MES in
            "05"|"07"|"10"|"12" )
               DIA="30"
               MES=`expr $MES - 1 |awk '{printf("%02d\n", $1);}'`
               ANO="$ANO"
            ;;
            "02"|"04"|"06"|"09"|"11"|"08" )
               DIA="31"
               MES=`expr $MES - 1 |awk '{printf("%02d\n", $1);}'`
               ANO="$ANO"
            ;;
            "01" )
               DIA="31"
               MES="12"
               ANO=`expr $ANO - 1 |awk '{printf("%04d\n", $1);}'`
            ;;
            "03" )
               DIA="28"
               MES=`expr $mes - 1 |awk '{printf("%02d\n", $1);}'`
               ANO="$ANO"
            ;;
        esac
    else
        ANO="$ANO"
        MES=`echo $MES |awk '{printf("%02d\n", $1);}'`
        DIA=`expr $DIA - 1 |awk '{printf("%02d\n", $1);}'`
    fi
    DATADUMP="$ANO-$MES-$DIA"
}
#-------------------------------------------------------------------------------
# Inicio do processo de extracao
#-------------------------------------------------------------------------------
# Declaracao de variaveis
#-------------------------------------------------------------------------------
INDICE=`curl -XGET  -u $USER:$PASSWORD 'http://<Informe seu IP>:12900/system/deflector' |cut -d":" -f2|cut -d"\"" -f2`
LOG="/var/log/backup_graylog.log"
DIADEL="7"
#-------------------------------------------------------------------------------
echo "================================================================================
Iniciando processo de backup em `date +%F" "%T`
================================================================================" >> $LOG
curl -XPOST  -u $USER:$PASSWORD 'http://<Informe seu IP>:12900/system/deflector/cycle' ### Rotacionando indice
ver_datas
ARQBKP="BACKUP_LOGSERVER_"$DATADUMP

echo "
Extrator ........: $ELASTICDUMP
Compactador .....: $GZIP
Basedir .........: $BASEDIR
Backupdir .......: $BACKUPDIR
Tmpdir ..........: $TMPDIR
Indice ..........: $INDICE
Data Hoje .......: $DATA
Data Dump .......: $DATADUMP
Arquivo Backup ..: $ARQBKP
------------------------------------------" >> $LOG
$MKDIR $BACKUPDIR"/"$DATADUMP
extrai
echo "================================================================================
Para recarregar a base, informar:
elasticdump --input=<path>/<arquivo> --output=http://localhost:9200/<indice>  --type=data
================================================================================
Finalizando processo de backup em `date +%F" "%T`
============================================================" >> $LOG

Scripts recomendados

sync_local - backup/restauração local

Backup da pasta de usuário em sistemas GNU/Linux sem copiar os arquivos ocultos

Backup dinâmico de banco de dados MySQL

Backup de diretórios do sistema Linux

OpenVZ - vzbackup


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts