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. (Wird aber leider seit 3 Jahren nicht mehr maintained.)
27.12.2023 - Anleitung aktualisiert (Debian 12 LEMP Server mit PHP 8.0) 17.12.2023 - Severity Overview Bug mit PHP 8.1 und 8.2 28.07.2023 - Anleitung aktualisiert (Debian 12) 21.11.2022 - Debian 11 mit PHP 7
Mein Setup: LEMP Server mit Debian 12, Nginx 1.22.1, PHP 8.0.30 und MariaDB 10.11.4
Nur mit PHP 8.0 funktioniert das Webinterface korrekt.
LEMP Server installieren
Debian Bookworm bietet nur eine PHP 8.2 Version in den offiziellen Repositories an. Es gibt aber Pakete direkt vom Maintainer der Debian PHP Pakete, Ondřej Surý.
Schlüssel und Repository hinzufügen.
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg apt install apt-transport-https lsb-release ca-certificates sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' apt update
Nginx, PHP 8.0 und MariaDB installieren.
apt install nginx php8.0 php8.0-fpm php8.0-mysql mariadb-server
PHP Datum und Zeitzone in der php.ini auf Europe/Berlin setzen.
sed -i -e "s/^;date.timezone =/date.timezone = Europe\/Berlin/" /etc/php/8.0/fpm/php.ini sed -i -e "s/^;date.timezone =/date.timezone = Europe\/Berlin/" /etc/php/8.0/cli/php.ini
PHP in der /etc/nginx/sites-enabled/default aktivieren.
# Add index.php to the list if you are using PHP 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.0-fpm.sock; }
Nginx und fpm neu starten.
systemctl restart nginx php8.0-fpm
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.
bug
Die waagerechte farbige Severity Übersicht bleibt leer. Mit PHP 8.1 und 8.2, Apache2 und Nginx. Mit PHP 8.0 funktioniert es.
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;
}
Die Filterung in Webgui scheint nicht mehr zu gehen. Liegt das eventuell an PHP8.2?
# mit PHP 8.2.7
Die Filterung in der linken Severity Spalte funktioniert noch einwandfrei. (add ‘ERROR’ to filterset)
Oben der waagerechte farbige Severity Balken ist bei mir leer, keine Einträge vorhanden.
# PHP mit 8.1.26
Die Filterung in der linken Severity Spalte funktioniert noch einwandfrei. (add ‘ERROR’ to filterset)
Oben der waagerechte farbige Severity Balken ist bei mir leer, keine Einträge vorhanden.
Hallo mb-press,
nutze auch die php8.2.7 Version. Als Web-Server habe ich Apache 2.4.57 laufen. Mit nginx hatte ich trotz Lösung im Kommentar kein Erfolg gehabt. Kann es dann vielelicht am Webserver Apache2 liegen? Auch die Suchfunktion funktioniert nicht, was bei den vielen Einträgen hilfreich sein kann.
Hab zum testen mal Apache2 installiert, keine Verbesserung. Daran wird es nicht liegen.
Das Hauptproblem ist das rsyslog-webui seit 3 Jahren nicht mehr maintained wird.
Hab mal schnell einen Debian 11 Container aufgesetzt. Debian 11.8 mit Nginx und PHP 7.4
Damit sieht alles gut aus, wäre aber ein Schritt in die falsche Richtung.
Ok, dann weis ich bescheid. Das stimmt, da php7.4 und niedriger nicht mehr supportet werden und unsicher sind. Dann hoffen wir, dass eine neue, angepasste gui Version kommen wird.
Mit PHP 8.0 läuft es. Hab die Anleitung aktualisiert.
Hallo mb-press,
ja, jetzt läuft es auch mit nginx. Super, vielen Dank fürs rausfinden, testen und aktualisieren der Anleitung.
Eine schöne Anleitung, funktioniert einwandfrei. Aber der Link zum Webinterface muss auf die index.php verweisen, damit kein 403 Forbidden-Fehler erscheint: http://rsyslog-server-ip/rsyslog-webui/index.php
Eigentlich nicht.
Du musst nur in der nginx default die index.php in den index mit aufnehmen.