Loghost mit Syslog-ng, MySQL und Webinterface

Aus AdminWiki

Wechseln zu: Navigation, Suche

Diese Anleitung beschreibt die Installation und das Setup eines Loghosts mit MySQL Datenbank und Webinterface unter Linux ( Debian Etch )


Voraussetzungen:

- Erfahrung mit Linux
- Umgang mit einer Linux-Shell
- Erfahrung mit der Installation von Paketen/Software
- Erfahrung im Umgang mit Editoren in einer Shell
- Erfahrungen im Umgang mit Konfigurations-Dateien
- Kenntnisse im Netzwerkbereich


Inhaltsverzeichnis

Einleitung

Die Administration von vielen Servern ist nicht immer einfach. Deshalb gibt es einige Tools die einem die Arbeit, wenn richtig konfiguriert, erleichtern sollen. Dabei ist nicht nur auf ein reibungslosen Betrieb zu achten sondern auch auf die Sicherheit jedes einzelnen Servers. Zum Glück bringt Linux (in den allermeisten Fällen) die entsprechenden Mittel schon von Haus aus mit. In diesem Wiki-Artikel geht es um die Log-Dateien und deren Einträge. Wenn man sich um sehr viele kümmern muss, wäre es ein Riesen Aufwand, die Log's eines jeden Servers zu prüfen und/oder zu überwachen. Ich möchte hier erklären wie man einen Loghost mit dem Programm "syslog-ng" aufsetzt und so konfiguriert, dass die Syslog's eines (jeden) Servers nicht nur lokal sondern auch auf einem Zentralen Server gespeichert werden. Da dies den Aufwand zwar minimiert, jedoch die Logs immer noch einzeln und von Hand geprüft werden müssen, beschreibe ich außerdem wie man die Log-Einträge noch in einer MySQL Datenbank speichert und mit einem von mir geschriebenem Webinterface in kürzester Zeit auf Unregelmäßigkeiten prüfen kann.

Installation

syslog-ng

Das Paket "syslog-ng" installiert man unter Debian z.Bsp. mit

apt-get install syslog-ng

Es ist wahrscheinlich das bereits ein anderer Log-Dienst installiert ist mit dem syslog-ng "kollidiert". Deshalb werden die betreffenden Pakete deinstalliert und von syslog-ng ersetzt. Keine Panik, das ist normal und muss so sein ;)

Apache, PHP und MySQL

Falls auf dem zukünftigen Loghost noch nicht vorhanden, wird jetzt ein Webserver ( Apache ) mit PHP und MySQL installiert. Den Webserver mit PHP benötigen wir für das Webinterface. Die MySQL Datenbank wird dann für das Speichern der Log-Einträge genutzt.

apt-get install apache2 php5-cli libapache2-mod-php5 mysql-server-5.1 mysql-client-5.1 php5-mysql php5-gd

php5-cli wird später für die Ausführung von PHP-Dateien benötigt die per CronJob aufgerufen werden.

Log@min Webinterface

Nach einiger Recherche und Tests von verschiedenen Webinterfaces, von denen leider kein einziges intuitiv, schnell und einfach genug war um damit "gut arbeiten" zu können,
hatte ich mich dazu entschlossen mir ein eigenes Webinterface zu bauen.


Featurelist Log@min / Logmin

- Einfache Konfiguration

- Backup und Bereinigung per Cronjob

- Blacklisting von unerwünschten Einträgen

- einfache Statistik

- "LiveLog"-Funktion zum Live anzeigen der aktuellsten Logeinträge per AJAX

Diese Version sollte nicht mehr benutzt werden!

UPDATE Version 1.1

Änderungen in v.1.1

- Fehler gefixt in den cron php files

- Statistik verbessert

- Link-Fehler in den Messages gefixt

- kleinere Fehler behoben

Diese Version sollte nicht mehr benutzt werden!

Update Version 1.2 (aktuellste Version)

Änderungen in v.1.2

- Datenbankabfragen erheblich optimiert

- Quelltext gesäubert

Download von meiner Homepage (v.1.2)

Konfiguration

Client(s): syslog.conf

Die Datei syslog.conf liegt standardmäßig unter

/etc/syslog.conf

In dieser Datei wird eingestellt was der Syslog-Dienst (syslogd) wie loggen soll. Die Standardeinstellungen können ohne weiteres beibehalten werden. Die einzige Änderung die wir vornehmen müssen ist eine Zeile, in der wir dem Syslog-Dienst mitteilen, welcher Server von nun an der Loghost sein wird.

z.Bsp.:

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log
uucp.*                          /var/log/uucp.log
auth,authpriv.*,*.crit,*.alert                 @loghost

