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.
Odpowiedzi:
Wpadłem również na ten problem. Oto jak udało mi się to naprawić.
Na klientach zmodyfikuj plik / etc / hosts, aby żądana nazwa hosta pojawiła się przed localhost.
127.0.0.1 hostnameforlogs localhost
Na klientach i serwerze zmodyfikuj /etc/rsyslog.conf, aby uwzględnić tę instrukcję:
$ PreserveFQDN włączony
Na serwerze użyłem zmiennej% HOSTNAME% dla szablonów w pliku rsyslog.conf:
źródło
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:
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:
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:
źródło
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%.źródło
%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.Mogę rozmawiać tylko z 7.6.x, ale
$PreserveFQDN
to wszystko, co było potrzebne, aby działało. Możesz uniknąć bałaganu,/etc/hosts
jeśli nazwa FQDN Twojego węzła jest poprawnie skonfigurowana.Przykład dla systemów CentOS / RHEL:
Pamiętaj, aby zrestartować komputer.
źródło
Możesz użyć tego w konfiguracji rsyslog po stronie klienta.
i zamień
{{HOSTNAME}}
na żądaną nazwę hosta lub możesz ją zdemonstratować na każdym kliencie, używając automatycznie wąsów .źródło