Zum Inhalt springen

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

Aus LHlab 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:

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 Tabellen
    • docker-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 und supercronic
  • 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 oder docker-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.

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

Tools und Hilfsmittel

  • Supercronic – leichtgewichtiger Cron-Ersatz für Docker-Container

Weitere Ressourcen