Diese fett geschriebene Zeile im oberen Teil der Datei syslog.conf eintragen und @loghost durch den Namen oder die IP des Loghosts ersetzen. Ich möchte hier nicht näher ins Detail gehen, was diese Zeile nun im einzelnen Bedeutet, deshalb nur der Hinweis, das eine Google Suche nach "syslog.conf" entsprechende Resultate liefern sollte!

Die Änderungen werden nun gespeichert und der Syslog-Dienst muss neu gestartet werden:

/etc/init.d/sysklogd restart

Diese Änderungen sollten auf jedem Server vorgenommen werden, von denen die Logdateien zum Loghost übermittelt werden sollen!


Loghost: MySQL

Damit der Syslog-Dienst die Log-Einträge in die Datenbank schreiben kann, müssen wir diese vorher anlegen:

Das kann man entweder per phpmyadmin oder auf der Shell direkt machen.

Logmin.sql

Loghost: syslog-ng.conf

Die Datei syslog-ng.conf welche sich im Verzeichnis /etc/syslog-ng/ befinden sollte muss nun noch angepasst werden.

Als funktionierendes Beispiel kann folgende Konfigurations-Datei verwendet werden.

syslog-ng.conf

Der folgende Abschnitt ist für das loggen in die MySQL Datenbank verantwortlich:

destination d_logmin {
program("/usr/bin/mysql -ulogmin -plogmin logmin" 
template("INSERT INTO logs (host, facility, priority, level,  datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n")
template-escape(yes));
};
log {
source(s_all);
destination(d_logmin);
};

Nicht vergessen die Benutzerdaten und den Datenbankname zu ändern (2.Zeile) und den syslog Dienst neu zu starten

/etc/init.d/syslog-ng restart  (als root)

Loghost: Logmin

Logmin einfach auf den Server kopieren/hoch laden/entpacken/etc auf dem der Loghost Eingerichtet wurde. Im Dokumenten-Verzeichnis des Webservers einen Ordner "logmin" o.ä. anlegen und das Archiv entpacken.

Konfiguration:

Logmin ist relativ einfach zu konfigurieren.

Dafür muss nur die Datei config.inc.php im Editor Ihrer wahl geöffnet werden.

Die üblichen Verbindungseinstellungen für die MySQL Datenbank vornehmen und, falls abweichend, die Tabellen-Namen anpassen.

Dazu noch eine passende E-Mail-Adresse und das gröbste ist geschafft.

Die anderen Werte können so belassen werden, können aber auch individuell angepasst werden.

Hier eine kurze Erklärung:

[make_links] : prüft in Log-Einträgen auf evtl vorhandene URL's. Bei 'y' als Wert, werden aus den URL's Hyperlinks "generiert". Bei 'n' logischerweise nicht

[livelog_ent] : gibt die Anzahl der Datensätze an, die auf der "LiveLog"-Seite angezeigt werden. Es muss ein nummerischer Wert sein!

[eps] : EntrysPerSite, damit kann ein Standard-Wert festgelegt werden, wie viel Einträge pro Seite angezeigt werden sollen.

[maxp] : MaximumPages, gibt an wie viel Seiten maximal in der Navigation angezeigt werden sollen. Je nach wert ändern sich dementsprechend die Einträge pro Seite!

[ttp] : TimeToBackup, gibt an nach wie viel Tagen Einträge in die Backup-Tabelle verschoben werden sollen. (Funktioniert nur wenn cron_clean.php und/oder cron_cache.php als cronjob laufen.)

[ttd] : TimeToDelete, gibt an nach wie viel Tagen Einträge aus der Backup-Tabelle gelöscht werden sollen. (Funktioniert nur wenn cron_clean.php und/oder cron_cache.php als cronjob laufen.)

[dwt] : DeleteWarningTime, gibt an wie viel Tage vor dem endgültigem Löschen der Daten aus der Backup-Tabelle eine Liste erstellt werden soll und per Mail an den Administrator geschickt wird mit den Daten die gelöscht werden.

Loghost: Cronjobs

Die Verwendung von CronJobs ist erforderlich damit Logmin ordnungsgemäß funktionieren kann.

Als Richtlinie sollten die Dateien cron_cache.php und cron_clean.php ca alle 1 Std ausgeführt werden. Bei sehr vielen Log-Einträgen sollten Sie die Zeitabstände schrittweise verringern, bei sehr wenigen Einträgen reicht es unter Umständen auch wenn die Dateien nur einmal am Tag ausgeführt werden.

Sie sollten jedoch dabei beachten, das die Datei cron_clean.php VOR der Datei cron_cache.php aufgerufen wird!

Fertig

Nun sind wir fertig und es sollte alles funktionieren.

Persönliche Werkzeuge