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

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 Tabellendocker-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-Versiondata/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
undsupercronic
- Zeitsteuerung: über
supercronic
undresources/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
- Docker Homepage
- Docker Compose Dokumentation
- Offizielles MariaDB Docker Image
- PHP Docker Image mit Apache
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
- RFC 5424 – Syslog-Protokoll-Spezifikation (IETF)
- rsyslog Dokumentation – falls du Vergleichswerte brauchst oder zu rsyslog wechseln möchtest
- Syslog (Freifunk-Wiki) – Grundlagenartikel zu Syslog im deutschsprachigen Kontext