Wer einen kleinen Logserver mit einfachem Webinterface für nur ein paar loggende Clients sucht, ist vielleicht mit rsyslog und rsyslog-webui gut bedient.
Ist schnell aufgesetzt und benötigt wenig Ressourcen.
28.07.2023 - Anleitung aktualisiert (Debian 12)
Voraussetzung: ein installierter LAMP oder LEMP Server
Mein Setup: Debian 12 mit Nginx 1.22.1, PHP 8.2.7 und MariaDB 10.11.3
Installation
rsyslog mit MySQL-Unterstützung installieren
apt install -y rsyslog rsyslog-mysql git
Bei der Abfrage, die Datenbank für rsyslog-mysql mit dbconfig-common zu konfigurieren, mit Yes antworten und das Passwort einfach generieren lassen.
Der benötigte Eintrag mit den Datenbankinformationen wird in die /etc/rsyslog.d/mysql.conf geschrieben.
### Configuration file for rsyslog-mysql ### Changes are preserved module (load="ommysql") *.* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="Ym1tCn3O41qb")
rsyslog-webui installieren
git clone https://github.com/Tiny-Lama/rsyslog-webui.git /var/www/html/rsyslog-webui cd /var/www/html/rsyslog-webui cp config-template.php config.php
Alle Einstellungen in der config.php anpassen!
<?php date_default_timezone_set( 'Europe/Berlin' ); // Mysql syslog database config $mysql_server = 'localhost'; $mysql_database = 'Syslog'; $mysql_user = 'rsyslog'; $mysql_password = 'Ym1tCn3O41qb'; // Site Settings $site_name = 'System Logs'; // Database Settings $keep_logs_for_days = 90; ?>
In der maintenance/db-maintenance.php muss noch der Datenbankname angepasst werden. (default ist rsyslogdb, auf Syslog ändern)
$query = "DELETE FROM Syslog.SystemEvents WHERE ReceivedAt < CURDATE() - INTERVAL ".$keep_logs_for_days." day";
cronjob erstellen
Damit alte Logeinträge auch gelöscht werden, einen cronjob für das Aufräumen der Datenbank anlegen.
1 0 * * * cd /var/www/html/rsyslog-webui/maintenance; /usr/bin/php ./db-maintenance.php
rsyslog Server konfigurieren
Damit externe Logfiles angenommen werden, in der /etc/rsyslog.conf den UDP Empfang aktivieren.
# provides UDP syslog reception module(load="imudp") input(type="imudp" port="514")
rsyslog neu starten
systemctl restart rsyslog.service
rsyslog Client konfigurieren
Damit ein Linux Client Logfiles an einen externen Server sendet, in der /etc/rsyslog.conf das Senden über UDP aktivieren.
############### #### RULES #### ############### # log to remote syslog-server, UDP *.* @rsyslog-server-ip
rsyslog neu starten.
systemctl restart rsyslog
Zum Testen kann auf dem Client ein Logeintrag erstellt werden, der auch sofort auf dem Server ankommen sollte.
logger "Test from logclient"
rsyslog-webui
Das Webinterface kann jetzt über http://rsyslog-server-ip/rsyslog-webui aufgerufen werden.
Klickt man oben in den farbigen Severity Balken, wird automatisch der entsprechende Filter gesetzt.
Macht man einen Rechtsklick auf einen Eintrag, kann mit diesem direkt ein Filter erstellt werden.
Wie muss den der Nginx konfiguriert werden? Ich bekomme die Gui nicht zum laufen…
Sieht bei mir so aus.
In der /etc/nginx/sites-available/default
index index.php index.html index.htm index.nginx-debian.html;
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}