Personalizando o servidor centralizador de logs com rotate, script e crontab

Esse artigo é um complemento da instalação e configuração do servidor Rsyslog e client, o mesmo tem a finalidade de personalizar seu centralizador de logs, facilitando a leitura e automatizando seu ambiente.

[ Hits: 10.131 ]

Por: Carolina Robles das Neves em 28/07/2015 | Blog: https://www.linkedin.com/in/carolina-robles-das-neves-933289100/


Introdução



No artigo anterior, expliquei como configurar um servidor centralizado de logs Rsyslog e o cliente:
Nesse novo artigo, vamos tratar os logs que recebemos, rotacionar para facilitar a leitura dos logs em nosso dia a dia.

Personalizando e tratando os logs - Rsyslog

Observação: todas as configurações foram efetuadas com o usuário root.

Ao adicionar o servidor/equipamento do syslog, por padrão o mesmo vai para o arquivo messages localizado em /var/log/messages, sendo assim fica muito mais difícil de visualizar dependendo da quantidade de servidores/equipamentos que você tem centralizado.

Para isso criei um script muito simples: teste-syslog.sh.

Antes de criar o arquivo, vamos criar o diretório para aonde vai encaminhar os logs (estou criando os diretórios de acordo com o hostname do servidor ou equipamento):

# mkdir /var/log/server-abobora

Obs.: crie em algum diretório que seja diferenciado do /boot.

Após, vamos verificar qual é a palavra (hostname/IP address) que vamos filtrar para nosso script que está no arquivo messages:

# tail -f /var/log/messages
Jul 20 11:05:01 server-abobora systemd: Starting Session 6957 of user otrs.
Jul 20 11:05:01 server-abobora systemd: Started Session 6957 of user otrs.
Jul 20 11:05:01 server-abobora systemd: Starting Session 6958 of user otrs.


Irei filtrar os logs do servidor "abobora" pelo hostname apresentado no log acima: server-abobora.

Vamos criar o nosso script e personalizá-lo:

Obs.: o script deve ser configurado de acordo com as suas necessidades, irei criar um script simples, mas funcional. Explore Shell Script, você pode automatizar todo o seu ambiente dessa forma.

# vim teste-syslog.sh

#!/bin/bash

echo "Executando filtro"
sleep 3

############################################
## SCRIP PARA DE FILTRO DE LOGS - RSYSLOG ##
############################################

cat /var/log/messages | grep server-abobora >> /var/log/server-abobora/Logs

echo "Script Concluído"
sleep 3

No script acima, na linha 3, estou executando o comando echo, para mostrar a mensagem na tela "Executando filtro" e na linha 4, o comando "sleep 3" para aguardar 3 segundos na tela.

As linhas 6, 7 e 8 são somente comentários para você saber o que está acontecendo no script.

Obs.: é recomentado comentar todas as ações de seu script para facilitar o troubleshooting caso dê algum erro, ou outro analista precise entender o que o script está executando.

Na linha 10, estamos dando um cat no arquivo messages para ler todas as informações do servidor server-abobora e enviar para o arquivo Logs (caso não tenha o arquivo, ele irá criar).

Obs.: como eu utilizei o ">>" após o grep e o servidor, irá adicionar as informações no final do arquivo, caso utiliza-se o ">" iria sobrescrever todas as informações do arquivo. Fique atento. Pode ser utilizado vários parâmetros em seu Shell Script para deixá-lo cada vez melhor.

Exemplo, se usarmos o parâmetro "-w", significa que estamos fazendo o grep (filtro) pela palavra especifica server-abobora:

cat /var/log/messages | grep -w server-abobora >> /var/log/server-abobora/Logs

Vamos adicionar esse script na crontab do GNU/Linux para automatizar nossa rotina, sendo assim, não iremos precisar executar o script manualmente.

Abra o arquivo do crontab com seu editor de texto favorito, (irei utilizar o Vim):

# vim /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

#########################################################
############ Rodar Script do filtro de LOGS do rsyslog ##########
#########################################################

00 06,09,12,15,18,21,23 * * * root /root/teste-syslog.sh

Salve e saia do arquivo. Comando do editor Vim: aperte a tecla Esc e depois digite: :wq!

