Syslog-Server Docker Stack mit Webinterface für Log-Analyse

Aus Laub-Home Wiki

Dieser Artikel beschreibt den Aufbau eines containerisierten Syslog-Servers als Docker Stack mit Webinterface zur Log-Analyse. Das Setup basiert auf syslog-ng, einer MariaDB-Datenbank zur Speicherung der Logdaten und dem PHP-basierten LogAnalyzer als Weboberfläche. Zusätzlich sorgt ein Cleanup-Container für die automatische Datenbereinigung.

Ziel ist eine zentrale, leicht erweiterbare Logging-Plattform zur Erfassung, Auswertung und Visualisierung von Syslog-Nachrichten – z. B. von Netzwerkgeräten oder Smart-Home-Komponenten wie Shelly. Und das alles super vereinfacht mithilfe von Docker-Containern, die als gemeinsames ''docker-compose''-Projektmiteinander verbunden sind – für schnellen Einsatz, klare Struktur und einfache Wartung.

Voraussetzungen und Setup

Systemvoraussetzungen

Um den Syslog-Server Docker Stack mit Webinterface erfolgreich einzurichten, werden folgende Voraussetzungen benötigt:

  • Ein Linux-Server oder eine VM mit Docker und Docker Compose
  • Empfohlen: mindestens 2 CPU-Kerne und 2 GB RAM
  • Netzwerkzugriff auf Syslog-Quellen (z. B. Shelly-Geräte, Server, Netzwerkhardware)
  • Internetzugang zum Herunterladen der Container und Images

Software-Voraussetzungen

  • Docker (mind. Version 20.x)
  • Docker Compose (mind. Version 1.29 oder Compose Plugin)
  • Optional: Git, um das Projekt aus einem Repository zu klonen

Projektstruktur (Überblick)

Das Projekt besteht aus mehreren Docker-Containern:

  • syslog-ng: empfängt UDP/TCP-Syslog-Nachrichten und schreibt in die Datenbank
  • mariadb: speichert alle Logs strukturiert in einer Datenbanktabelle
  • loganalyzer: PHP-basierte Weboberfläche zur Analyse der Logs
  • dbcleanup: optionaler Wartungscontainer zur regelmäßigen Datenbankbereinigung

Die Kommunikation erfolgt über ein gemeinsames Docker-Netzwerk und wird zentral über eine docker-compose.yml gesteuert.

Installation und Konfiguration

1. Projekt klonen oder bereitstellen

Falls du das Projekt dem Git-Repository beziehst:

git clone https://github.com/alaub81/syslogserver.git
cd syslogserver

Alternativ entpackst du die bereitgestellte ZIP-Datei in ein Verzeichnis auf deinem Server.

2. .env-Datei anpassen

Erstelle oder bearbeite die Datei .env im Projektverzeichnis.

cp .env.example .env

Beispielinhalt:

# Timezone
TZ=Europe/Berlin

# Ports
SYSLOG_UDP_PORT=514
SYSLOG_TCP_PORT=514
LOGANALYZER_PORT=8181

# Database
DB_ROOT_PASSWORD=supersecurepassword
## Delete Database entries older then:
LOG_RETENTION_DAYS=30

# Loganalyzer Version (https://loganalyzer.adiscon.com/download/)
LOGANALYZER_VERSION=4.1.13

Diese Datei enthält alle zentralen Einstellungen für den gesamten Stack (Ports, Datenbank-Zugang, Zeitzone, Logdaten Aufbewahrungsdauer).

3. Setup und erster Start

Führe folgenden Befehl im Projektverzeichnis aus:

chmod +x setup.sh
./setup.sh

Der Befehl lädt alle Images, baut die Container (falls nötig) und startet den gesamten Stack im Hintergrund.

4. Webinterface aufrufen

Öffne deinen Browser und rufe das LogAnalyzer-Interface auf:

http://<SERVER-IP>:8181

Dort kannst du die Logdaten direkt durchsuchen und filtern.

5. Cleanup-Zeitpunkt und Log-Aufbewahrung steuern

Der Container dbcleanup nutzt eine Cron-Datei zur Steuerung der Löschzeitpunkte. Diese befindet sich unter:

resources/dbcleanup.cron

Die Retention-Dauer (z. B. 30 Tage) wird über die Umgebungsvariable LOG_RETENTION_DAYS in der .env Datei gesetzt. Nach Änderung muss der Docker Stack einmal neugestartet werden und dabei der dbcleanup Container neu gebaut werden:

docker compose up -d --build

Komponentenübersicht und Konfigurationsdateien

Das Projekt besteht aus mehreren spezialisierten Docker-Containern, die jeweils durch eigene Konfigurationsdateien gesteuert werden. Alle Komponenten sind im Docker-Compose-Verbund integriert und arbeiten über ein gemeinsames virtuelles Netzwerk zusammen.

