Erweitertes Logging mit rsyslog auf Debian Etch und phpLogcon zum Anzeigen der Log-Dateien

Jeder von Euch kennt wahrscheinlich das Problem beim Lesen und Suchen in Log-Dateien. Wenn man dann noch mehr als eine Maschine hat, wird es noch schlimmer. Diese Anleitung veranschaulicht, wie man rsyslog auf Debian Etch installiert und konfiguriert, sie kann jedoch auch auf jede andere Distribution angewandt werden.

Auszug von der rsyslog Seite:

"Rsyslog, the enhanced syslogd for Linux and Unix.
Rsyslog is an enhanced multi-threaded syslogd supporting, among others, MySQL, syslog/tcp, RFC 3195, permitted sender lists, filtering on any message part, and fine grain output format control. It is quite compatible to stock sysklogd and can be used as a drop-in replacement. Its advanced features make it suitable for enterprise-class, encryption protected syslog relay chains while at the same time being very easy to setup for the novice user. An optional web interface - phpLogCon - can be used to visualize all data online."
In dieser Anleitung werden wir rsyslog aus den Quellen erstellen und die notwendigen Konfigurationsdateien schreiben.

Schritt 1: Sorge dafür, dass die notwendigen Tools installiert sind

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev linux-kernel-headers lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ mysql-server mysql-client libmysqlclient15-dev

Richte als Nächstes ein Passwort für Deinen mysql Root-Benutzer ein:

mysqladmin -u root password your_mysqlroot_password

Nun können wir die rsyslog Datenbank erstellen:

mysqladmin -u root -p create rsyslog

Als Nächstes starten wir die mysql Kommandozeile und erstellen den rsyslog Benutzer:

GRANT SELECT, INSERT, UPDATE, DELETE ON rsyslog.* TO 'rsyslog_user'@'localhost' IDENTIFIED BY 'rsyslog_user_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'rsyslog_user'@'localhost.localdomain' IDENTIFIED BY 'rsyslog_user_password';
FLUSH PRIVILEGES;

Wie Dir vielleicht aufgefallen ist, importieren wir keine Tabellen in die Datenbank. phpLogCon wird das für uns übernehmen.

Schritt 2: Die rsyslog Quelle beziehen und rsyslog erstellen

Die Quelle beziehen:

cd /tmp
wget http://www.rsyslog.com/Downloads-req-getit-lid-58.phtml

Lass uns nun rsyslog erstellen und installieren:

tar xvzf rsyslog-1.9.6.tar.gz
cd rsyslog-1.9.6
./configure
make
make install

Da rsyslog keine Konfigurationsbeispiele (und ~Dateien hat), stelle ich Beispiele zur Verfügung. Diese Beispiele sind alle lediglich Standardkonfigurationen. Verwende die Dokumentation, die von rsyslog breitgestellt wird, um die Konfiguration an Deine Wünsche anzupassen.

Zuerst die rsyslog Konfigurationsdatei /etc/rsyslog.conf.

vi /etc/rsyslog.conf

Kopiere einfach die Inhalte unten und füge sie ein:

Vergiss nicht folgende Zeile:
*.*       >127.0.0.1,rsyslog,rsyslog_user,rsyslog_user_password
mit dem Benutzernamen und Passwort, das Du zuvor festgelegt hast, zu ändern.
#  /etc/rsyslog.conf    Configuration file for rsyslogd.
# # For more information see # /usr/share/doc/rsyslog/html/rsyslog_conf.html # # First some standard logfiles. Log by facility. # $ModLoad MySQL *.* >127.0.0.1,rsyslog,rsyslog_user,rsyslog_user_password 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 # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Logging for INN news system # news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice # # Some `catch-all' logfiles. # *.=debug; auth,authpriv.none; news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn; auth,authpriv.none; cron,daemon.none; mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg * # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*; # news.=crit;news.=err;news.=notice; # *.=debug;*.=info; # *.=notice;*.=warn /dev/tty8 # The named pipe /dev/xconsole is for the `xconsole' utility. To use it, # you must invoke `xconsole' with the `-file' option: # # $ xconsole -file /dev/xconsole [...] # # NOTE: adjust the list below, or you'll go crazy if you have a reasonably # busy site.. # daemon.*;mail.*; news.err; *.=debug;*.=info; *.=notice;*.=warn |/dev/xconsole # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/
Als Nächstes ist das Startup Skript /etc/init.d/rsyslog dran:

