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.
Respostas:
Também encontrei esse problema. Aqui está como eu consegui consertar isso.
Nos clientes, modifique o arquivo / etc / hosts para que o nome do host desejado seja anterior ao localhost.
127.0.0.1 hostnameforlogs localhost
Nos clientes e no servidor, modifique /etc/rsyslog.conf para incluir esta instrução:
$ PreserveFQDN on
No servidor, usei a variável% HOSTNAME% para os modelos no rsyslog.conf:
fonte
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:
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:
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:
fonte
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%.fonte
%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.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/etc/hosts
se o FQDN do seu nó estiver configurado corretamente.Exemplo para sistemas CentOS / RHEL:
Certifique-se de reiniciar.
fonte
Você pode usar isso na configuração rsyslog do lado do cliente.
e substitua
{{HOSTNAME}}
pelo nome do host desejado ou você pode desmembrá-lo em cada cliente usando bigode automaticamente.fonte