Script de backup Graylog

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

[ Hits: 5.126 ]

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

Backup incremental com rsync

Backup com mysqldump

Backup incremental com montagem automática e e-mail

Backups automáticos de rádios Intelbras APC5

DriveTool.sh: um script para cópia rápida e segura de arquivos para unidades flash USB


  

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