Wie kann ich rsyslogd veranlassen, den FQDN eines Servers anstelle seines kurzen Hostnamens zu protokollieren?

22

Ich versuche, einen einfachen zentralisierten Syslog-Server mit stock rsyslogd (4.2.0-2ubuntu8.1) auf Ubuntu 10.04 LTS zu implementieren. Zu diesem Zeitpunkt senden alle Clientknoten Protokolle an den zentralen Server, aber die Clients senden Protokollnachrichten, die ihren kurzen Hostnamen anstelle ihres vollqualifizierten Domänennamens enthalten.

In der Ubuntu rsyslogd-Manpage heißt es:

Befindet sich der Remote-Host in derselben Domäne wie der Host, auf dem rsyslogd ausgeführt wird, wird nur der einfache Hostname anstelle des gesamten fqdn protokolliert.

Dies ist problematisch für mich, da ich kurze Namen zwischen Umgebungen wiederverwende, z. B. core1.example.com und core1.stg.example.com, die beide ihre Nachrichten als core1 protokollieren.

Sowohl der Client als auch der Server haben dasselbe Verzeichnis / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4"

und die gleiche /etc/rsyslogd.conf Datei:

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

Clients haben diese /etc/rsyslog.d/remote.conf -Datei, die sie anweist, an den Remote-Server zu senden:

*.* @@syslog.example.com

und der Server verwendet diese Datei /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

Da Client und Server eine Konfiguration gemeinsam nutzen, die "$ PreserveFQDN on" angibt, erwarte ich, dass FQDN-Hostnamen in Syslog-Nachrichten angezeigt werden, aber die Einstellung scheint keine Auswirkungen zu haben. Die meisten anderen Einstellungen, die ich für rsyslog gefunden habe, zielen darauf ab, Domänen von FQDNs zu entfernen, anstatt sie beizubehalten. Ich denke, die Wurzel des Problems liegt darin, dass meine Clients den FQDN nicht an erster Stelle senden, aber ich verstehe nicht, wie ich dieses Verhalten erzwingen kann.

Kann jemand kommentieren, was ich vermissen könnte? Ich stelle mir vor, dass ich nicht die einzige Person bin, die FQDNs benötigt, um in Protokollnachrichten aufgenommen zu werden.

cwjohnston
quelle
Ich habe anschließend das Paket rsyslog 4.6.4-2ubuntu4 von Ubuntu 11.04 auf meinem Server und einer Teilmenge meiner Client-Knoten erstellt und installiert, habe jedoch keine Änderung in diesem Verhalten festgestellt.
Cwjohnston

Antworten:

38

Ich bin auch auf dieses Problem gestoßen. Hier ist, wie ich es reparieren konnte.

  1. Ändern Sie auf den Clients die Datei / etc / hosts so, dass der gewünschte Hostname vor localhost steht.

    127.0.0.1 hostnameforlogs localhost

  2. Ändern Sie auf den Clients und dem Server /etc/rsyslog.conf, um diese Anweisung einzuschließen:

    $ PreserveFQDN on

  3. Auf dem Server habe ich die Variable% HOSTNAME% für die Vorlagen in rsyslog.conf verwendet:

Matt McMillan
quelle
1
Dies sollte als Antwort markiert werden
ErJab
1
Bitte kennzeichnen Sie das oben Gesagte als Antwort.
Greg Annandale
1
Nach 4 Jahren hat diese Antwort noch Beine. Danke, dass du Matt an Heiligabend geholfen hast.
Joe
7

Fügen Sie zum Ändern des Hostnamens, den rsyslog sendet, die folgende Direktive als erste Zeile in /etc/rsyslog.conf hinzu, bevor Module geladen werden:

$LocalHostName yourhostname

Um rsyslog mit dem vollqualifizierten Domänennamen (FQDN, z. B. system1.example.com) anstelle des Hostnamens (system1) senden zu lassen, verwenden Sie die Anweisung:

$PreserveFQDN on

Dies wird selten benötigt. Wir empfehlen die Verwendung des Hostnamens (ohne den Domänennamen), sofern Sie nicht Systeme mit identischen Namen verwenden.

Eine alternative Methode zum Festlegen (mit der Sie verschiedene Protokolle als unterschiedliche Hostnamen senden können) ist das Festlegen einer benutzerdefinierten Vorlage:

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

Es könnte ein Fehler sein. Die FQDN-Unterstützung ist oder war als fehlerhaft bekannt , obwohl keiner der registrierten FQDN-Fehler zuzutreffen scheint.

%FROMHOST%Um dieses Problem zu umgehen , verwenden Sie anstelle von% HOSTNAME% , wenn Sie keine Weiterleitung durchführen.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Die Verwendung von %FROMHOST%gibt mir einen vollqualifizierten Domänennamen, der jedoch anscheinend das Ergebnis einer umgekehrten Suche nach der IP-Adresse des Clientknotens ist. Da meine Systeme auf AWS EC2 ausgeführt werden, liefert dies leider immer einen FQDN, der für mich keine unmittelbare Bedeutung hat.
Cwjohnston
0

Ich kann nur mit 7.6.x sprechen, war aber $PreserveFQDNalles, was benötigt wurde, damit es funktioniert. Sie müssen sich nicht damit herumschlagen, /etc/hostswenn der FQDN Ihres Knotens korrekt eingerichtet ist.

Beispiel für CentOS / RHEL-Systeme:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

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

Achten Sie darauf, neu zu starten.

Mike Purcell
quelle
0

Sie können dies in der clientseitigen rsyslog-Konfiguration verwenden.

$LocalHostName {{HOSTNAME}}

und durch {{HOSTNAME}}den gewünschten Hostnamen ersetzen, oder Sie können ihn auf jedem Client mithilfe von Schnurrbart automatisch erkennen.

Rahul Shaw
quelle