Translations of this page:

Log-Server mit Syslog-NG

Hier das Howto über einen Log-Server, aufbauend auf Syslog-NG.

:!: Fragen, Anmerkungen sowie Verbesserungen sind ausdrücklich erwünscht :!:

12.09.2005 21:13

Allgemeines

Was ist ein Log-Server

Um ein mittleres bis großes heterogenes Netzwerk optimal verwalten zu können, ist es mitunter sinnvoll, einen dedizierten Logging-Server zu installieren, auf dem sämtliche Logging-Nachrichten der wichtigsten Rechner/Server zentral zusammenlaufen. Analyse und Fehlersuche im Netzwerk ist durch eine solche Lösung effektiver, effizienter und außerdem mit erheblichen Zeitersparnissen gegenüber einem dezentralen System verbunden.

Dieser Server empfängt über seine Netzwerkschnittstelle sämtliche von anderen im Intranet befindlichen Servern generierten Statusmeldungen, die sogenannten Log-Files. Diese Informationen werden über einen festgelegten Port versendet und empfangen. Möglich wird dies durch den neuen syslog-Daemon syslog-ng (ng = new generation), der inzwischen Einzug auf vielen UNIX-basierenden Betriebssystemen hält. Dieser umkonfigurierte syslog-ng-Daemon des Log-Servers „lauscht“ auf einem definierten Port auf ankommende UDP-Pakete und leitet diese in eine Fifo-Pufferdatei um. Die Logging-Informationen aus den empfangenen Paketen werden durch ein Template in eine Datenbank-konforme Syntax gebracht und der passende INSERT-Befehl hinzugefügt. Mittels eines Shellscripts, dass als Daemon im Hintergrund läuft, wird die Fifo-Datei kontinuierlich überwacht, direkt ausgelesen, und neue Inhalte sofort an die MySQL-Datenbank weitergeleitet. Auf dem Server läuft weiterhin ein Apache2-Webserver mit PHP4-Unterstützung. Für eine sowohl grafische als auch benutzerfreundliche Ausgabe der in den Tabellen der Datenbank gespeicherten Log-Dateien werden diese per PHP direkt ausgelesen und mittels einem HTML-Frontend übersichtlich ausgegeben. Verschiedene Möglichkeiten der Sortierung und Filterung der gewünschten Datenausgabe sind ebenso gegeben. Um die Log-Nachrichten auf Clientseite an den Server weiter zu leiten, wird auf Linux-Systemen eine Zeile in der entsprechenden syslog-Konfigurationsdatei hinzugefügt, auf Windows-Rechnern ein kleiner Client installiert. Das gesamte System läuft in „Echtzeit“ ab und die hier verwendete Software ist Freeware bzw. steht unter GPL-Lizenz.

Die beschriebene Installation ist nicht allgemein gültig. Je nach verwendeten Distributionen und Programmversionen kann die Einrichtung eines solchen Log-Servers von dieser Anleitung abweichen. Deshalb bitte immer die den verschiedenen Paketen beigelegten Dokumente lesen und gegebenenfalls berücksichtigen.

Verwendete Hardware

  • Desktop-PC Intel Pentium 4 Prozessor 3.0GHz
  • 512MB Arbeitsspeicher
  • 80GB Festplatte
  • Ethernet-Karte 10/100/1000 Mbit

Verwendete Software

⇒ Das Projekt ist scheinbar nach http://code.google.com/p/php-syslog-ng/ umgezogen. Dort gibt es die Version 2.9.3f, die auch einen Web-Installer enthält.

⇒ Die verwendete Software ist Bestandteil der vorliegenden Suse Linux Distribution. Wer auf Aktualität besteht, kann sich die Sourcen selbstverständlich auch auf den oben angegebenen Seiten im Internet herunterladen und „per Hand“ Konfigurieren-Kompilieren-Installieren.

⇒ Nur die beiden Pakete php-syslog-ng und ntsyslog-1.13 wurden nachträglich installiert.

Installation / Konfiguration

Clients

