Come posso ottenere rsyslogd per registrare il nome FQDN di un server anziché il suo nome host breve?


22

Sto cercando di implementare un semplice server syslog centralizzato usando stock rsyslogd (4.2.0-2ubuntu8.1) su Ubuntu 10.04 LTS. A questo punto ho tutti i miei nodi client che inviano registri al server centrale, ma i client inviano messaggi di registro che contengono il loro nome host breve anziché il loro nome di dominio completo.

Per la manpage di Ubuntu rsyslogd:

Se l'host remoto si trova nello stesso dominio dell'host su cui è in esecuzione rsyslogd, verrà registrato solo il nome host semplice anziché l'intero fqdn.

Questo è problematico per me, poiché sto riutilizzando nomi brevi tra ambienti, ad esempio core1.example.com e core1.stg.example.com, entrambi registro i loro messaggi come core1.

Sia il client che il server hanno lo stesso / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4"

e lo stesso file /etc/rsyslogd.conf:

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

I client hanno questo file /etc/rsyslog.d/remote.conf, che dice loro di inviare al server remoto:

*.* @@syslog.example.com

e il server utilizza questo file /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

Poiché sia ​​il client che il server condividono una configurazione che specifica "$ PreserveFQDN su", mi aspetto di vedere i nomi host FQDN nei messaggi syslog, ma l'impostazione sembra non aver avuto alcun effetto. La maggior parte delle altre impostazioni che ho trovato per rsyslog hanno lo scopo di rimuovere i domini dagli FQDN invece di conservarli. Penso che la radice del problema sia che i miei clienti non inviano l'FQDN in primo luogo, ma non vedo come forzare quel comportamento.

Qualcuno può commentare ciò che potrei perdere? Immagino di non essere l'unica persona che ha bisogno di un nome di dominio completo da includere nei messaggi di registro.


Successivamente ho creato e installato il pacchetto rsyslog 4.6.4-2ubuntu4 da Ubuntu 11.04 sul mio server e un sottoinsieme dei miei nodi client, ma di conseguenza non ho osservato un cambiamento in questo comportamento.
cwjohnston,

Risposte:


38

Ho riscontrato anche questo problema. Ecco come sono stato in grado di risolverlo.

  1. Sui client modificare il file / etc / hosts in modo che il nome host desiderato venga prima di localhost.

    127.0.0.1 hostnameforlogs localhost

  2. Sui client e server modificare /etc/rsyslog.conf per includere questa istruzione:

    $ PreserveFQDN attivo

  3. Sul server ho usato la variabile% HOSTNAME% per i modelli in rsyslog.conf:


1
Questo dovrebbe essere contrassegnato come risposta
ErJab,

1
Si prega di contrassegnare quanto sopra come risposta.
Greg Annandale,

1
Dopo 4 anni questa risposta ha ancora le gambe. Grazie per l'aiuto Matt alla vigilia di Natale devops.
Joe,

7

Per modificare il nome host inviato da rsyslog, aggiungere la seguente direttiva come prima riga in /etc/rsyslog.conf prima di caricare qualsiasi modulo:

$LocalHostName yourhostname

In alternativa, per fare in modo che rsyslog invii con il nome di dominio completo (FQDN, come system1.example.com) anziché semplicemente il nome host (system1), utilizzare la direttiva:

$PreserveFQDN on

Questo è raramente necessario. Si consiglia di utilizzare il nome host (senza il nome di dominio) a meno che non si disponga di sistemi con nomi identici.

Un modo alternativo per impostarlo (che consente di inviare registri diversi come nomi host diversi) è l'impostazione di un modello personalizzato:

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

4

Potrebbe essere un bug. Il supporto FQDN è o era noto per essere traballante , anche se nessuno dei bug FQDN registrati sembra applicarsi.

Per ovviare a questo problema, se non si esegue alcun inoltro, utilizzare %FROMHOST%invece di% HOSTNAME%.


1
L'utilizzo %FROMHOST%mi dà un FQDN, ma sembra essere il risultato di una ricerca inversa sull'indirizzo IP del nodo client. Poiché i miei sistemi funzionano su AWS EC2, sfortunatamente questo produrrà sempre un nome di dominio completo che non ha alcun significato immediato per me.
cwjohnston,

0

Posso solo parlare a 7.6.x, ma $PreserveFQDNera tutto ciò che era necessario per farlo funzionare. Puoi evitare di dover fare confusione /etc/hostsse l'FQDN del tuo nodo è configurato correttamente.

Esempio per sistemi CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

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

Assicurati di riavviare.


0

Puoi usarlo nella configurazione rsyslog lato client.

$LocalHostName {{HOSTNAME}}

e sostituisci {{HOSTNAME}}con il nome host desiderato oppure puoi distanziarlo su ciascuno dei client usando automaticamente i baffi .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.