vi /etc/init.d/rsyslog

Kopiere einfach die untenstehenden Inhalte und füge sie ein:
#! /bin/sh
### BEGIN INIT INFO # Provides: syslog # Required-Start: $local_fs $time # Required-Stop: $local_fs $time # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: enhanced syslogd # Description: Rsyslog is an enhanced multi-threaded syslogd. # It is quite compatible to stock sysklogd and can be # used as a drop-in replacement. ### END INIT INFO # Author: Michael Biebl <biebl@debian.org> # # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="enhanced syslogd" NAME=rsyslog RSYSLOGD=rsyslogd RSYSLOGD_BIN=/usr/local/sbin/rsyslogd RSYSLOGD_OPTIONS="-m 0" RSYSLOGD_PIDFILE=/var/run/rsyslogd.pid RKLOGD=rklogd RKLOGD_BIN=/usr/local/sbin/rklogd RKLOGD_OPTIONS="-2" RKLOGD_PIDFILE=/var/run/rklogd.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$RSYSLOGD_BIN" ] || exit 0 [ -x "$RKLOGD_BIN" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { DAEMON=$1 DAEMON_ARGS=$2 PIDFILE=$3 # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2 } # # Function that stops the daemon/service # do_stop() { NAME=$1 PIDFILE=$2 # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" #rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { NAME=$1 PIDFILE=$2 start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME return 0 } create_xconsole() { if [ ! -e /dev/xconsole ] then mknod -m 640 /dev/xconsole p fi } case "$1" in start) log_daemon_msg "Starting $DESC" "$RSYSLOGD" create_xconsole do_start "$RSYSLOGD_BIN" "$RSYSLOGD_OPTIONS" "$RSYSLOGD_PIDFILE" case "$?" in # 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac log_progress_msg "$RKLOGD" do_start "$RKLOGD_BIN" "$RKLOGD_OPTIONS" "$RKLOGD_PIDFILE" case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Stopping $DESC" "$RKLOGD" do_stop "$RKLOGD" "$RKLOGD_PIDFILE" case "$?" in # 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac log_progress_msg "$RSYSLOGD" do_stop "$RSYSLOGD" "$RSYSLOGD_PIDFILE" case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; reload|force-reload) log_daemon_msg "Reloading $DESC" "$RSYSLOGD" do_reload "$RSYSLOGD" "$RSYSLOGD_PIDFILE" log_end_msg $? ;; restart) $0 stop $0 start ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 exit 3 ;; esac :
Als Nächstes erstellen wir eine Standardkonfiguration in /etc/default/rsyslogd:

vi /etc/default/rsyslog

Kopiere einfach die untenstehenden Inhalte und füge sie ein:
# Options to rsyslogd
# -m 0 disables 'MARK' messages. # -r enables logging from remote machines # -x disables DNS lookups on messages recieved with -r # See rsyslogd(8) for more details RSYSLOGD_OPTIONS="-m 0" # Options to rklogd # -2 prints all kernel oops messages twice; once for klogd to decode, and # once for processing with 'ksymoops' # -x disables all klogd processing of oops messages entirely # See rklogd(8) for more details RKLOGD_OPTIONS="-x"
Als Nächstes erstellen wir das Verzeichnis /etc/rsyslog.d - dies wird für weitere Konfigurationsoptionen benötigt (in dieser Anleitung nicht behandelt).

mkdir /etc/rsyslog.d