Wie schon anfangs beschrieben handelt es sich hierbei um ein heterogenes Netzwerk mit auf WindowsNT bzw. UNIX basierenden Betriebssystemen. Da beide Seiten unterstützt werden sollen, wird für Windows-Maschinen das kleine Tool ntsyslog-1.13 genutzt, um die Log-Dateien weiterzuleiten. (Alternative: http://www.kiwisyslog.com/). Weiterhin sollte beachtet werden, dass auf Linux-Rechnern mit älteren Distributionen möglicherweise noch kein syslog-ng verwendet wird.

Linux-Systeme

Uhren synchronisieren

  • Aufgrund permanent vorgehender Uhren (2 Stunden) auf den Linux-Systemen, wird die Zeit auf diesen Rechnern mittels „netdate“ über einen Zeitserver im LAN synchronisiert.
  • Eine Anleitung dazu ist unter folgender Adresse zu finden: http://www.robidu.de/linux/trickkiste/zeitsync.html

Achtung: Die Synchronisation auf einen Schlag ist nicht zu empfehlen, da viele Protokolle damit nicht klarkommen. Gerade in Netzen in denen Kerberos verwendet darf man nur beim System(Re)Boot einmalig hart syncronisieren.

Besser ist es generell einen NTP-Client zu verwenden, der die Zeit ständig up2date hält und im Fehlerfall langsam wieder angleicht. Dazu ist ein zentraler NTP-Deamon im Netz zu implementieren mit dem sich dann alle Rechner synchronisieren. In heterogenen Netzen eignet sich ein Windows-Domänencontroller am besten, da sich die Windows-Systeme dort standardmässig ihr Zeit holen (sollten).

Unter *nix-betriebssystemen verwende ich ntp-simple oder openntpd, mehr Info hier: http://www.ntp.org/ntpfaq/NTP-a-faq.htm

Alter syslog-Daemon

  • In Datei /etc/syslog.conf folgenden Eintrag machen um alle Log-Events an den Log-Server weiterzuleiten.
*.* @<IP_LogServer/DNS_NAME>

Neuer syslog-Daemon

  • In Datei /etc/syslog-ng/syslog.conf folgenden Eintrag machen um alle Log-Events an den Log-Server weiterzuleiten.
destination log_udp { udp(„<IP_LogServer/DNS_NAME>“ port(514));};
log { source(src); destination(log_udp);};

oder alternativ über tcp :)

destination log_tcp { tcp(„<IP_LogServer/DNS_NAME>“ port(514));};
log { source(src); destination(log_tcp);};

Windows-Systeme

Die Syslog-Clients auf den windowsbasierten Systemen werden als Dienst installiert. Die Konfiguration der Programme ist recht einfach und bezieht sich im wesentlichen darauf, den Syslog-Server als Ziel einzutragen und die Protokolle auszuwählen, die weitergeleitet werden sollen.

Hier sind 2. Syslog-Clients:

Snare

NTsyslog

Server

Betriebssystem installieren

  • Standard-Installation mit Yast2
  • 2 Partitionen erstellt, / und swap
  • Minimale Software-Installation ausgewählt, weitere Applikationen wie oben beschrieben hinzugefügt.
  • Rechnername: <Rechnername>
  • IP-Adresse: <IP_LogServer>
  • Subnet-Mask: <Subnet_Mask>
  • Domain: <domain>
  • Nameserver1: <nameserver_1>
  • Nameserver2: <nameserver_2>
  • Default Gateway: <default_gw>
  • Integrierte SuSE Firewall deaktiviert, um Komplikationen zu vermeiden. Der Server steht im Intranet, das bereits durch eine Firewall-Lösung geschützt ist.
  • root Passwort festgelegt.
  • Benutzer angelegt: log
  • Das Paket php-syslog-ng-2.8 herunterladen und in einem separaten download-Verzeichnis abgelegt (/usr/local/src/)

php-syslog-ng Paket anpassen

  • Laut /usr/share/doc/packages/syslog-ng/README.SuSE nutzt Suse Linux bereits seit 2003 den neuen syslog-Daemon „syslog-ng“
  • Darauf achten, dass in der Konfigurationsdatei /etc/sysconfig/syslog folgendes eingetragen ist
SYSLOG_DAEMON=“syslog-ng“

