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

Por: Bill Carlos Cabral em 02/07/2012


Instalação e configuração



Instalação do Rsyslog

Esta instalação será dirigida à distribuição CentOS 6.0, via YUM.

Antes de instalar o Rsyslog, deverá ser verificado se há o serviço syslog. Caso haja, o syslog deverá ser desinstalado para que o Rsyslog seja instalado.

Para instalar o Rsyslog:

# yum install rsyslog

Com o serviço do Rsyslog instalado, agora será necessário configurar para iniciar a utilização.

Configuração do servidor

Rsyslog é configurado através do arquivo rsyslog.conf, normalmente encontrado em /etc.

Mas, antes de inciar a configuração do arquivo rsyslog.conf, que será direcionada a um banco de dados, será necessário que haja um banco de dados instalado e ativo, para que seja criado o banco e suas tabelas default.

O script de criação do banco de dados original, que vem no pacote durante a instalação, está disponível no arquivo /usr/share/doc/rsyslog-versão/createDB.sql:

CREATE DATABASE 'Syslog' WITH ENCODING 'SQL_ASCII';

\c Syslog;

CREATE TABLE SystemEvents

(

      ID serial not null primary key,

      CustomerID bigint,

      ReceivedAt timestamp without time zone NULL,

      DeviceReportedTime timestamp without time zone NULL,

      Facility smallint NULL,

      Priority smallint NULL,

      FromHost varchar(60) NULL,

      Message text,

      NTSeverity int NULL,

      Importance int NULL,

      EventSource varchar(60),

      EventUser varchar(60) NULL,

      EventCategory int NULL,

      EventID int NULL,

      EventBinaryData text NULL,

      MaxAvailable int NULL,

      CurrUsage int NULL,

      MinUsage int NULL,

      MaxUsage int NULL,

      InfoUnitID int NULL ,

      SysLogTag varchar(60),

      EventLogType varchar(60),

      GenericFileName VarChar(60),

      SystemID int NULL

);


CREATE TABLE SystemEventsProperties

(       ID serial not null primary key,

      SystemEventID int NULL ,

      ParamName varchar(255) NULL ,

      ParamValue text NULL

);

Este arquivo está na linguagem SQL padrão, logo, é compatível com qualquer banco que trabalhe com essa linguagem.

* Um ponto importante a ressaltar é quanto a codificação do banco utilizado pelo Rsyslog, que é por padrão SQL_ASCIII.

Por padrão, de instalação do PostgreSQL, caso não seja setado uma codificação padrão, a "LATIN1" é considerada default por conter todos os caracteres das línguas européias (o português está incluso nesse grupo), mas a maioria dos bancos utilizam "UTF-8", pela interoperabilidade dos símbolos (podendo conter caracteres de todas línguas).

Ao tentar criar um banco na codificação "SQL_ASCII" numa instalação que já possui um padrão de codificação diferente dessa, apresentará erros.

Para sanar este erro, basta que crie o banco "SYSLOG" (conforme arquivo de criação do banco createDB.sql) em outra template que não a principal (onde foi criado o banco postgres).

Na instalação, por default, são criados mais duas templates: a "template0" e a "template1". Crie o banco em uma delas.

A modificação sugerida para o PostgreSQL 9.1 segue abaixo:

CREATE DATABASE 'Syslog' WITH ENCODING 'SQL_ASCII' TEMPLATE=template0;

\c Syslog;

CREATE TABLE SystemEvents

(

      ID serial not null primary key,

      CustomerID bigint,

      ReceivedAt timestamp without time zone NULL,

      DeviceReportedTime timestamp without time zone NULL,

      Facility smallint NULL,

      Priority smallint NULL,

      FromHost varchar(60) NULL,

      Message text,

      NTSeverity int NULL,

      Importance int NULL,

      EventSource varchar(60),

      EventUser varchar(60) NULL,

      EventCategory int NULL,

      EventID int NULL,

      EventBinaryData text NULL,

      MaxAvailable int NULL,

      CurrUsage int NULL,

      MinUsage int NULL,

      MaxUsage int NULL,

      InfoUnitID int NULL ,

      SysLogTag varchar(60),

      EventLogType varchar(60),

      GenericFileName VarChar(60),

      SystemID int NULL

);


CREATE TABLE SystemEventsProperties

(

      ID serial not null primary key,

      SystemEventID int NULL ,

      ParamName varchar(255) NULL ,

      ParamValue text NULL

);

Após criar o banco e as tabelas, algumas configurações deverão ser feitas no arquivo rsyslog.conf. Inicialmente iremos habilitar o suporte a banco de dados.

Suporte de banco de dados em Rsyslog é integrado por módulos (plugin) carregáveis. Para usar a funcionalidade de banco de dados, o plugin do banco de dados deve ser habilitado no arquivo de configuração antes que a primeira tabela do banco de dados seja usada.

Isto é feito através da configuração da diretiva abaixo, no inicio do arquivo de configuração:

$ModLoad ompgsql

Neste caso estaremos habilitando o suporte ao banco de dados PostgreSQL, escolhido como padrão. Vários bancos de dados são suportados. A lista e as especificações estão disponíveis no site:
Em seguida nós precisamos dizer ao Rsyslogd para gravar dados no banco de dados. Como usamos o esquema padrão, não precisamos definir um modelo para isso.

Podemos usar a hardcoded (rsyslogd lida com o modelo adequado de um link). Então, tudo o que precisamos fazer, por exemplo, para o PostgreSQL, é adicionar uma linha simples seletor para /etc/rsyslog.conf:

*.* :ompgsql:database-server,database-name,database-userid,database-password

Onde:
  • database-server : É o nome ou o endereço IP do servidor;
  • database-name : É o nome do banco onde as tabelas foram criadas;
  • database-userid : É o nome do usuário que tem acesso ao banco;
  • database-password : É é a senha do usuário.

Com estas configurações feitas, basta iniciar o serviço do Rsyslog e verificar a entrada de dados na tabela do banco de dados.

Toda esta entrada de dados pode ser configurada de acordo com a necessidade e do ambiente em questão. Neste caso, os logs serão originados de dois sistemas operacionais distintos, sendo um Windows Server 2003 e um GNU/Linux Red Hat 5.5 Enterprise Edition.

Os principais logs do GNU/Linux serão enviados ao servidor centralizado, como o /var/log/messages, e outros específicos como do DHCP, Squid e Apache.

No Windows serão enviados os logs do "System Events Reports".

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

Como instalar o driver da placa de vídeo SiS 771/671 no Ubuntu 18.04

Shared Config com Apache a la brasileira

Pós-instalação do Sabayon LXDE

Habilitando e configurando Raid 1 (espelhamento) no Slackware 12

Virtualização - Montando uma rede virtual para testes e estudos de serviços e servidores

  
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