No próprio arquivo da crontab vem o exemplo de como utilizar. São 7 campos para serem preenchidos. São eles:
  • Minuto - determina a quantos minutos, dentro de uma hora, o comando será executado. Os valores aceitos vão de 0 a 59.
  • Hora - determina a que horas o comando será executado e sua especificação segue o padrão 24 horas. Portanto, aceita valores entre 0 e 23 (sendo que 0 é meia-noite).
  • Dia do mês - determina o dia do mês em que o comando será executado. Se quiser que a tarefa seja executada no dia 10 do mês, use o valor 10.
  • Mês - determina o mês em que o comando será executado. Aceita tanto valores numéricos referentes aos meses do ano, como alfabéticos, exemplo: August.
  • Dia da semana - aceita tanto valores numéricos de 0 a 7, como caracteres: sun, mon, tue, wed, thu, fri e sat, que correspondem, respectivamente a domingo, segunda, terça, quarta, quinta, sexta e sábado.
  • Usuário - determina o usuário do sistema que irá executar o comando.
  • Comando - determina o comando a ser executado.

Em nosso cenário, na linha 20, estamos dizendo o seguinte:

Execute todos os dias de todos os meses de toda semana com o usuário root o script que está no caminho /root/teste-syslog.sh nos horários: 06h00, 09h00, 12h00, 15h00,18h00, 21h00 e às 23h00 horas.

00 06,09,12,15,18,21,23 * * * root /root/teste-syslog.sh

Explicação:
  • Vírgula (,) - especifica uma lista de valores. Exemplo: "1,3,4,7,8".
  • Hífen (-) - especifica um intervalo de valores. Exemplo: 1-15 (de 1 a 15).
  • Asterisco (*) - especifica todos os valores possíveis.
  • Barra (/) - especifica "pulos" de valores, por exemplo: se no campo hora utilizamos "*/4" o comando será executado às 0, 4, 8, 12, 16 e às 20.

Para efeito de teste, rode o seu script manualmente:

# ./root/teste-syslog.sh
Executando filtro
Script Concluído


Acesse o caminho abaixo e verifique se não apresentou nenhuma mensagem de erro:

Dica: para ir até o final do arquivo, aperte a tecla Shift + G.

# cat /var/spool/mail/root
From root@rsyslog.domínio.com.br  Mon Jul 20 13:33:13 2015
Return-Path: < root@rsyslog.domínio.com.br >
X-Original-To: root
Delivered-To: root@rsyslog.domínio.com.br
Received: by rsyslog.domínio.com.br (Postfix, from userid 0)
        id 37B2E40EC74F; Mon, 20 Jul 2015 13:33:11 -0300 (BRT)
From: "(Cron Daemon)" < root@rsyslog.domínio.com.br >
To: root@rsyslog.domínio.com.br
Subject: Cron /root/teste-script.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id: <20150720163312.37B2E40EC74F@rsyslog.domínio.com.br >
Date: Mon, 20 Jul 2015 13:33:05 -0300 (BRT)

Executando filtro
Script Concluído


Em nosso cenário o script rodou com sucesso e não apresentou nenhum erro.

Vamos personalizar nosso rotate para o log do servidor abobora, para não encher o nosso centralizador de logs:

Por padrão, os arquivos, cron, maillog, messages, secure e spooler já estão configurados, basta adicionar o caminho onde está o log do seu servidor:

# vim /etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/server-abobora/Logs

{
   sharedscripts
   postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
   endscript
}

Salve e feche o arquivo.

Após, vamos personalizar o arquivo logrotate.conf:

# vim /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file - Use data como sufixo de arquivos da rotação
dateext

# uncomment this if you want your log files compressed
compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 5M
    rotate 5
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 5
}

  • Na linha 3, estamos dizendo: gire arquivos de log semanal.
  • Na linha 5, estamos dizendo: mantenha 4 semanas de backlogs.
  • Na linha 8, estamos dizendo: crie um novo arquivo de log vazio depois de rodar os antigos.
  • Na linha 14, estamos dizendo: comprima os arquivos de log.

Nas linhas abaixo de 20, vamos deixar o default.
As mesmas estão dizendo o seguinte:

Nenhum pacote próprio wtmp e btmp - vamos rodá-los aqui.

