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.

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.

2 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

Schreibe einen Kommentar