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.366 ]

Por: Bill Carlos Cabral em 02/07/2012


Instalação do LogAnalyzer



Para visualizar estes logs de uma maneira mais didática, iremos utilizar o LogAnalyser.

O LogAnalyser é um front-end free para Syslog-Rsyslog de fácil compreensão e manuseio. É um aplicativo gratuito de fonte GLP aberto, que foi desenvolvido, em sua maioria, em PHP.

Sua integração com a fonte de dados tanto pode ser um banco quanto o próprio arquivo texto gerado pelo Rsyslog.

Para instalar o LogAnalyser você precisará ter instalado os seguintes módulos no servidor centralizado de logs, seja ele Windows ou GNU/Linux:
  • Apache ou IIS Webserver
  • PHP5

Para iniciar precisaremos baixar LogAnalyzer. Escolha a versão mais recente através do site:
Será baixado um arquivo do tipo ".tar.gz". Copie toda a pasta "src" e os arquivos configure.sh e secure.sh da pasta "contrib", que estavam dentro do diretório recém descompactado, para o diretório padrão do Apache ou do IIS.

Neste caso tomaremos como padrão o Apache no servidor GNU/Linux, logo o arquivo deverá ser descompactado no diretório /var/www/html.

Agora será necessário dar as permissões necessárias na pasta e nos arquivos contidos dentro dela. Defina o sinalizador de execução para eles:

# chmod + x configure.sh secure.sh

Execute:

# ./configure.sh

Que criará um config.php em branco, e também irá definir o acesso de escrita a todos a ele. Poderá fazer isso manualmente, se quiser, configurando a permissão 777 neste arquivo.

Para iniciar a instalação LogAnalyzer, abra o seguinte link no browser que estará apontado para o script de instalação:
  • http://localhost/install.php

O script de instalação irá solicitar configurações para a instalação do LogAnalyzer, basta seguir as instruções.

Iniciado a instalação do LogAnalyser, uma mensagem de boas-vindas será apresentada. Esta é a primeira página da instalação. Diz-lhe apenas, que antes de instalar, algumas diretivas de permissão de arquivos serão verificados.

Basta clicar em "Next" para iniciar o processo.
Verifique as permissões do arquivo. Aqui você vai ver, se o config.php pode ser escrito ou não. Se não pode ser escrito, você terá que aplicar as permissões necessárias manualmente (chmod 777 config.php) e clicar em "Next".
Algumas opções básicas deverão ser definidas aqui nesta tela:
  • Number of syslog messages per page = 50 (default)

    Este é o número de mensagens syslog indicadas em cada página. Você pode aumentar o valor ou diminuir o valor de acordo com a necessidade, vale lembrar que quanto maior o número, mais lento poderá ficar.

  • Message character limit for the main view = 80 (default)

    Defina o número de caracteres por mensagem, que será mostrado na última coluna da janela principal. Mensagens completas podem ser revistas ao passar o mouse sobre elas. Muitas pessoas preferem usar uma configuração de "0", para que toda a mensagem seja exibida.

  • Character display limit for all string type fields = 30 (default)

    Limite de caracteres para exibição. O default é pequeno, porém agiliza no tempo de retorno do sistema.

  • Show message details popup (default yes) = yes (default)

    Muitas pessoas acham que os pop-ups são intrusivos e preferem desativá-los. Use "no" neste caso.

  • Automatically resolved IP Adrress (inline) = yes (default)

    Resolve os IPs em nomes durante a visualização dos logs. Não é recomendado, pois poderá abaixar o rendimento da aplicação.

Na próxima tela teremos o passo mais importante, onde será configurada a fonte de dados, onde estão armazenados todos os dados do Rsyslog.

Primeiramente terá que ser escolhido um "Name of the Source" (Nome da Fonte) e um "Source Type" (Tipo de Origem).

O nome será escolhido por você e este será exibido no menu drop-down com no qual você escolherá a sua fonte de dados Rsyslog ativa.

O "Source Type" (Tipo de Fonte) pode ser um arquivo, um banco de dados MySQL ou o PHP PDO que suporta tipos de dados diferentes como MS SQL, PostgreSQL, ODBC, Oracle ou IBM DB2 mesmo.

Neste caso utilizaremos a última opção, onde será configurado o banco PostgreSQL 9.1.
  • Database Storage Engine = MySQL Server (default)

    Escolha o tipo do banco de dados você está usando. Estes bancos são suportados:
    • MySQL Server
    • Microsoft SQL Server
    • ODBC Conexão Banco de Dados
    • PostgreSQL
    • Oracle Call Interface
    • IBM DB2
    • Firebird / Interbase 6
    • IBM Informix Dynamic Server
    • SQLite 2

    E a configuração do banco:
    • Table Type = monitorware (default)

      Este é o layout da tabela. Atualmente, você pode usar "monitorware" ou "syslogng"

    • *Database Host = localhost (default)

      Este é o nome da maquina ou IP de onde o banco de dados está localizado. Por padrão é localhost. Você pode especificar qualquer outro host, de acordo com o seu cenário.

    • Database Name = loganalyzer (default)

      O nome do banco de dados que você configurou no banco.

    • Database Tablename = systemevents (default)

      Este é o nome da tabela em que os dados são armazenados. O tablename padrão corresponde às tabelas criadas com a Linha "Table Type".

    • Database User = user (default)

      O nome de usuário do banco de dados.

    • Database Password = não definido por padrão

      A senha do usuário.

    • Enable Row Counting = No (default)

      Se configurado para "Yes", a quantidade de linhas na tabela serão contados com cada consulta, mostrando os registros totais para a sua pesquisa. Poderá ter um grande impacto em seu sistema ao utilizar um banco de dados muito grande.

      Se configurado para "No", as linhas não serão contadas, proporcionando um desempenho melhor.

    Se tudo ocorreu bem, você deve ver mensagens do Rsyslog já após a sua instalação LogAnalyzer. Por segurança você pode remover o script install.php.
    Linux: Rsyslog - Gerenciamento centralizado de logs
    Conforme figura acima, os dados que já foram inseridos no banco de dados podem ser visualizados pelo browser através do endereço do IP, ou localmente através do localhost.

    Detalhando uma das mensagem acima, teremos a seguinte tela:
    Acima, temos os seguintes campos:
    • uiD - ID da mensagem conforme sua inserção no banco;
    • Date - data e hora do evento;
    • Host - nome da maquina onde o evento ocorreu;
    • Severity - tipo de prioridade da mensagem;
    • Syslogtag - tag que identifica qual o serviço que gerou o evento;
    • Checksum - tag utilizada quando o rsyslog é utilizado com SSL/TLS;
    • Message - conteúdo da mensagem com os dados do evento.
    • Messagetype
    • Facility

    Neste evento, podemos perceber alguns dados interessantes: por ser um evento do tipo DHCPACK (onde o servidor confirma a alocação do endereço IP ao cliente), o endereço MAC da máquina que recebeu o IP e o endereço IP que foi atribuído. Isto pode permitir uma rastreabilidade na rede.

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

Instalação do Asterisk no Debian Lenny

Montando um servidor WAP

hdparm: Tire o máximo do seu HD

Som sem problemas em notebooks com placa Intel

Configurando um servidor de backup Bacula

  
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