um sicher zu stellen, dass der neue syslog-ng Daemon aktiviert ist.

  • Die Konfigurationsdatei für syslog-ng ist /etc/syslog-ng/syslog-ng.conf
  • Der Daemon sollte unter dem Namen „syslog“ laufen.
  • Testen durch den Befehl /etc/init.d/syslog status
  • Erscheint ein „running“ läuft der Dienst.
  • MySQL-Server und Apache2-Server sind zwar installiert, laufen jedoch noch nicht als Daemon im Hintergrund, deshalb die Runlevel für beide Programme konfigurieren um sicher zu stellen das diese beim Neustarten des Servers aktiviert werden.
  • Am einfachsten einzustellen mit dem Suse-Dienstprogramm „yast“
  • Folgende Schritte ausführen:

yast → System > Runlevel-Editor > Expertenmodus → mysql in den Runleveln 2, 3 und 5 starten.

  • Die gleichen Schritte für Apache2 ausführen.
  • Entpacken des php-syslog-ng Paketes mit
tar xvzf phpsyslogng-2.8.tar.gz
  • Ins neue Verzeichnis wechseln
cd phpsyslogng-2.8
  • In config/config.php folgendes anpassen:
define (´DEFAULTLOGTABLE´, ´logs´);
define (´DBUSER´, ´sysloguser´);
define (´DBUSERPW´, ´<password>´);
define (´DBADMIN´, ´syslogadmin´);
define (´DBADMINPW´, ´<password>´);
define (´DBNAME´, ´syslog´);
define (´DBHOST´, ´localhost´);
deine (´DBPORT´, ´3306´);
define(´URL´, ´http://<IP_LogServer>/´);
  • Den Inhalt von scripts/syslog.conf der Datei

/etc/syslog-ng/syslog-ng.conf anfügen und gegebenenfalls editieren:

source src {
internal();
unix-dgram("/dev/log");
};
source net {
udp(ip("0.0.0.0") port(514));
};
destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG',
'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$PROGRAM', '$MSG' );\n")
template-escape(yes));
};
log {
source(net);
destination(d_mysql);
};
  • /etc/init.d/syslog restart ausführen um Änderungen zu übernehmen.
  • Die Datei dbsetup.sql umlenken, so dass in der Datenbank die richtigen Tabellen und User angelegt werden.
  • Wichtig: Passwörter in der Datei anpassen!
  • Damit werden 4 User angelegt: admin (password: admin), sysloguser, syslogfeeder und syslogadmin.
INSERT INTO user (Host, User, Password) VALUES ('localhost','sysloguser',
password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','sysloguser');
INSERT INTO user (Host, User, Password) VALUES ('localhost','syslogfeeder',
password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','syslogfeeder');
INSERT INTO user (Host, User, Password) VALUES
('localhost','syslogadmin',password('PW_HERE'));
INSERT INTO db (Host, Db, User) VALUES ('localhost','syslog','syslogadmin');
mysql –u root –p < dbsetup.sql
  • sollte noch kein Passwort für MySQL - root angelegt worden sein, bitte nachholen!

sqlsyslog Daemon erstellen

  • Fifo-Datei mysql.pipe anlegen mit dem Befehl
mkfifo /var/log/mysql.pipe
  • Script aus Dokumentation von php-syslog-ng-2.51 auf http://www.vermeer.org/docs/1 übernommen.
  • Diese leitet die Informationen aus der Puffer-Datei im Hintergrund an die Datenbank weiter.
  • Bitte Änderungen berücksichtigen (User/Passwort/Pfade).
#!/bin/bash
#
# sqlsyslogd This is a daemon that takes syslog-ng input and pipe it into
# a MySQL database.
#
# chkconfig: 2345 92 10
# description: sqlsyslogd bridges syslog-ng and mysql.
# author: Josh Kuo Thu 2004/08/12 13:21:56 PDT
# Unter Suse nicht verfügbar, nicht relevant.
#. /etc/rc.d/init.d/functions
case "$1" in
start)
if [ -x /var/log/mysql.pipe ]; then
mkfifo /var/log/mysql.pipe
else
# if the service is already running, do not start another one
PIDS=`pidofproc mysql`
if [ "$PIDS" ]; then
printf "sqlsyslogd is already running.\n"
exit 1
fi
mysql -u syslogfeeder --password=<password> syslog < /var/log/mysql.pipe
&
fi
;;
stop )
killproc mysql
;;
*)
printf "Usage: sqlsyslogd {start|stop}\n"
exit 1;
esac
exit 0;
  • Die nötigen Rechte mit chmod +x sqlsyslogd vergeben.
  • Damit das Script bei Systemstart geladen wird, wird es für Runlevel 3 und 5 konfiguriert.
  • Kopieren des Scripts in /etc/init.d/
  • Dann Wie oben beschrieben verfahren.
  • Damit sollte der Daemon bei Neustart des Systems im Hintergrund laufen.
  • Mit ps -ef |grep sqlsyslogd überprüfen
  • Der FirstInFirstOut Puffer kann testweise auf seine Funktionalität überprüft werden:
