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: 6.600 ]

Por: Carolina Robles das Neves em 28/07/2015


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

Rsyslog - Configurando o Centralizador de Logs

Expandindo partição em LVM

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

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

Leitura recomendada

Xen - XL.cfg - Sintaxe da Configuração de Domínios - Parte II

Configuração do serviço NTP em servidor cliente

MultiHeads no Linux

Instalação Kickstart (revisado)

KDM no Slackware 11.0

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts