Rsyslog - Gerenciamento centralizado de logs

Este artigo traz uma abordagem simples e objetiva da integração através da rede de sistemas operacionais diferentes, centralizando o log em uma única máquina através do Rsyslog, incluindo a configuração e testes feitos.

[ Hits: 146.407 ]

Por: Bill Carlos Cabral em 02/07/2012


Configurações de arquivo e cliente



Configuração do arquivo /etc/rsyslog.conf

A customização para a coleta dos dados específicos são inseridas através de regras no rsyslog.conf. Por exemplo, para coletar os dados TCP da máquina, basta ativar os módulos de entrada.

Os módulos de entrada são utilizados para reunir mensagens de várias fontes. Eles interagem com os geradores de mensagens. Já os módulos do analisador são utilizados para analisar o conteúdo da mensagem, uma vez que a mensagem foi recebida.

Eles podem ser usados para processar formatos de mensagens personalizadas e invalidamente formatadas. Existem ainda os módulos de modificação de mensagens que são usados para alterar o conteúdo das mensagens que estão sendo processadas.

Eles podem ser implementados utilizando um módulo de saída ou da interface do módulo analisador. Do ponto de vista do núcleo Rsyslog, eles realmente são módulos de saída, ou parser, e é a sua implementação que os tornam especiais.

Atualmente existe apenas um conjunto limitado de tais módulos, mas os novos podem ser escritos com os métodos que o motor melhor lhe proporcione. Eles podem ser utilizados, por exemplo, a:
  • Anonimizar conteúdo da mensagem;
  • Adicionar conteúdo dinamicamente computada a mensagem (campos).

Módulos de modificação de mensagens geralmente são escritos para uma tarefa específica e, portanto, normalmente não são genéricos o suficiente para ser reutilizados.

No entanto, o código do módulo existente é provavelmente uma excelente base de partida para escrever um novo módulo, que pode ser escrito por terceiros também.

Abaixo segue o código do rsyslog.conf que será utilizado no servidor onde os logs serão centralizados:

#/etc/rsyslog.conf

$ModLoad  imuxsock.so
$ModLoad  imklog.so
$ModLoad  imtcp.so
$InputTCPServerRun  514
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$ModLoad ompgsql.so

*.* :ompgsql:127.0.0.1,syslog,postgres,postgres

*.info;mail.none;authpriv.none;cron.none    /var/log/messages
authpriv.*                                                /var/log/secure
mail.*                                                      /var/log/maillog
cron.*                                                      /var/log/cron
*.emerg                                                   *
uucp,news.crit                                          /var/log/ spooler
local7.*                                                    /var/log/boot.log

Nesse arquivo, cada linha tem a seguinte função:
  • $MoadLoad imuxsock.so : Fornece a capacidade para aceitar mensagens de syslog via sockets locais Unix. Mais importante, este é o mecanismo pelo qual o syslog envia mensagens syslog rsyslogd. Então, você precisa ter este módulo carregado para ler o socket de log do sistema e ser capaz de processar as mensagens de log de aplicativos em execução no sistema local.
  • $MoadLoad imklog.so : Lê mensagens de log do kernel e as envia para o motor de syslog.
  • $MoadLoad imtcp.so : Habilita a conexão TCP. Necessário para possibilitar que hosts remotos se conectem para centralizar os logs.
  • $InputTCPServerRun 514 : Declara a porta pelo qual o servidor irá escutar os rsyslogs remotos.
  • $ActionFileDefaultTemplate RSYSLOG_FileFormat : Define um novo modelo padrão para ações de arquivo. É um formato de arquivo de log de estilo moderno semelhante ao TraditionalFileFormat, mas com alta precisão timestamps e informações de fuso horário.
  • $ModLoad ompgsql.so : Carrega o módulo responsável pela conexão com o banco de dados PostgreSQL.
  • *.* :ompgsql:127.0.0.1,syslog,postgres,postgres : String de conexão com o banco de dados.

Os demais dados do arquivo são as informações sobre o que selecionar no log e sua localização.

É possível que sejam customizadas essas entradas de acordo com a necessidade.

Instalação e configuração do cliente

