Zentrales Syslog-Management mit Graylog auf Proxmox (LXC) – Teil 1: Installation & Grundsetup

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=1 aktivieren
  • 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.

Schreibe einen Kommentar


PHPCo.de
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.