Nun haben wir alle Konfigurationsdateien, müssen nun aber sicher stellen, dass rsyslog beim Hochfahren im richtigen Moment gestartet wird. Bitte beachte, dass rsyslog mit klogd und sysklogd nicht kompatibel ist, die standardmäßig installiert sind. Diesen müssen deaktiviert oder entfernt werden. In dieser Anleitung werde ich sie deaktivieren.

Führe folgende Befehle aus um rsyslogd zum richtigen Zeitpunkt während des Hochfahrens zu starten und um klogd und sysklogd zu deaktivieren.

ln -s /etc/init.d/rsyslog /etc/rc3.d/S10rsyslog
mv /etc/rc3.d/S10sysklogd /etc/rc3.d/_S10sysklogd
mv /etc/rc3.d/S11klogd /etc/rec3.d/_S11klogd

Dies beendet das Erstellen und die Konfiguration.

Schritt 3: Installation von Apache2 und PHP5

Wenn Du Apache2 und PHP5 bereits installiert hast, kannst Du diesen Schritt überspringen.

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Folgende Frage wird Dir gestellt:

Continue installing libc-client without Maildir support? <-- Yes

Schritt 4: phpLogCon beziehen und phpLogCon installieren

cd /tmp
wget http://www.phplogcon.org/Downloads-req-getit-lid-6.phtml

Als Nächstes erstellen wir das Verzeichnis für phpLogCon und aktivieren es inApache2:

tar xvzf phplogcon-1.2.3.tar.gz
mkdir /var/www/phplogcon
cp -R phplogcon-1.2.3/* /var/www/phplogcon

Konfiguriere apache2 für phpLogcon:

vi /etc/apache2/sites-enabled/your_site_conf

Füge folgende Alias hinzu um phplogcon zu aktivieren:

Alias /phplogcon "/var/www/phplogcon"

Füge die obige Zeile vor </virtualhost> ein oder wenn Du bereits andere Aliases definiert hast, dann füge sie dort ein.

Beachte: Wenn /var/www Dein Server Root ist, dann musst Du kein Alias erstellen.

Starte apache2 neu um die Änderungen zu übernehmen.

/etc/init.d/apache2 force-reload


Schritt 5: Konfiguriere phpLogCon und installiere die Tabellen in der rsyslog Datenbank

Richte Deinen Browser auf http://yourdomain.tld/phplogcon und folge den Schritten auf dem Screen. Nachdem der Installationswizard beendet wurde, wird die Datenbank mit allen benötigten Tabellen gefüllt und ein administrativer Benutzer wird angelegt.

Lösche das Installationsverzeichnis um phpLogCon zu aktivieren:

rm -R /var/www/phplogcon/install


Schritt 6: Starte rsyslog

Führe folgende Befehle aus um rsyslog zu starten und klogd und sysklogd anzuhalten:

/etc/init.d/sysklogd stop
/etc/init.d/klogd stop
/etc/init.d/rsyslog start

Schritt 7: rsyslog genießen

Richte Deinen Browser auf http://yourdomain.tld/phplogcon und melde Dich mit dem Benutzernamen und Passwort an, das Du im Installationswizard festgelegt hast. Du müsstest nun etwas in der Art sehen:

phpLogCon Screenshot

2 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: DennisO

Ach, der doofe "CODE" hats doof dargesteltl hab das || mal rausgelassen und nen return einfach eine Zeile tiefer gesetzt sowie es laut Bash-Manuals auch muss, daher funktioniert es (bis jetzt) :)


Von: DennisO

Scheinbar nicht funktionsfähig, habe es mehrfach ausgeführt und auf 2 verschiedenen System getestet:

Debian 4.0

$ > uname -a
$ > Linux server02.dennisoderwald.de 2.6.18-5-686-bigmem #1 SMP Mon Dec 24 17:55:42 UTC 2007 i686 GNU/Linux

/etc/init.d/rsyslog: line 52: syntax error near unexpected token `||'
/etc/init.d/rsyslog: line 52: ` || return 1'