Para que haja comunicação entre o servidor onde será centralizado os logs e os clientes que fornecerão estes logs, é necessário que seja instalado o cliente do Rsyslog nestas máquinas, além do servidor centralizado e configurá-lo para receber estas conexões.

Tanto para o GNU/Linux quanto para o Windows, faremos a configuração dos seus clientes. Iniciando pelo GNU/Linux.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação e configuração
   3. Configurações de arquivo e cliente
   4. Instalação dos clientes
   5. Instalação do LogAnalyzer
   6. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Autenticando clientes Linux em servidor NIS FreeBSD de forma segura

Instalado Fedora-DS e integrando com Samba

Autenticação de cliente 802.1x WPA utilizando EAP-TTLS FreeRADIUS + Samba + LDAP

Permissão de Execução de Arquivo (Script ou Binário) no GNU/Linux - Elementos Básicos para Compreensão

Conexão com chaves assimétricas sem uso de senha em servidor sshd

  
Comentários
[1] Comentário enviado por danniel-lara em 02/07/2012 - 11:05h

Parabéns pelo artigo
heheh eu estava escrevendo um artigo sobre isso também
mas o seu ficou melhor , hehehe
bom vou testar com o client em Windows
eu nunca tinha usado ,
Valeu mesmo , isso é muito importante de implantar em uma empresa



[2] Comentário enviado por BillCabral em 02/07/2012 - 14:48h

Obrigado danniel-lara!!

Sim, é importantíssimo num ambiente corporativo, porque facilitará
o gerenciamento.

Caso possa ajudar em algo, estou a disposição.

[3] Comentário enviado por danniel-lara em 02/07/2012 - 15:34h

Tranquilo BillCabral
o seu artigo esta muito bem explicado
e muito bem escrito , muito legível também
mas caso eu precise que peso ajuda sim

Abraço

[4] Comentário enviado por thyaguvinny em 05/07/2012 - 10:51h

A intenção foi boa! Mas está faltando vários passos no artigo! Seguindo simplesmente este tutorial é impossível de fazer tudo funcionar certinho... lamento.

[5] Comentário enviado por BillCabral em 05/07/2012 - 11:05h

thyaguvinny,

Este caso foi de sucesso e esta rodando até hoje. Caso esteja faltando passos, comente aqui para que o pessoal que implementar adicione os passos que faltam.
Qual distro você esta usando?

[6] Comentário enviado por pmello em 09/07/2012 - 14:15h

Parabéns,
Muito bem explicado, pontos bem definidos, muito utilizavel.

[7] Comentário enviado por irgn em 07/07/2013 - 14:15h

Parabéns pelo artigo bem fundamentado!
Estou aqui com um problema com a criação da tabela SystemEvents, smp qdo vou criar a tabela da-me esse erro:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'without time zone NULL,
DeviceReportedTime timestamp without time zone N' at line 5

Agradecia a vossa ajuda.



[8] Comentário enviado por billcabral em 08/07/2013 - 09:20h


[7] Comentário enviado por irgn em 07/07/2013 - 14:15h:

Parabéns pelo artigo bem fundamentado!
Estou aqui com um problema com a criação da tabela SystemEvents, smp qdo vou criar a tabela da-me esse erro:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'without time zone NULL,
DeviceReportedTime timestamp without time zone N' at line 5

Agradecia a vossa ajuda.





Cara,

Pode ser que no momento de selecionar o banco de dados não esteja selecionando o certo. Esta usando que banco? o erro diz que esta tentando se conectar com um MYSQL. Todo esse tutorial, além de tudo que eu tento fazer, sempre uso PostgreSQL, pois ele é mais "profissional" do que o MYSQL. Verifique qual banco esta usando e qual esta setando na hora de configurar

[9] Comentário enviado por xpaolo em 11/09/2013 - 16:44h

Parabéns pelo artigo!

Estou utilizando o rsyslog em um servidor de testes, e ele não possui aplicação nenhuma em produção.

Porém ele fica inserindo logs de maneira intermitente, nunca para.. ele gera logs de si mesmo.. (mais de 100 registros por segundo).

Exemplo:

