Como faço para o rsyslogd registrar o FQDN de um servidor em vez de seu nome de host abreviado?


22

Estou tentando implementar um servidor syslog centralizado simples usando o estoque rsyslogd (4.2.0-2ubuntu8.1) no Ubuntu 10.04 LTS. Neste ponto, todos os meus nós clientes enviam logs para o servidor central, mas os clientes estão enviando mensagens de log que contêm seu nome de host abreviado, em vez de seu FQDN.

De acordo com a página de manual do rsyslogd do Ubuntu:

Se o host remoto estiver localizado no mesmo domínio que o host, o rsyslogd estará em execução, apenas o nome do host simples será registrado em vez do fqdn inteiro.

Isso é problemático para mim, pois estou reutilizando nomes abreviados entre ambientes, por exemplo, core1.example.com e core1.stg.example.com registram suas mensagens como core1.

O cliente e o servidor têm o mesmo / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4"

e o mesmo arquivo /etc/rsyslogd.conf:

$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf

Os clientes possuem este arquivo /etc/rsyslog.d/remote.conf, solicitando que eles enviem para o servidor remoto:

*.* @@syslog.example.com

e o servidor usa este arquivo /etc/rsyslog.d/server.conf:

$ModLoad imtcp
$InputTCPServerRun 514
$DirGroup root
$DirCreateMode 0755
$FileGroup root
$template PerHostAuth,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/auth.log"
$template PerHostCron,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/cron.log"
$template PerHostSyslog,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog"
$template PerHostDaemon,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/daemon.log"
$template PerHostKern,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/kern.log"
$template PerHostLpr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/lpr.log"
$template PerHostUser,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/user.log"
$template PerHostMail,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.log"
$template PerHostMailInfo,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.info"
$template PerHostMailWarn,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.warn"
$template PerHostMailErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.err"
$template PerHostNewsCrit,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.crit"
$template PerHostNewsErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.err"
$template PerHostNewsNotice,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.notice"
$template PerHostDebug,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/debug"
$template PerHostMessages,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages"
auth,authpriv.*         ?PerHostAuth
*.*;auth,authpriv.none  -?PerHostSyslog
cron.*                  ?PerHostCron
daemon.*                -?PerHostDaemon
kern.*                  -?PerHostKern
lpr.*                   -?PerHostLpr
mail.*                  -?PerHostMail
user.*                  -?PerHostUser
mail.info               -?PerHostMailInfo
mail.warn               ?PerHostMailWarn
mail.err                ?PerHostMailErr
news.crit               ?PerHostNewsCrit
news.err                ?PerHostNewsErr
news.notice             -?PerHostNewsNotice
*.=debug;\
   auth,authpriv.none;\
   news.none;mail.none   -?PerHostDebug
   *.=info;*.=notice;*.=warn;\
      auth,authpriv.none;\
      cron,daemon.none;\
      mail,news.none        -?PerHostMessages

Como o cliente e o servidor compartilham uma configuração que especifica "$ PreserveFQDN on", espero ver nomes de host do FQDN em mensagens syslog, mas a configuração parece não ter efeito. A maioria das outras configurações que encontrei para o rsyslog visam remover domínios dos FQDNs em vez de retê-los. Acho que a raiz do problema é que meus clientes não enviam o FQDN em primeiro lugar, mas não vejo como forçar esse comportamento.

Alguém pode comentar sobre o que eu posso estar perdendo? Eu imagino que não sou a única pessoa que precisa que os FQDNs sejam incluídos nas mensagens de log.


Posteriormente, construí e instalei o pacote rsyslog 4.6.4-2ubuntu4 no Ubuntu 11.04 no meu servidor e em um subconjunto dos nós dos meus clientes, mas não observei uma alteração nesse comportamento como resultado.
Cwjohnston #

Respostas:


38

Também encontrei esse problema. Aqui está como eu consegui consertar isso.

  1. Nos clientes, modifique o arquivo / etc / hosts para que o nome do host desejado seja anterior ao localhost.

    127.0.0.1 hostnameforlogs localhost

  2. Nos clientes e no servidor, modifique /etc/rsyslog.conf para incluir esta instrução:

    $ PreserveFQDN on

  3. No servidor, usei a variável% HOSTNAME% para os modelos no rsyslog.conf:


11
Este deve ser marcado como a resposta
ErJab

11
Marque o texto acima como resposta.
Greg Annandale

11
Após 4 anos, essa resposta ainda tem pernas. Obrigado por ajudar o Matt em uma festa de Natal.
21416 Joe

7

Para alterar o nome do host que o rsyslog envia, adicione a seguinte diretiva como a primeira linha no /etc/rsyslog.conf antes de qualquer módulo ser carregado:

$LocalHostName yourhostname

Como alternativa, para enviar o rsyslog com o nome de domínio totalmente qualificado (FQDN, como system1.example.com), em vez de simplesmente o nome do host (system1), use a diretiva:

$PreserveFQDN on

Isso raramente é necessário. Recomendamos o uso do nome do host (sem o nome do domínio), a menos que você tenha sistemas com nomes idênticos.

Uma maneira alternativa de configurá-lo (que permite enviar logs diferentes como nomes de host diferentes) é configurando um modelo personalizado:

$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate

4

Pode ser um bug. O suporte ao FQDN é ou era conhecido por ser instável , embora nenhum dos erros registrados do FQDN pareça se aplicar.

Como solução alternativa, se você não fizer retransmissão, use em %FROMHOST%vez de% HOSTNAME%.


11
Usar %FROMHOST%me fornece um FQDN, mas parece ser o resultado de uma pesquisa inversa no endereço IP do nó cliente. Como meus sistemas estão executando no AWS EC2, infelizmente, isso sempre produzirá um FQDN que não tem significado imediato para mim.
Cwjohnston #

0

Só posso falar com 7.6.x, mas $PreserveFQDNera tudo o que era necessário para que funcionasse. Você pode evitar ter que mexer /etc/hostsse o FQDN do seu nó estiver configurado corretamente.

Exemplo para sistemas CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

# To this
HOSTNAME=service-a-1.sn1.vpc3.example.com

Certifique-se de reiniciar.


0

Você pode usar isso na configuração rsyslog do lado do cliente.

$LocalHostName {{HOSTNAME}}

e substitua {{HOSTNAME}}pelo nome do host desejado ou você pode desmembrá-lo em cada cliente usando bigode automaticamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.