O que são os pacotes wtmp e btmp

Em sistemas operacionais Linux/UNIX, tudo é registrado em algum lugar. A maioria dos registros do sistema está conectado ao /var/log. Este diretório contém registros relacionados a diferentes serviços e aplicações. Temos alguns arquivos, como utmp, wtmp e btmp. Esses arquivos contém todos os detalhes sobre o login e logout que são locais, bem como dos sistemas remotos e status do sistema, tais como tempo de atividade etc.

Obs.: personalize seu rotate conforme a sua necessidade.

Finalizamos por aqui! Espero ter ajudado.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Configurando hostname, rotas, gateway e IP em Red Hat 6

Criação de usuário, grupo e permissão

Memórias Database Oracle (SGA x PGA) - Entenda a diferença e como calcular a HugePages

Expandindo partição em LVM

Rsyslog - Configurando o Centralizador de Logs

Leitura recomendada

CUPS - Gerenciador de impressões

Debian Squeeze com RAID 1

Instalação e configuração do Bacula com interface web (Bweb/Brestore)

Como transformar o seu LXDE/LXQT em Chrome OS

OpenVZ: Virtualização para servidores Linux

  
Comentários
[1] Comentário enviado por rbonfim em 28/07/2015 - 09:14h

Carolina ótimo artigo! Foi uma mão na roda, parabéns!

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[2] Comentário enviado por hellnux em 28/07/2015 - 17:44h

Belo artigo!

Deixo apenas uma contribuição.
Em vez de:
cat /var/log/messages | grep server-abobora >> /var/log/server-abobora/Logs
Use:
grep server-abobora /var/log/messages >> /var/log/server-abobora/Logs

Eliminando o uso do cat a execução será mais rápida.

[3] Comentário enviado por carolinaneves22 em 29/07/2015 - 08:48h


[1] Comentário enviado por rbonfim em 28/07/2015 - 09:14h

Carolina ótimo artigo! Foi uma mão na roda, parabéns!

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"


Obrigada pela feedback!

[4] Comentário enviado por carolinaneves22 em 29/07/2015 - 08:50h


[2] Comentário enviado por hellnux em 28/07/2015 - 17:44h

Belo artigo!

Deixo apenas uma contribuição.
Em vez de:
cat /var/log/messages | grep server-abobora &gt;&gt; /var/log/server-abobora/Logs
Use:
grep server-abobora /var/log/messages &gt;&gt; /var/log/server-abobora/Logs

Eliminando o uso do cat a execução será mais rápida.


Olá,

Obrigada pela dica.. Após inserir o artigo que fui tratar um pouco mais o script "simples", já modifiquei o mesmo.. =)
Obrigada pela feedback!

[5] Comentário enviado por Lisandro em 29/07/2015 - 13:13h

Bom artigo! Continue a contribuir.

[6] Comentário enviado por carolinaneves22 em 29/07/2015 - 16:25h


[5] Comentário enviado por Lisandro em 29/07/2015 - 13:13h

Bom artigo! Continue a contribuir.


Obrigada pelo feedback!

[7] Comentário enviado por wagnerfs em 29/07/2015 - 21:42h

Parabéns pelo artigo e obrigado por compartilhar o conhecimento.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782

[8] Comentário enviado por thewolf em 30/07/2015 - 09:37h

Ótimo artigo.

[9] Comentário enviado por alexroll em 31/07/2015 - 15:22h


Parabéns, realmente fica muito mais fácil administrar quando se é organizado, ótima contribuição!

[10] Comentário enviado por M4iir1c10 em 04/08/2015 - 04:43h

Muito bem, gostei dos dois artigos. Ja esta como favorito.

Obrigado pela contribuição e que sejam as primeiras de muitas.

Meu contato? anote ai :)
51.562532 -0.109389
51° 33' 45.1152'' N, 0° 6' 33.8004'' W

[11] Comentário enviado por Zirou em 12/08/2015 - 18:34h

ötimo artigo parabéns.

[12] Comentário enviado por paulinhorm em 12/07/2017 - 16:37h

Tanto esse artigo como o anterior foram muito bem explicados..... me ajudaram a entender e colocar em prática um servidor de logs no servidor......parabens.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts