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.