Zentraler Logserver mit rsyslog, MariaDB und rsyslog-webui

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.

12 Gedanken zu „Zentraler Logserver mit rsyslog, MariaDB und rsyslog-webui“

    • 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;
      }

      Antworten
    • # 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.

      Antworten
  1. 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.

    Antworten

Schreibe einen Kommentar