Como faço para que o rsyslogd registre o FQDN de um servidor em vez do nome abreviado do host?

19

Estou tentando implementar um servidor syslog centralizado simples usando o arquivo rsyslogd (4.2.0-2ubuntu8.1) no Ubuntu 10.04 LTS. Neste ponto, eu tenho todos os meus nós cliente enviando 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.

Por página do Ubuntu rsyslogd:

If the remote host is located in the same domain as the host, rsyslogd is running on, only the simple hostname will be logged instead of the whole fqdn.

Isso é problemático para mim, pois estou reutilizando nomes curtos 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 têm este arquivo /etc/rsyslog.d/remote.conf, dizendo-lhes para enviar para o servidor remoto:

*.* @@syslog.example.com

e o servidor usa esse 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 FQDN em mensagens syslog, mas a configuração parece não ter efeito. A maioria das outras configurações que encontrei para o rsyslog tem como objetivo remover domínios de 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 poderia estar perdendo? Eu imagino que não sou a única pessoa que precisa que os FQDNs sejam incluídos nas mensagens de log.

    
por cwjohnston 27.05.2011 / 20:42

5 respostas

36

Eu me deparei com esse problema também. Aqui está como eu pude consertar isso.

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

    127.0.0.1 hostnameforlogs localhost

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

    $ PreserveFQDN em

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

por 14.11.2012 / 01:16
5

Para alterar o hostname rsyslog sends, inclua a seguinte diretiva como a primeira linha em /etc/rsyslog.conf antes de carregar qualquer módulo:

$LocalHostName yourhostname

Como alternativa, para que o rsyslog envie 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 usar o 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) é definindo um modelo personalizado:

$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate
    
por 17.09.2015 / 18:18
0

Eu só posso falar com 7.6.x, mas $PreserveFQDN era tudo o que era necessário para que funcionasse. Você pode evitar ter que mexer com /etc/hosts se 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

Não se esqueça de reiniciar.

    
por 11.11.2015 / 17:04