Sep 11 16:49:39 srvteste postgres[1469]: [15328557-1] 2013-09-11 16:49:39 BRT [1469]: [15328555-l] user=sysloguser,db=syslog LOG: statement: insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (' [15268645-1] 2013-09-11 16:48:14 BRT [1469]: [15268643-l] user=sysloguser,db=syslog LOG: statement: begin', 16, 'srvteste', 6, '2013-09-11 16:48:14', '2013-09-11 16:48:14', 1, 'postgres[1469]:')
Sep 11 16:49:39 srvteste postgres[1469]: [15328558-1] 2013-09-11 16:49:39 BRT [1469]: [15328556-l] user=sysloguser,db=syslog LOG: duration: 0.260 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328559-1] 2013-09-11 16:49:39 BRT [1469]: [15328557-l] user=sysloguser,db=syslog LOG: statement: commit;
Sep 11 16:49:39 srvteste postgres[1469]: [15328560-1] 2013-09-11 16:49:39 BRT [1469]: [15328558-l] user=sysloguser,db=syslog LOG: duration: 7.006 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328561-1] 2013-09-11 16:49:39 BRT [1469]: [15328559-l] user=sysloguser,db=syslog LOG: statement: begin
Sep 11 16:49:39 srvteste postgres[1469]: [15328562-1] 2013-09-11 16:49:39 BRT [1469]: [15328560-l] user=sysloguser,db=syslog LOG: duration: 0.051 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328563-1] 2013-09-11 16:49:39 BRT [1469]: [15328561-l] user=sysloguser,db=syslog LOG: statement: insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (' [15268646-1] 2013-09-11 16:48:14 BRT [1469]: [15268644-l] user=sysloguser,db=syslog LOG: duration: 0.203 ms', 16, 'srvteste', 6, '2013-09-11 16:48:14', '2013-09-11 16:48:14', 1, 'postgres[1469]:')
Sep 11 16:49:39 srvteste postgres[1469]: [15328564-1] 2013-09-11 16:49:39 BRT [1469]: [15328562-l] user=sysloguser,db=syslog LOG: duration: 0.443 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328565-1] 2013-09-11 16:49:39 BRT [1469]: [15328563-l] user=sysloguser,db=syslog LOG: statement: commit;
Sep 11 16:49:39 srvteste postgres[1469]: [15328566-1] 2013-09-11 16:49:39 BRT [1469]: [15328564-l] user=sysloguser,db=syslog LOG: duration: 6.991 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328567-1] 2013-09-11 16:49:39 BRT [1469]: [15328565-l] user=sysloguser,db=syslog LOG: statement: begin
Sep 11 16:49:39 srvteste postgres[1469]: [15328568-1] 2013-09-11 16:49:39 BRT [1469]: [15328566-l] user=sysloguser,db=syslog LOG: duration: 0.049 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328569-1] 2013-09-11 16:49:39 BRT [1469]: [15328567-l] user=sysloguser,db=syslog LOG: statement: insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (' [15268647-1] 2013-09-11 16:48:14 BRT [1469]: [15268645-l] user=sysloguser,db=syslog LOG: statement: insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('' [15208740-1] 2013-09-11 16:46:49 BRT [1469]: [15208738-l] user=sysloguser,db=syslog LOG: duration: 3.792 ms'', 16, ''srvteste'', 6, ''2013-09-11 16:46:49'', ''2013-09-11 16:46:49'', 1, ''postgres[1469]:'')', 16, 'srvteste', 6, '2013-09-11 16:48:14', '2013-09-11 16:48:14', 1, 'postgres[1469]:')
Sep 11 16:49:39 srvteste postgres[1469]: [15328570-1] 2013-09-11 16:49:39 BRT [1469]: [15328568-l] user=sysloguser,db=syslog LOG: duration: 0.279 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328571-1] 2013-09-11 16:49:39 BRT [1469]: [15328569-l] user=sysloguser,db=syslog LOG: statement: commit;
Sep 11 16:49:39 srvteste postgres[1469]: [15328572-1] 2013-09-11 16:49:39 BRT [1469]: [15328570-l] user=sysloguser,db=syslog LOG: duration: 7.455 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328573-1] 2013-09-11 16:49:39 BRT [1469]: [15328571-l] user=sysloguser,db=syslog LOG: statement: begin
Sep 11 16:49:39 srvteste postgres[1469]: [15328574-1] 2013-09-11 16:49:39 BRT [1469]: [15328572-l] user=sysloguser,db=syslog LOG: duration: 0.051 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328735-1] 2013-09-11 16:49:39 BRT [1469]: [15328733-l] user=sysloguser,db=syslog LOG: statement: begin
Sep 11 16:49:39 srvteste postgres[1469]: [15328736-1] 2013-09-11 16:49:39 BRT [1469]: [15328734-l] user=sysloguser,db=syslog LOG: duration: 0.073 ms
Sep 11 16:49:39 srvteste postgres[1469]: [15328737-1] 2013-09-11 16:49:39 BRT [1469]: [15328735-l] user=sysloguser,db=syslog LOG: statement: insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (' [15268835-1] 2013-09-11 16:48:14 BRT [1469]: [15268833-l] user=sysloguser,db=syslog LOG: statement: commit;', 16, 'srvteste', 6, '2013-09-11 16:48:14', '2013-09-11 16:48:14', 1, 'postgres[1469]:')
Sep 11 16:49:39 srvteste postgres[1469]: [15328738-1] 2013-09-11 16:49:39 BRT [1469]: [15328736-l] user=sysloguser,db=syslog LOG: duration: 0.267 ms


