Die meisten Programme und Dienste auf einem Linux- oder BSD-System hinterlassen in irgendeiner Form eine Nachricht über das was sie gemacht oder nicht gemacht haben. Diese Protokollierungen sind zum einen hilfreich zur Fehlersuche und zum anderen kann sie herangezogen werden um sich einen Überblick zu verschaffen was auf dem System vor sich geht. Gibt es vielleicht unerwünschte Besucher, hat ein Anwender versucht sich zum 43. Mal erfolglos anzumelden oder wurde von der Firewall eine große Anzahl von Paketen geblockt.
Normalerweise werden diese und andere Daten in einer Textdatei abgelegt. Eine gezielte Auswertung ist hier, insbesondere bei einem größerem Datenvolumen nur mit weiteren Hilfsmitteln möglich. Eine mögliche Vereinfachung wäre die Daten in einer Datenbank zu speichern, wo diese gezielt abgefragt und analysiert werden können. An dieser Stelle kommt RSyslog in Spiel. Das Programm bietet eine Schnittstelle zu MySQL- und Postgres-Datenbanken, über die sich die Logs direkt in einer Datenbanktabelle ablegen lassen. Die Meldungen lassen sich über verschiedene Filtermechanismen unter anderem reguläre Ausdrücke in ihrem Aussehen bereits im Vorfeld individuell anpassen.
Bei vielen Systemen sind die Quellen bereits beigefügt und lassen sich über das betreffende Installationsprogramm installieren. Andernfalls steht das Paket in der jeweils aktuellen Version unter http://www.rsyslog.com zur Verfügung.
Außerdem wird noch das Devel-Paket für Mysql (libmysqlclient15-dev) benötigt.
Anschließend sind die üblichen Aufrufe zu tätigen:
# ./configure --enable-mysql .... **************************************************** rsyslog will be compiled with the following settings: Multithreading support enabled: yes Klogd functionality enabled: yes Regular expressions support enabled: yes Zlib compression support enabled: yes MySql support enabled: yes PostgreSQL support enabled: no Large file support enabled: yes Networking support enabled: yes Enable GSSAPI Kerberos 5 support: no Debug mode enabled: no # make # make install
Mit diesen Aufrufen wird rsyslogd auf die MySQL-Unterstützung vorbereitet und die Quellen übersetzt. Anschließend werden rsyslogd und die manuals in die entsprechenden Verzeichnisse (beispielsweise /usr/local/sbin/ bzw. /usr/local/share/man/man8/) kopiert.
rsyslog gewährleistet die gleiche Funktionalität wie syslogd. Praktischerweise versteht rsyslog auch die Syntax der der Datei syslog.conf, so daß diese vorerst genutzt werden kann. Allerdings ist diese nach /etc/rsyslog.conf zu kopieren (oder ggf. umzubenennen), damit diese auch gefunden wird.
Nach diesen Vorarbeiten kann der reguläre syslogd gestoppt und rsyslogd gestartet werden.
# /etc/init.d/sysklogd stop Stopping system log daemon: syslogd. # /usr/local/sbin/rsyslogd -d
Ab diesem Zeitpunkt sollten die Log-Daten in die Datenbank geschrieben werden. Das rsyslogd läuft, läßt sich auch über die Datei /var/log/messages erkennen.
Mar 3 20:11:32 localhost rsyslogd: [origin software="rsyslogd" swVersion="2.0.2" ....
Interessant wird die Nutzung von rsyslog mit der Anwendung der sogenannten Templates, mit denen sich Aussehen, Form und Umfang der Systemmeldungen in großem Maße beeinflussen lassen. Das syslog-Format wurde als fester Bestandteil in rsyslog übernommen, alle weiteren können und müssen in der Konfigurationsdatei definiert werden.
Ein Template setzt sich aus der einleitenden Zeichenfolge $template, einer Bezeichnung sowie der betreffenden Anweisung zusammen. Optional kann noch ein vierter Parameter angegeben werden, mit dem sich SQL-Anweisungen beeinflussen lassen. Ein Template könnte demnach wie folgt aussehen:
$template MyTemplate,"%$DAY%.%$MONTH%.%$YEAR% %$HOUR%:%$MINUTE% %msg%\n"
Mit $template wird rsyslog angezeigt, daß ein Template mit der Bezeichnung MyTemplate folgt. Unter dieser Bezeichnung kann es an anderer Stelle in der Konfiguration aufgerufen werden.
*.* /var/log/messages;MyTemplate
Der Aufruf
$ logger "Test-Meldung"
wird unter /var/log/messages wie folgt protokolliert:
03.03.2008 20:19 Test-Meldung
Ausser den im Beispiel gezeigten gibt es noch eine Reihe weiterer Variablen, dazu gehören unter anderem:
Über die genannten Parameter lassen sich auch Teile der jeweiligen Meldungen extrahieren. So liefert beispielsweise %msg:1:4% die ersten vier Zeichen, %msg:12:$% alles ab dem 12. Zeichen und alles in Großbuchstaben wird über %msg:::uppercase% realisiert.
Eine weitere Möglichkeit einzelne Daten zu extrahieren besteht wenn die Meldung durch ein Zeichen unterteilt ist (wie beispielsweise in einer CSV-Datei). Diese Variante wird mit einem F gefolgt von dem dezimalen ASCII-Wert, der dem jeweiligen Trennzeichen entspricht, eingeleitet. Anschließend ist noch das betreffende Feld anzugeben, das angezeigt werden soll.
Die Angaben
$template MyCSV "%msg:F,59:2%"
liefern bei der Befehlsfolge
$ logger "test1;test2;test3;test4"
die folgende Meldung in der Logdatei.
2008-03-03 localhost test2
Falls das noch nicht ausreicht bieten sich als weiteres Hilfsmittel reguläre Ausdrücke an. Diese werden mit einem R eingeleitet und mit der Zeichenfolge -end abgeschlossen.
Auch hierzu ein Beispiel:
$template MyRegEx,"%msg:R:Test \(.*\) [[:digit:]]--end%\n"
Der Aufruf
$ logger "Test Meldung 234"
führt zur folgender Meldung:
Meldung
Nicht nur das Aussehen der Protokollierung läßt sich auf die gezeigte Art beeinflußen, sondern auch der Name der Ausgabedateien. Das Template
$template MyMessagesHost,"/var/log/messages_%HOSTNAME%_%$NOW%"
erzeugt bespielsweise eine Augabedatei mit der Bezeichnung:
/var/log/messages_localhost_2008-03-03
Außer in Testdateien bietet rsyslog noch die Möglichkeit im Gegensatz zum herkömmlichen syslog die Daten in eine Datenbank zu protokollieren.
Hierzu muß die Datenbank jedoch entsprechend vorbereitet sein. Ansonsten würden die Daten verloren gehen. Für Testzwecke liegt im Verzeichnis plugins/ommysql/ das Skript createDB.sql bei, mit dem die Datenbank Syslog inklusive der beiden Tabellen SystemEvents und SystemEventsProperties angelegt werden.
Dieses kann wie folgt aufgerufen werden.
# mysql <./rsyslog-1.20.1/plugins/ommysql/createDB.sql
Anschließend ist noch der Datenbanknutzer samt Passwort (in dem Beispiel syslog und secret) anzulegen und ihm die Rechte zuzuweisen in die Datenbank schreiben zu dürfen:
mysql> GRANT ALL ON Syslog.* TO syslog@localhost IDENTIFIED BY 'secret';
Damit sind Datenbankseitig die Vorbereitungen abgeschlossen und rsyslogd kann nunmehr konfiguriert werden.
Um in eine MySQL-Datenbank loggen zu können, muß die folgende Direktive in die Konfigurationsdatei eingetragen werden:
$ModLoad MySQL
Dadurch wird zunächst das MySQL-Plugin geladen. Mittels folgendem Eintrag wird rsyslogd angewiesen in die angegebene Datenbank zu schreiben.
*.* >database-server,database-name,database-userid,database-password
Die erste Spalte gibt (wie auch bei syslog) die Datenherkunft an, die zweite Spalte enthält nähere Angaben zur Datenbank. So werden beispielsweise mit
*.* >127.0.0.1,Syslog,syslog,secret
alle Systemmeldungen nach Localhost in die Datenbank Syslog geloggt.
Die Auswertung der Daten kann beispielsweise über das PHP-Skript phpLogCon vorgenommen werden. Dieses ist unter http://www.phplogcon.org erhältlich und wurde gleichfalls von der Firma Adiscon entwickelt.
Zunächst sind die Quelledateien in einem entsprechendem Web-Verzeichnis, zum Beispiel nach /var/www/phplogcon, zu entpacken. Anschließend ist das Installationsskript über die URL
http://localhost/phplogcon/install/install.php
aufzurufen um dort in dem sich öffnenden Formular die entsprechenden Angaben zu setzen. Die Installation kann danach mit Install phpLogCon abgeschlossen werden.
Am Ende der Installation sollte eine Meldung wie folgt ausggeben werden:
Überprüfe Benutzer Eingaben... Erledigt! Erstelle benötigte Tabellen... Erledigt! Füge Daten in die Tabellen ein... Erledigt! Erstelle Ihre Konfigurationsdatei (config.php)... Erledigt! Alle Aufgaben wurden erfolgreich abgeschlossen! Herzlichen Glückwunsch! Sie haben erfolgreich phpLogCon installiert! Eine Dtei namens 'config.php' liegt im Hauptverzeichnis von phpLogCon. In dieser Datei sind alle Informationen, die sie zuvor eingegeben haben, gespeichert! Sie können diese Datei jederzeit Ihren Bedürfnissen anpassen. Wechseln Sie zu 'index.php' im root Verzeichnis um die Arbeit mit phpLogCon zu starten! Vergessen Sie nicht den kompletten Ordner 'install/' zu löschen! Diese Datein können für einen DoS auf Ihr phpLogCon genutzt werden! Nach Löschen des Ordners können Sie zum Index wecheln!.
Nachdem der Ordner install/ wie angegeben gelöscht ist, kann das Skript aufgerufen werden und - sofern bereits vorhanden - die Auswertung der Systemmeldungen über einen beliebigen Browser erfolgen. Praktischerweise versteht und unterstützt das PHP-Skript das anfangs angelegte Datenbankschema.
Abb. 1 Anzeige einer Systemmeldung
Mittels Templates und/oder selbstgeschriebenen Weboberflächen ist es relativ einfach mit rsyslog eine individuelle Analyse der Logdaten vorzunehmen. Sei es um ein eigenes Datenbankschema zu erstellen oder um die Protokollierung der Textdateien zu gestalten.
Nicht unerwähnt sollte jedoch auch bleiben, daß die besseren Analyse- und Zugriffsmöglichkeiten bei der Speicherung der Log-Daten in einer Datenbank zu Lasten der Geschwindigkeit gehen. Außerdem sollte hier bei der Nutzung entsprechender Startskripte beachtet werden, daß MySQL stets vor rsyslog gestartet wird.
Die hier gezeigten Beispiele beziehen sich auf rsyslog in der Version 2.0.2 (letzte stable). Die Entwickler arbeiten derzeit an der kommenden Version 3.x, die derzeit noch nicht abwärtkompatibel ist, sodaß von einer weiteren Darstellung abgesehen wurde.