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:
cd /opt
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 inside containers TZ=Europe/Berlin # Syslog listener ports on the HOST SYSLOG_UDP_PORT=514 SYSLOG_TCP_PORT=514 # LogAnalyzer (HTTP) port on the HOST LOGANALYZER_PORT=8181 # MariaDB credentials DB_NAME=syslogdb DB_USER=syslog DB_PASSWORD=changeMe! DB_ROOT_PASSWORD=changeRoot! # only used at initial bootstrap # Log cleanup (dbcleanup container) LOG_RETENTION_DAYS=30 # delete rows older than N days DBCLEANUP_CRON=0 3 * * * # daily at 03:00 # syslog-ng file rotation (if file destinations used) LOGROTATE_CRON=0 * * * * # hourly LOGROTATE_SIZE=50M # rotate at ~50 MB LOGROTATE_MAX_AGE_DAYS=14 # delete rotated files older than N days LOGROTATE_ROTATIONS=7 # keep N rotated files # Only needed when you like to build localy with docker-compose.dev.yml # Loganalyzer Version (https://loganalyzer.adiscon.com/download/) LOGANALYZER_VERSION=4.1.13 # Configure loganalyzers Download-URL (TGZ) LOGANALYZER_URL=https://download.adiscon.com/loganalyzer/loganalyzer-${LOGANALYZER_VERSION}.tar.gz
Diese Datei enthält alle zentralen Einstellungen für den gesamten Stack (Ports, Datenbank-Zugang, Zeitzone, Logdaten Aufbewahrungsdauer).
3. Erster Start
Mit vorgefertigten Images ausführen:
Führe folgenden Befehl im Projektverzeichnis aus, wenn du die Docker Images aus dem Repository nutzen willst:
docker compose up -d
Der Befehl lädt alle Images, baut die Container (falls nötig) und startet den gesamten Stack im Hintergrund.
Lokal entwickeln (aus Dockerfiles erstellen)
Hierbei wird docker-compose.dev.yml verwendet, um Images auf Ihrem Rechner lokal zu erstellen.
docker compose -f docker-compose.dev.yml --env-file .env up -d --build
4. Webinterface aufrufen
Öffne deinen Browser und rufe das LogAnalyzer-Interface auf:
http://<SERVER-IP>:${LOGANALYZER_PORT} (default 8181)
Dort kannst du die Logdaten direkt durchsuchen und filtern.
Konfiguration syslogng
Wenn ihr ein Debug-Protokoll für die Shelly-Geräte oder ein Raw-Dump-Protokoll benötigt, kopiert einfach die deaktivierten Konfigurationsdateien unter
./data/syslog-ng/config/
cp ./data/syslog-ng/config/20-shellylog.conf.disabled ./data/syslog-ng/config/20-shellylog.conf
cp ./data/syslog-ng/config/90-rawlog.conf.disabled ./data/syslog-ng/config/90-rawlog.conf
und wenn die Anwendung bereits ausgeführt wird, startet einfach den syslogng-Container neu:
docker compose restart syslogng
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
- ./data/syslog-ng/config/20-shellylog.conf.disabled --> Shelly Logdatei
./data/syslog-ng/log/shelly.log
für debugging zwecke und zum Parser Test - ./data/syslog-ng/config/90-rawlog.conf.disabled --> Schreibt alle Lognachrichten ungefiltert und wie sie reinkommen in
./data/syslog-ng/log/raw-udp.log
- Besonderheiten:
- Nutzung von Custom-Templates für MariaDB-Einträge
- Parser für Shelly-Nachrichten zur Feldzuweisung
- Logrotate rotiert bei Bedarf die auf dem Filesystem erstellten Logfiles
mariadb (Log-Datenbank)
- Aufgabe: Speichert alle Logeinträge strukturiert in der Tabelle SystemEvents.
- Image: Offizielles
mariadb:latest
- Port: 3306 (intern)
- Konfigurationsdateien:
./data/init.sql
: Erstellt beim ersten Start die benötigten Tabellendocker-compose.yml
: Datenbank Konfiguration (DB, User, Passwörter) 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: 8181 (konfigurierbar via
.env
) - Konfigurationsdateien:
./data/loganalyzer/config/config.php
→ zentrale Konfiguration (u.a. Datenbankverbindung) für die Web-Oberfläche.env
→ TCP Port und Versionsnummer und Downloadlink 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
und.env
- Konfigurationsdateien:
resources/dbcleanup.sh
→ Cleanup-Skript mit Logging über `logger`.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
oderdocker-compose.dev.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:
GitHub Repository
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
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