In nahezu jeder IT-Umgebung entstehen kontinuierlich Logdaten: Router protokollieren Verbindungen und Angriffe, Server schreiben Systemmeldungen, und diverse Dienste liefern zusätzliche Informationen. Diese Daten sind extrem wertvoll – allerdings nur dann, wenn sie zentral gesammelt und sinnvoll ausgewertet werden können.
Genau hier setzt ein zentrales Logging-System an.
In diesem Beitrag zeige ich, wie sich ein leistungsfähiger Syslog-Server mit Graylog aufbauen lässt – bewusst nicht als klassische virtuelle Maschine, sondern als schlanker LXC-Container unter Proxmox. Das spart Ressourcen und ist in vielen Umgebungen vollkommen ausreichend.
Inspiriert wurde dieses Setup durch eine Anleitung aus dem Thomas-Krenn-Wiki. Der dort beschriebene Ansatz wurde hier jedoch praxisnah angepasst und weiterentwickelt:
- Einsatz eines LXC-Containers statt VM
- Verwendung aktueller Software-Versionen
- Optimierungen für den produktiven Einsatz
👉 Teil 1 (dieser Artikel): Installation und Inbetriebnahme
👉 Teil 2: Strukturierung und Auswertung der Logs (Streams, Pipelines, LANCOM-Integration)
Architektur-Überblick
Ein Graylog-Setup besteht aus drei zentralen Komponenten:
- Graylog Server → Verarbeitung der Logs und Webinterface
- OpenSearch → Speicherung und schnelle Durchsuchbarkeit
- MongoDB → Konfigurations- und Metadaten
Alle drei Komponenten laufen in diesem Setup gemeinsam in einem LXC-Container.
Warum LXC statt VM?
Der Einsatz eines Containers bringt einige praktische Vorteile mit sich:
- Deutlich geringerer Ressourcenverbrauch
- Schnellere Bereitstellung
- Einfaches Backup über Proxmox
- Für Logging-Zwecke in der Regel vollkommen ausreichend
Gerade in kleineren und mittleren Umgebungen ist das ein sehr pragmatischer Ansatz.
Voraussetzungen
- Proxmox VE Host
- Debian 12 LXC-Template (
debian-12-standard) - Container mit mindestens:
- 4 GB RAM
- 2 vCPU
- 40 GB Storage
Empfehlung aus der Praxis
Für erste produktive Setups hat sich folgende Konfiguration bewährt:
RAM: 4 GB
SWAP: 1–2 GB
Disk: ≥ 40 GB
LXC-Container erstellen
Beim Anlegen des Containers in Proxmox sollten folgende Optionen gesetzt werden:
- Unprivileged Container: aktivieren
- Features:
nesting=1aktivieren
- Netzwerk:
- Feste IP-Adresse empfehlenswert
Grundsystem vorbereiten
Da wir uns in der Regel in der Container als root einloggen, können alle Befehle direkt ausgeführt werden. Ansonsten müsste man immer sudo voranstellen. Nun nach dem ersten Start des Containers erstmal updaten:
$ apt update && apt upgrade -y
$ apt install -y curl gnupg uuid-runtime
Einige Pakete wie apt-transport-https werden in älteren Anleitungen noch installiert, sind unter aktuellen Debian-Versionen jedoch nicht mehr notwendig und können entfernt werden.
Außerdem hat Graylog in der Regel bereits die Binaries für die Java Virtual Machine (JVM) standardmäßig integriert. Deswegen ist zumeist es nicht notwendig openjdk-17-jre-headless explizit zu installieren. Optional darf man aber trotzdem:
$ apt install -y openjdk-17-jre-headless
MongoDB 8 installieren
MongoDB ist in Debian 12 nicht standardmäßig enthalten und muss daher über ein externes Repository eingebunden werden.
GPG-Key importieren
$ curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc \
| gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
Repository hinzufügen
$ echo "deb [signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg] \
https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" \
| tee /etc/apt/sources.list.d/mongodb-org-8.0.list
Installation
$ apt update && apt install -y mongodb-org
$ systemctl enable mongod && systemctl start mongod
Zur Kontrolle, ob der Dienst sauber läuft:
$ systemctl --type=service --state=active | grep mongod
OpenSearch installieren (Version 2.x)
Für Graylog 6.x sollte aktuell OpenSearch aus der 2.x-Reihe verwendet werden. Neuere Hauptversionen (3.x) sind zum Zeitpunkt dieses Setups nicht kompatibel.
Auch wieder GPG-Key importieren
$ curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp \
| gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
Und Repository einrichten
$ echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] \
https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" \
| tee /etc/apt/sources.list.d/opensearch-2.x.list
Sowie Installation
Hier muss zuerst per Umgebungsvariable ein Admin-Passwort gesetzt werden, da seit OpenSearch 2.12.0 aus Sicherheitsgründen ein individuelles Passworts für den Administratorbenutzers zu setzen ist.
$ export OPENSEARCH_INITIAL_ADMIN_PASSWORD=<geheimes-admin-pw-erzeugen>
apt update && apt install -y opensearch
OpenSearch konfigurieren
Um später die Anbindung an Graylog zu ermöglichen, müssen einige Anpassungen bei OpenSearch in der opensearch.yml vorgenommen werden:
$ nano /etc/opensearch/opensearch.yml
Folgende Parameter sollten in dieser Datei nun angepasst werden, um ein minimales Setup einzurichten:
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 127.0.0.1
action.auto_create_index: false
plugins.security.disabled: true
discovery.type: single-node
Diese Einstellungen stellen sicher, dass:
- OpenSearch lokal erreichbar ist:
network.host: 127.0.0.1 - kein Cluster-Modus aktiviert wird
- keine zusätzliche Authentifizierung erforderlich ist
Heap-Größe anpassen
Außderdem müssen die Parameter Xms und Xmx angepasst werden. Xmx gibt hierbei maximalen Speicherzuweisungspool für eine Java Virtual Machine (JVM) an, während Xms den anfänglichen Speicherzuweisungspool angibt.
$ nano /etc/opensearch/jvm.options
Anpassen auf:
-Xms1g
-Xmx1g
Diese Einstellung ist bei 4 GB RAM ein guter Kompromiss zwischen Performance und Stabilität, da genügend RAM für Graylog und MongoDB verbleibt. Will man mehr Speicher für den Heap der JVM, sollte man dem LXC auch mehr RAM zuweisen.
Wichtiger Kernel-Parameter
OpenSearch benötigt eine erhöhte Anzahl an Memory-Mappings: vm.max_map_count = 262144
Achtung: Das muss auf dem Proxmox-Host gesetzt werden, nicht im Container, da wir einen LXC verwenden! Verwendet man hingegen eine echte VM muss man den Wert natürlich in der VM setzen.
$ sysctl -w vm.max_map_count=262144
$ echo "vm.max_map_count = 262144" > /etc/sysctl.d/opensearch.conf
Zur Kontolle sollte der folgende Behelf wieder vm.max_map_count = 262144 liefern.
$ sysctl --system | grep vm.max_map_count
Im Container selbst sollte
$ cat /proc/sys/vm/max_map_count
wiederum 262144 liefern.
OpenSearch starten
$ systemctl daemon-reload
$ systemctl enable --now opensearch
$ systemctl start opensearch
Zur Kontrolle, ob der Dienst läuft:
$ systemctl status opensearch
sollte Active: active (running) liefern.
Graylog installieren (Version 6.x)
Für produktive Umgebungen empfiehlt sich aktuell die stabile 6.x-Version.
Repository hinzufügen
$ wget https://packages.graylog2.org/repo/packages/graylog-6.3-repository_latest.deb
dpkg -i graylog-6.3-repository_latest.deb
Installation
$ apt update && apt install -y graylog-server
Graylog konfigurieren
Die zentrale Konfigurationsdatei befindet sich hier:
$ nano /etc/graylog/server/server.conf
Passwort-Secret setzen
Hier müssen wir ein ausreichend langes Secret erzeugen, mit dem in der Datenbank gespeicherte Benutzer-Passwörter zu verschlüsseln. Wird dieses nachträglich geändert, verlieren alle aktiven Login-Sessions und verschlüsselten Passwörter ihre Gültigkeit:
$ pwgen -N 1 -s 96
In die Konfiguration eintragen:
password_secret = <WERT>
Admin-Passwort festlegen
Das Passwort wird nicht als plain-text, sondern als SHA256-Hash gespeichert.
$ echo -n 'DeinPasswort' | sha256sum
Dann:
root_password_sha2 = <HASH>
Webinterface erreichbar machen
Hier geben wir die Adresse des LXC ein. Port 9000 ist Standard, darf aber explizit angegeben werden. Man könnte auch einen anderen Port wie z.B. 8006 wählen.
http_bind_address = <IP-des-Containers>:9000
Verbindung zu OpenSearch
In einem Standard-Setup, bei dem OpenSearch auf demselben System läuft und der Standard-Port verwendet wird, ist in der Regel keine zusätzliche Konfiguration erforderlich.
Graylog nutzt standardmäßig:
http://127.0.0.1:9200
Zum Testen kann man
$ curl http://127.0.0.1:9200
was eine Ausgabe wie etwa liefern sollte:
{
"name" : "graylog",
"cluster_name" : "graylog",
"cluster_uuid" : "k7QilLMqTV2KNeavsMHX7g",
"version" : {
"distribution" : "opensearch",
"number" : "2.19.5",
"build_type" : "deb",
"build_hash" : "688434c5163e9b107f339df25b4e98a96c10ddc6",
"build_date" : "2026-03-07T02:22:25.894998559Z",
"build_snapshot" : false,
"lucene_version" : "9.12.3",
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Eine Anpassung ist nur notwendig, wenn:
- OpenSearch auf einem anderen Host betrieben wird
- ein anderer Port verwendet wird
- TLS oder Authentifizierung aktiviert ist
Graylog starten
$ systemctl daemon-reload
$ systemctl enable --now graylog-server
$ systemctl start graylog-server
Ob der Graylog-Server sauber läuft, zeigt:
$ systemctl status graylog-server
Zugriff auf das Webinterface
Nachdem der Server gestartet wurde, muss nun noch die die richtige URL für die erstmalige Konfiguration von Graylog festgestellt werden. Dafür müssen die Logs von Graylog aufgerufen werden, diese befinden sich meist unter /var/log/graylog-server/server.log
$ cat /var/log/graylog-server/server.log
Hier findet sich nun die URL zum Verbinden auf die Graylog Konfigurationsseite samt der Zugangsdaten für die Konfiguration (Benutzername admin und ein zufälliges Passwort wie z.B CSjykWQuLE )
Im Browser nun die Webschnittstelle aufrufen (Wir haben in der Konfiguration Standardport 9000 gelassen):
http://<IP-des-Containers>:9000
und mit den Zugangsdaten aus der server.log anmelden. Für das spätere Login im Produktionsbetrieb braucht das in /etc/graylog/server/server.conf festgelegte und gehashte admin-Passwort.
Fazit
Mit überschaubarem Aufwand steht nun ein zentraler Logserver bereit, der:
- ressourcenschonend im LXC läuft
- moderne und kompatible Softwarestände nutzt
- als Grundlage für weitergehende Loganalyse dient
Gerade in Kombination mit Netzwerkgeräten wie Routern entfaltet Graylog seinen eigentlichen Nutzen jedoch erst in der Auswertung und Strukturierung der eingehenden Daten.
Ausblick auf Teil 2
Im nächsten Teil geht es in die Praxis:
- Einrichtung von Syslog-Inputs
- Anbindung von Netzwerkgeräten
- Strukturierung der Logs
- Streams, Pipelines und Filter
- Aufbau erster Dashboards
Damit wird aus einem reinen Logsammler ein echtes Analysewerkzeug.