syslog-ng (Syslog-Empfang und Parsing)

  • Aufgabe: Empfängt UDP- und TCP-basierte Syslog-Nachrichten (z. B. von Shelly-Geräten), parsed diese mithilfe von Templates und speichert sie in der Datenbank.
  • Image-Basis: Eigener Dockerfile (Debian-basiert)
  • Ports: 514/UDP und 514/TCP (konfigurierbar via .env)
  • Konfigurationsdateien:
    • data/syslog-ng/config/10-syslogsrv.conf → Konfiguration des Syslogservers, Datenbankverbindung und Shelly Parser
  • Besonderheiten:
    • Nutzung von Custom-Templates für MariaDB-Einträge
    • Parser für Shelly-Nachrichten zur Feldzuweisung

mariadb (Log-Datenbank)

  • Aufgabe: Speichert alle Logeinträge strukturiert in der Tabelle SystemEvents.
  • Image: Offizielles mariadb:latest
  • Port: 3306 (intern)
  • Konfigurationsdateien:
    • init.sql: Erstellt beim ersten Start die Datenbank, Benutzer und Tabellen
    • docker-compose.yml: Root Passwort via .env
  • Datenstruktur:
    • Tabelle `SystemEvents` mit Feldern wie ReceivedAt, Message, SysLogTag, etc.
    • Volltext-Indexes zum Beispiel auf Message für schnelle Suche

loganalyzer (Webinterface)

  • Aufgabe: PHP-basierte Webanwendung zur Durchsuchung und Darstellung der Logs.
  • Image-Basis: Eigenes Image auf Basis von php:8.2-apache
  • Port: 8080 (konfigurierbar via .env)
  • Konfigurationsdateien:
    • setup.sh → lädt und entpackt die gewählte LogAnalyzer-Version
    • data/loganalyzer/config/config.php → zentrale Konfiguration (u.a. Datenbankverbindung) für die Web-Oberfläche
    • .env → TCP Port und Versionsnummer der zu verwendenden LogAnalyzer Version
  • Besonderheiten: Unterstützung von Benutzerzugängen, Layoutanpassungen, Live-Ansicht

dbcleanup (Cleanup-Dienst für alte Logs)

  • Aufgabe: Löscht regelmäßig veraltete Logeinträge und optimiert die Datenbank.
  • Image-Basis: Eigenes Debian-Image mit mariadb-client und supercronic
  • Zeitsteuerung: über supercronic und resources/dbcleanup.cron
  • Konfigurationsdateien:
    • resources/dbcleanup.sh → Cleanup-Skript mit Logging über `logger`
    • resources/dbcleanup.cron → Cron-Zeitplan
    • .env → LOG_RETENTION_DAYS, TZ
  • Logging: Alle Ausgaben werden per logger an syslog-ng gesendet und sind in LogAnalyzer sichtbar.

docker-compose (Orchestrierung aller Komponenten)

  • Datei: docker-compose.yml
  • Aufgabe: Verbindet alle Container, Volumes und Netzwerke
  • Konfigurierbar über: .env

Hinweise zur Nutzung von LogAnalyzer

Nach dem Start findest du im Webinterface unter „Search“ oder „Live View“ alle empfangenen Syslog-Meldungen. Die wichtigsten Felder:

  • FromHost – das Gerät, das die Nachricht gesendet hat
  • Facility / Severity – klassifizierte Dringlichkeitsstufen
  • SysLogTag – typischerweise der Programmname (z. B. `shellyplus2pm`)
  • Message – der eigentliche Log-Inhalt
  • ReceivedAt / DeviceReportedTime – Zeitpunkte der Speicherung

Tipp: Aktiviere unter „Filters“ oder „Columns“ die Felder `EventLogType`, `EventSource`, `Priority`, `PID`, um strukturierte Inhalte besser zu analysieren.

Weiterführende Links

Hier findest du offizielle Ressourcen und Dokumentationen zu den eingesetzten Komponenten und Technologien:

Offizielle Projektseiten

  • syslog-ng – Hochleistungsfähiger Syslog-Server mit erweiterten Parsing-Funktionen
  • MariaDB – Relationale Open-Source-Datenbank (MySQL-kompatibel)
  • LogAnalyzer – Webbasierte Analyse- und Darstellungsschicht für Syslog-Daten

Docker & Orchestrierung

Tools und Hilfsmittel

  • Supercronic – leichtgewichtiger Cron-Ersatz für Docker-Container
  • diagrams.net – Online-Tool für Netzwerk- und Architekturdiagramme
  • Excalidraw – Handgezeichnete Diagramme für technische Skizzen

Weitere Ressourcen