cat /var/log/mysql.pipe
  • Ob Pakete von den Clients über das Netzwerk geschickt werden, ist mit dem Programm „tcpdump“ sehr einfach einzusehen.
  • Es sollten z.B. nachfolgend eingefügte Zeilen auftauchen sobald ein Ereigniss auf Clientseite auftritt:
16:29:31.420429 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 49
16:29:31.420543 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 30
16:29:31.429269 IP <IP_client>.syslog > <LogServer>.syslog: UDP, length: 73
  • Es ist klar erkennbar, dass der Rechner mit der IP <IP_Client> UDP-Pakete an den Rechner <LogServer> sendet, unseren Log-Server.

Web-Frontend aufsetzen

  • Folgende Dateien und Verzeichnisse nach /srv/www/htdocs kopieren:
config/ css/ includes/ scripts/ index.php
  • Die Web-Oberfläche des Log-Servers ist ab sofort zu erreichen unter http:<IP_LogServer>/ * Für Nutzung von phpMyAdmin die Datei /src/www/htdocs/phpMyAdmin/config.inc.php folgendermaßen anpassen: <code>$cfg[´PmaAbsoluteUri´] = ´http:<IP_LogServer>/phpMyAdmin/´;</code>
  • Das Passwort für root eintragen.
  • phpMyAdmin ist zu erreichen unter http:<IP_LogServer>/phpMyAdmin/ * Damit ist eine konfortable Verwaltung der Datenbank gegeben. ==== Pflege der Datenbank ==== * Damit die Datenbank nicht unendlich viel Platz belegt, wird sie durch ein script gesichert und gleichzeitig alte Einträge gelöscht. * In Datei /srv/www/htdocs/scripts/logrotate.php den Pfad berichtigen: <code>$APP_ROOT = '/srv/www/htdocs';</code> * Diese Datei in den Ordner /etc/cron.weekly/ kopieren, um das Script wöchentlich auszuführen. ====== Einige wichtige Kommandos ====== ===== MySQL ===== ^ Aktion ^ Befehl ^ | Passwort festlegen | mysqladmin -u root password <neues_passwort> | | Einloggen | mysql –u <user> -p| | Ausloggen | exit | | Daemon steuern | etc/init.d/mysql{start|stop|status|reload|restart|try-restart|force-reload} | | Datenbank auswählen | use <database>; | | Tabellen anzeigen | show tables; | | Alle Infos einer Tabelle ausgeben | SELECT * FROM <tabelle>; | ===== Apache2 ===== ^ Aktion ^ Befehl ^ | Wichtige Konfigurationsdatei | /etc/apache2/httpd.conf | | Daemon steuern | etc/init.d/apache2{start|stop|status|restart|tryrestart}| ===== Web-Frontend ===== * Beim Hinzufügen eines neuen Hosts beachten, dass der Cache aktualisiert werden muss, um die neue Maschine auch auf der Search-Seite angezeigt zu bekommen. * Dazu auf das Feld „Config“ drücken, und auf der folgenden Seite den Button „Reload Cache“ anklicken. * Wichtig: Mit den nötigen Rechten einloggen!
nagios/howtos/syslog.txt · Zuletzt geändert: 2011/06/06 14:18 von p_tosh
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0