RSYSLOG

rsyslog ist eine Erweiterung zum alten syslogdienst, mit dem Logmeldungen an einen zentralen Server weitergeleitet werden können.
Auf den Debian-systemen ab squeeze ist der Dienst bei Neuinstallation schon installiert und aktiviert.
Auf upgedateten älteren Systemen wie z.B.LENNY muss der Dienst erst noch nachinstalliert werden.

Installation des RSYSLOG-Servers

Installation des Dienstes:

apt-get install rsyslog

Die Konfiguration soll so erfolgen, dass der Dienst Systemlogs von anderen Clients annimmt.: editiere die Datei /etc/rsyslog.conf wie folgt:

...
#server soll auf UDP-Port 514 horchen
$Modload imudp
$UDPServerRun 514
#server soll auch auf TCP-Port 514 horchen
$Modload imtcp
$InputTCPServerRun 514
...

anschließend muss der Dienst neu gestartet werden:

/etc/init.d/rsyslogd restart

der Server horcht jetzt über TCP und UDP auf eingehene Syslogmeldungen.
Mit dem Tool Loganalyzer kann das ganze dann noch aufgehübscht werden.
fertig.


Installation des RSYSLOG-Clients

Installation wiedes des Dienstes:

apt-get install rsyslog

Die Konfiguration soll so erfolgen, dass der Dienst alle Syslogs an einen anderen Servern sendet.: editiere die Datei /etc/rsyslog.conf oder eine neue Datei /etc/rsyslog.d/remote.conf wie folgt:

...
# für UDP
*.* @meinRSYSLOGserver
# oder für TCP
*.* @@meinRSYSLOGserver
#Beispiel wenn nur Warnungen und auch Anmeldeinfos weitergeleitet werden sollen
#*.warn @meinRSYSLOGserver
#auth,authpriv.* @meinRSYSLOGserver
...

anschließend muss der Dienst neu gestartet werden:

/etc/init.d/rsyslogd restart

der Client sendet jetzt über TCP oder UDP seine Syslogmeldungen an den Server: meinRSYSLOGserver (IP geht auch).
fertig.


weitere Konfigurationsmöglichkeiten

sende auf meinem Client alle Systemmeldungen an die virtuelle Konsole 10 (tty10)

erstelle folgenden Eintrag in der Datei /etc/inittab:

...
10:23:respawn:/sbin/getty 38400 tty10
...

erstelle folgenden Eintrag in der Datei /etc/rsyslog.conf:

...
*.* /dev/tty10
...

anschließend muss der Dienst neu gestartet werden:

/etc/init.d/rsyslogd restart

Drücke <ALT>+<F10>. Dort müssten die Sylog-Meldungen jetzt zu sehen sein.

sende die Syslogs maximal komprimiert an den Syslog-Server

editiere die Datei /etc/rsyslog.conf wie folgt:

...
*.* @@(o,z9)meinRSYSLOGserver
...

anschließend muss der Dienst neu gestartet werden:

/etc/init.d/rsyslogd restart
sende nur die Syslogs ab "warn" an den Syslog-Server

editiere die Datei /etc/rsyslog.conf wie folgt:

...
*.warn @@meinRSYSLOGserver
...

anschließend muss der Dienst neu gestartet werden:

/etc/init.d/rsyslogd restart

teste anschließend ob die Mails auch auf dem Syslog-Server ankommen:

logger -p debug testdebug
logger -p info testinfo
logger -p warn testwarn
logger -p crit testcrit
logger -p emerg testemerg

die debug- und info-Meldungen sollten nicht auf dem Server ankommen.
weitere Möglichkeit mit netcat aus cmdline heraus:

echo "<11>1 2019-11-06T13:38:07.407048+01:00 myclient root - - -  errtest mit nc" | nc -u  -q0 myrsyslogsrv 514

sende RSYSLOG-Meldungen mit powershell von einem Windowsclient an den RSYSLOG-Server

sende nur bestimmte Nachrichten aus nichtstandard-Logdateien an den entfernten RSYSLOG-Server

erstelle diese Datei 00_remote.conf im Verzeichnis /etc/rsyslog.d/ ,
konfiguriere sie und starte den dienst dann neu durch.

00_remote.conf
$ModLoad imfile
$InputFileName /var/log/linotp/linotp.log
$InputFileTag linotp-error
$InputFileStateFile stat-linotp-error
$InputFileSeverity warn
$InputFileFacility local3
$InputRunFileMonitor
:msg,contains,"WARN" @@my.rsyslog.ser.ver:514

Maile wennn ein Fehler auftritt

erstelle diese Datei 10_mailtrigger.conf im Verzeichnis /etc/rsyslog.d/ ,
konfiguriere sie und starte den dienst dann neu durch.

