Jak zmusić rsyslogd do rejestrowania nazwy FQDN serwera zamiast krótkiej nazwy hosta?


22

Usiłuję zaimplementować prosty scentralizowany serwer syslog przy użyciu standardowego rsyslogd (4.2.0-2ubuntu8.1) na Ubuntu 10.04 LTS. W tym momencie wszystkie moje węzły klienta wysyłają dzienniki do serwera centralnego, ale klienci wysyłają wiadomości dziennika zawierające krótką nazwę hosta zamiast nazwy FQDN.

Według strony podręcznika Ubuntu rsyslogd:

Jeśli zdalny host znajduje się w tej samej domenie co host, rsyslogd działa, tylko prosta nazwa hosta zostanie zarejestrowana zamiast całej nazwy fqdn.

Jest to dla mnie problematyczne, ponieważ ponownie używam krótkich nazw między środowiskami, np. Core1.example.com i core1.stg.example.com, oba rejestrują swoje wiadomości jako core1.

Zarówno klient, jak i serwer mają ten sam plik / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4"

i ten sam plik /etc/rsyslogd.conf:

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

Klienci mają ten plik /etc/rsyslog.d/remote.conf, informując ich, aby wysłali na zdalny serwer:

*.* @@syslog.example.com

a serwer używa tego pliku /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

Ponieważ zarówno klient, jak i serwer współużytkują konfigurację określającą „$ PreserveFQDN on”, spodziewam się, że zobaczę nazwy hostów FQDN w wiadomościach syslog, ale ustawienie wydaje się nie mieć żadnego efektu. Większość innych ustawień rsyslog, które znalazłem, mają na celu usunięcie domen z FQDN zamiast ich przechowywania. Myślę, że źródłem problemu jest to, że moi klienci nie wysyłają nazwy FQDN, ale nie widzę, jak wymusić takie zachowanie.

Czy ktokolwiek może skomentować to, czego może mi brakować? Wyobrażam sobie, że nie jestem jedyną osobą, która potrzebuje nazwy FQDN, aby była zawarta w komunikatach dziennika.


Następnie zbudowałem i zainstalowałem pakiet rsyslog 4.6.4-2ubuntu4 z Ubuntu 11.04 na moim serwerze i podzbiorze moich węzłów klienta, ale nie zaobserwowałem w rezultacie zmiany tego zachowania.
cwjohnston

Odpowiedzi:


38

Wpadłem również na ten problem. Oto jak udało mi się to naprawić.

  1. Na klientach zmodyfikuj plik / etc / hosts, aby żądana nazwa hosta pojawiła się przed localhost.

    127.0.0.1 hostnameforlogs localhost

  2. Na klientach i serwerze zmodyfikuj /etc/rsyslog.conf, aby uwzględnić tę instrukcję:

    $ PreserveFQDN włączony

  3. Na serwerze użyłem zmiennej% HOSTNAME% dla szablonów w pliku rsyslog.conf:


1
To powinno być oznaczone jako odpowiedź
ErJab

1
Proszę zaznaczyć powyższe jako odpowiedź.
Greg Annandale

1
Po 4 latach ta odpowiedź wciąż ma nogi. Dzięki za pomoc Mattowi w wigilię Bożego Narodzenia.
Joe

7

Aby zmienić nazwę hosta, którą wysyła rsyslog, dodaj następującą dyrektywę jako pierwszy wiersz w pliku /etc/rsyslog.conf przed załadowaniem jakichkolwiek modułów:

$LocalHostName yourhostname

Alternatywnie, aby rsyslog wysyłał z pełną nazwą domeny (FQDN, na przykład system1.przyklad.com) zamiast po prostu nazwą hosta (system1), skorzystaj z dyrektywy:

$PreserveFQDN on

Jest to rzadko potrzebne. Zalecamy używanie nazwy hosta (bez nazwy domeny), chyba że masz systemy o identycznej nazwie.

Alternatywnym sposobem ustawienia go (który umożliwia wysyłanie różnych dzienników jako różnych nazw hostów) jest ustawienie niestandardowego szablonu:

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

4

To może być błąd. Obsługa FQDN jest lub była znana jako nieporadna , chociaż wydaje się , że żadne z zarejestrowanych błędów FQDN nie ma zastosowania.

Aby obejść ten problem, jeśli nie przeprowadzasz przekazywania, użyj %FROMHOST%zamiast% HOSTNAME%.


1
Użycie %FROMHOST%daje mi nazwę FQDN, ale wydaje się, że jest to wynik wyszukiwania wstecznego adresu IP węzła klienta. Ponieważ moje systemy działają na AWS EC2, niestety zawsze da to nazwę FQDN, która nie ma dla mnie bezpośredniego znaczenia.
cwjohnston

0

Mogę rozmawiać tylko z 7.6.x, ale $PreserveFQDNto wszystko, co było potrzebne, aby działało. Możesz uniknąć bałaganu, /etc/hostsjeśli nazwa FQDN Twojego węzła jest poprawnie skonfigurowana.

Przykład dla systemów CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

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

Pamiętaj, aby zrestartować komputer.


0

Możesz użyć tego w konfiguracji rsyslog po stronie klienta.

$LocalHostName {{HOSTNAME}}

i zamień {{HOSTNAME}}na żądaną nazwę hosta lub możesz ją zdemonstratować na każdym kliencie, używając automatycznie wąsów .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.