rsyslog remote logging

Rsyslog remote logging

 

In dieser Anleitung gehts darum einen zentralen Logserver einzurichten.
Ziel ist es das mehrere Server auf diesen zentralen Logserver loggen können, und ihre Logs auch in separaten Verzeichnissen abgelegt werden.
Ich nutze hier für ein Standard Debian Wheezy als VM.

 

Remote logging am Rsyslog Server einstellen

Als zentrales Verzeichnis legen wir /var/log/rsyslog an
[stextbox id=“bash“]mkdir /var/log/rsyslog[/stextbox]

In der Standard rsyslog.conf ist definiert das rsyslog auch Configfiles im Verzeichnis /etc/rsyslog.d/*.conf sucht und einbindet.
Config Dateien im Verzeichnis /etc/rsyslog.d/ werden beim update von Rsyslog nicht überschrieben, was bei der /etc/rsyslog.conf jedoch passieren kann.

Deswegen werden wir hier auch unsere angepasste rsyslog config hinterlegen.
[stextbox id=“bash“]nano /etc/rsyslog.d/rsyslog-loghost.conf[/stextbox]

Als erstes stellen wir ein das rsyslog auf UDP und TCP port 514 lauschen soll.

#################
#### MODULES ####
#################

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514



#########
# Sortiere folgende "Standards" in separate logfiles aus
#########

# Deamon
$template DAEMONHOST, "/var/log/rsyslog/%HOSTNAME%/daemon.log"
daemon.* -?DAEMONHOST
& ~

# Auth
$template AUTHHOST, "/var/log/rsyslog/%HOSTNAME%/auth.log"
auth.* -?AUTHHOST
& ~

# Cron
$template CRONHOST, "/var/log/rsyslog/%HOSTNAME%/cron.log"
cron.* -?CRONHOST
& ~

# Kernel
$template KERNELHOST, "/var/log/rsyslog/%HOSTNAME%/kern.log"
kern.* -?KERNELHOST
& ~

# Mail
$template MAILHOST, "/var/log/rsyslog/%HOSTNAME%/mail.log"
mail.* -?MAILHOST
& ~

# User
$template USERHOST, "/var/log/rsyslog/%HOSTNAME%/user.log"
user.* -?USERHOST
& ~

# Syslog bzw den Rest
$template SYSLOGHOST, "/var/log/rsyslog/%HOSTNAME%/syslog.log"
*.* -?SYSLOGHOST
& ~

 

Was macht rsyslog hier genau.

Die erste Zeile definiert das template wohin gespeichert werden soll.
Also in unserem Fall nach /var/log/rsyslog/%HOSTNAME%/LOGFILE
Hier wird die Variable %HOSTNAME% durch den Hostnamen ersetzt. Alternativ kann man auch %fromhost-ip% verwenden.
Benötigte Verzeichnisse werden automatisch angelegt.

Die zweite Zeile definiert was geloggt werden soll.
In unserem Fall zb. kern.* Hier wird alles was beim normalen local Logging ins kern.log geschrieben wird, an das Template KERNELHOST geleitet.

Die dritte Zeile & ~ sorgt dafür das wenn schon die Zeile in ein Logfile geschrieben wurde diese nicht nochmal bearbeitet wird.

 

Logging am Client einstellen

Jetzt stellen wir einen Client ein damit er seine logfiles an unseren Rsyslog Server sendet.
Hierzu editieren wir entweder die /etc/rsyslog.conf oder erstellen unter /etc/rsyslog.d/remote_logging.conf.

Hier kann man entscheiden ob man per UDP oder per TCP Loggen will.
Als Ziel kann man sowohl die IP als auch den Hostnamen verwenden.
[stextbox id=“bash“]nano /etc/rsyslog.d/remote_logging.conf[/stextbox]

# Rsyslog Server via UDP
#*.*   @IP/Hostname:514

# Rsyslog Server via TCP
#*.*   @@IP/Hostname:514

Speichern und den Rsyslog neu starten, dann sollte nach kurzer zeit auf dem Rsyslog Server das logging beginnen.

Im allgemeinen empfehle ich TCP zu nutzen da es zuverlässiger ist als UDP.
Der Hauptgrund ist das bei UDP die Messages verlorengehen können.
Da der Syslog Server eine hohe Anzahl von Messages verarbeiten muss und wird kann es auch dazu kommen das der UDP Systempuffer voll läuft und daher keine neuen Messages angenommen werden bis dieser wider Platz hat.

TCP Logging sorgt zwar für eine höhere System last aber dafür kann man fast 100% sicher sein das die Messages am Server angekommen sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*