10_mailtrigger.conf
#Mailmodul zum automatischen mailen
$ModLoad ommail
$ActionMailSMTPServer my.smtp.ser.ver
$ActionMailSMTPPort 25
$ActionMailEnableBody on
$ActionMailFrom rsyslog@my.domain
$ActionMailTo admin@my.domain
$template mailSubject,"Rsyslog Meldung von %hostname%"
$template mailBody,"RSYSLOG Meldung:\r\n\r\n\
            hostname=%hostname%\r\n\
            timereported=%timereported%\r\n\
            syslogfacility-text=%syslogfacility-text%\r\n\
            programname=%programname%\r\n\
            msg=%msg%"
$ActionMailSubject mailSubject
#$ActionExecOnlyOnceEveryInterval 60
if $msg contains 'wichtige Meldung' then :ommail:;mailBody

unterdrücke uninteressante Meldungen

erstelle diese Datei 20_msgfilter.conf im Verzeichnis /etc/rsyslog.d/ ,
konfiguriere sie und starte den dienst dann neu durch.

20_msgfilter.conf
##################################################
# WindowsMessages unterdrücken
if $msg contains ["AUDIT_FAILURE A Kerberos", \
                 "AUDIT_FAILURE Kerberos", \
                 "Security-Auditing: 4625", \
                 "Security-Auditing: 4662", \
                 "Security-Auditing: 4776", \
                 "Security-Auditing: 4769"] \
then stop
##################################################
# LinuxMessages unterdrücken
if $msg contains ["origin software=\"rsyslogd\"", \
                 "imuxsock"] \
then stop
##################################################
##################################################
# plappernden Server unterdrücken
if $msg contains "MSExchange_Unified_Messaging" \
and $hostname == "myoldExchsrv" \
then stop
##################################################

Fehlersuche

  • traue niemals einem fehlerfreiem Start von:

/etc/init.d/rsyslogd start deshalb Fehlermeldungen nach jeder Konfigänderung unbedingt checken:

 systemctl status rsyslog.service

oder

rsyslogd -N 1 -f /etc/rsyslog.conf
  • in den zentralen Logs taucht immer localhost als hostname auf. Die Meldung kommt aber von einem Client.

deshalb trage auf den Clients diesen Eintrag unter #### GLOBAL DIRECTIVES #### ein und starte den Dienst neu:

###########################
#### GLOBAL DIRECTIVES ####
###########################
$PreserveFQDN on

danach sollte der richtige Hostname in den Logs auftauchen.

  • Debugging: Dienst erst stoppen dann
rsyslogd -N 1 -d 2>~/0 | egrep "cnf:|ssigned|filter|ACTION|PRIFILT" | egrep -v 'cnf:global:script|END' | more
  • Erreichen die Meldungen überhaupt den Rsyslogserver mit der IP 192.168.1.2 ?

logger -n 192.168.1.2 -t myapp -p user.warn „Test!“

LogAnalyzer

Installation
apt-get install apache2 libapache2-mod-php7.3 php7.3-gd
echo "<IfModule mod_alias.c>" >>/etc/apache2/conf-available/loganalyzer.conf
echo   "Alias /loganalyzer /usr/share/loganalyzer" >>/etc/apache2/conf-available/loganalyzer.conf
echo "</IfModule>" >>/etc/apache2/conf-available/loganalyzer.conf
a2enmod php7.3 alias
a2enconf loganalyzer
wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.7.tar.gz
tar xvfz loganalyzer-4.1.7.tar.gz
cp -avr loganalyzer-4.1.7/src /usr/share/loganalyzer
chown -R tomcat /usr/share/loganalyzer
Konfiguration

Webseite aufrufen : http://meinserver/loganalyzer
dann konfigurieren
Nacharbeit in /usr/share/loganalyzer/config.php:

$CFG['HeaderDefaultEncoding'] = ENC_UTF8;
$CFG['ViewDefaultLanguage'] = "de";
$CFG['SuppressDuplicatedMessages'] = 1;
...
$CFG['Sources']['Source1']['LogLineType'] = 'syslog23';

auf den rsyslogclients in /etc/rsyslog.d/00_client.conf:

$ActionFileDefaultTemplate RSYSLOG_SyslogProtocol23Format
*.warn @@meinrsyslogsrv:514;RSYSLOG_SyslogProtocol23Format

dann den Dienst jeweils neustarten:

/etc/init.d/rsyslogd restart

Sonstiges

SYSLOGServer auf ESXi-Server konfigurieren:
esxcli system syslog config get
exccli system syslog config set --loghost='meinrsyslogsrv'
esxcli system syslog reload

https://kb.vmware.com/s/article/2003322
Logging vorher auf warning runterdrehen; steht auf standardmäßig auf info

Journalctl - Meldungen zum syslog umleiten:

in der Datei /etc/systemd/journald.conf Kommentierung entfernen.

ForwardToSyslog=yes

und dann den Dienst neu starten:

systemctl restart systemd.journald