====== Syslog ====== Linux PCs haben standardmäßig einen Syslog-Daemon welcher informationen über das System, den Kernel, und andere Software sammelt und in Textdateien abspeichert. Ubuntu hat standardmäßig den ''rsyslogd'' installiert. ===== Remotelogging ===== Um dem ''rsyslogd'' zu sagen dass er auch auf der Netzwerkkarte nach Syslog-Meldungen horchen soll muß folgendes konfiguriert werden. vi /etc/rsyslog.conf Hier bei folgenden Zeilen die Rauten (#), am Anfang, löschen. $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 Danach den Daemon neustarten. service rsyslog restart ===== Logdateien separieren ===== Auf verschiedene Weise können die einzelnen Syslog-Meldungen in verschiedene einzelne Textdateien geschrieben werden. [[http://www.rsyslog.com/doc/property_replacer.html|Hier]] sind einige Möglichkeiten aufgezählt. Es macht Sinn eigene Regelwerke in einer eigenen Konfigurationsdatei abzulegen, welche vor den Standardmäßigen Regelwerken abgearbeitet wird. Hierfür erstellt man eine Datei unter ''/etc/rsyslog.d'', nach vorgegebenem Format ''.conf''. Nimmt man hier eine kleinere Zahl im Dateinamen, als die der Standarddatei (**/etc/rsyslog.d/50-default.conf**), wird diese Datei mit ihren Regeln vorher abgearbeitet. Wichtig bei diesen Befehlszeilen sind immer die Zeichen ''& ~'', diese sagen aus, dass nach dem Abarbeiten der zutreffenden Regel, keine weitere Prüfung auf andere Regeln stattfindet. Wenn die Zeichen nicht angegeben werden, dann greift die spätere Standardregel von ''rsyslog'' welche die Meldungen in die Datei ''/var/log/syslog'' schreibt. Man hat somit eine doppelte Datenhaltung. In der ''50-default.conf'' kann man auch Meldungen in die syslog-Datei ausschließen, in dem die Severity "none" nach dem Facility-Feld gewählt wird. Hier ein Beispiel anhand der Meldungen des Facility "mail": *.*;mail.none -/var/log/syslog Hiermit werden die Meldungen vom Postfix, Dovecot, ... nicht mehr in die Syslog-Datei geschrieben. Beispiel: Hier wird eine ankommende Meldung auf den Hostnamen oder IP-Adresse geprüft. Wenn eines zutrifft wird die Meldung in die angegebene Textdatei gespeichert. if $fromhost == '' then & stop Hier wird eine ankommende Meldung zusätzlich auf den Nachrichteninhalt geprüft. Wenn hier noch einer der gesuchten Begriffe zutrifft, dann wird separiert. if $fromhost == '' and ($msg contains '' or $msg contains '' or $msg contains '') then & stop ===== Templates ===== Templates kann man für verschiedene Zwecke nutzen eine ausführliche Beschreibung findet man bei [[http://www.rsyslog.com/doc/v7-stable/configuration/templates.html|rsyslog.com]]. Folgend findet man Beispiele, wie man Templates einsetzen kann. ==== MessageFormat ==== Format einer Syslog Nachricht ersetzt um ein rfc3339 konformes Datum. template(name="FileFormat" type="list") { property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") } Man könnte das Template auch wie folgt schreiben (**Wichtig**: Dabei muss die Definition des Templates in einer einzelnen Zeile geschrieben werden): template(name="FileFormat" type="string" string= "%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n") Hier noch ein Beispiel, welches ich verwendet habe um einen Syslogtimestamp durch ein rfc3339 (bei den Logstash-Patterns ist das ein TIMESTAMP_ISO8601) Datum zu ersetzen. template(name="Daterfc" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n") *.* /var/log/syslog;Daterfc ==== DynamicFileNameFormat ==== template(name="FileNameDateToday" type="string" string="/var/log/syslog_%$year%-%$MONTH%_%$DAY%.log") *.* ?FileNameDateToday ===== Nachrichten senden ===== Mit dem Tool ''logger'' lassen sich Syslog-Nachrichten versenden. logger -n -P [--tcp|--udp] -p . -t "" oder mit Netcat (-n: keine neue Zeile; -4: IPv4; -u: UDP; -w: wait) echo -n "Test" | nc -4 -u -w 1 ===== Log-Analyse ===== Man kann die Textdateien manuell mit ''cat'', ''grep'' oder ''tail'' untersuchen. Eine andere schöne Webbasierte Lösung ist LogAnalyzer. Installiert wird dieser wie folgt: wget http://download.adiscon.com/loganalyzer/loganalyzer-3.4.3.tar.gz tar xfz loganalyzer-3.4.3.tar.gz cd /var/www mkdir logs cd logs cp -a /src* . chown -R www-data.www-data /var/www/logs In MySQL muß noch eine Datenbank und ein User angelegt werden. mysql -uroot -p Hier folgendes eintippen: create datebase loganalyzer; GRANT ALL PRIVILEGES ON loganalyzer.* TO 'loganalyzer'@'localhost' IDENTIFIED BY '' WITH GRANT OPTION; Hiernach einfach im Browser die Seite http:///logs aufrufen und den Installer abarbeiten.