Script de backup Graylog
Publicado por Leandro Rubert Jacomini (última atualização em 10/10/2017)
[ Hits: 5.620 ]
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.
#!/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
Configuração de backup com rsync sem senha
Backup Database MySQL Automatizado
Backup utilizando rsync com envio do log e informativo via e-mail
Ferramenta de backup do HD para dispositivos externos
DriveTool.sh: um script para cópia rápida e segura de arquivos para unidades flash USB
Nenhum comentário foi encontrado.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
O widget do Plasma 6 Área de Notificação
[Resolvido] Algo deu errado ao abrir seu perfil
Quando vocês pararam de testar distros? (14)
Problema com som no laptop (3)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