Estou gravando em PostgreSQL 9.3

Isso é normal ? Ou é uma questão de configuração ?

Desde já agradeço a ajuda !

[10] Comentário enviado por xpaolo em 12/09/2013 - 08:55h

O problema ocorre porque o rsyslog e o postgresql estão rodando no mesmo servidor. Instalei em servidores separados não tive mais problemas!

[11] Comentário enviado por wagnerfs em 26/09/2014 - 09:48h

Muito bom o artigo. Obrigado por compartilhar o conhecimento.

[12] Comentário enviado por leojaco25 em 17/08/2016 - 14:57h

Boa tarde.

E como eu configuro um servidor Free BSD para enviar os log para um CentOS? Estou conseguindo enviar os dados de servidores linux e windows, porém não consigo dos free bsd. Minha conf do syslog está assim:


# $FreeBSD: release/9.2.0/etc/syslog.conf 238473 2012-07-15 10:55:43Z brueffer $
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
ftp.info /var/log/xferlog
cron.* /var/log/cron
*.=debug /var/log/debug.log
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
# touch /var/log/console.log and chmod it to mode 600 before it will work
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
*.* @xxx.xxx.x.xxx
!ppp
*.* /var/log/ppp.log
!*
!roundcube
*.* /var/log/roundcube.log


Alguém tem alguma ideia? Onde eu libero a porta para envio dos logs?

Grato,
Leandro.

[13] Comentário enviado por BillCabral em 19/08/2016 - 14:03h


[12] Comentário enviado por leojaco25 em 17/08/2016 - 14:57h

Boa tarde.

E como eu configuro um servidor Free BSD para enviar os log para um CentOS? Estou conseguindo enviar os dados de servidores linux e windows, porém não consigo dos free bsd. Minha conf do syslog está assim:


# $FreeBSD: release/9.2.0/etc/syslog.conf 238473 2012-07-15 10:55:43Z brueffer $
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
ftp.info /var/log/xferlog
cron.* /var/log/cron
*.=debug /var/log/debug.log
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
# touch /var/log/console.log and chmod it to mode 600 before it will work
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
*.* @xxx.xxx.x.xxx
!ppp
*.* /var/log/ppp.log
!*
!roundcube
*.* /var/log/roundcube.log


Alguém tem alguma ideia? Onde eu libero a porta para envio dos logs?

Grato,
Leandro.


Boa tarde leojaco25

poderia postar o log do SYSLOG do FreeBSD, uma vez que outros conseguem enviar para ele e ele esta recebendo, o problema será de fato no envio deste host. Post aqui o log e te ajudaremos a subir esse serviço ou caso ja tenha resolvido, post também para consultas futuras!

Valew!!!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts