Homelab & Netzwerk

Checkmk auf Proxmox installieren – mit Helper Script und echter LXC-Falle

Nach dem Toolvergleich wird es praktisch: Checkmk soll als zentrale Monitoring-Plattform auf Proxmox laufen. Für den Aufbau nutze ich das Community Helper Script, gehe aber bewusst durch den Advanced-Installer. So sehe ich genau, welche Ressourcen und LXC-Funktionen aktiviert werden.

Hinweis: Screenshots mit internen IP-Adressen, Gateway, DNS, Domain, VLAN-ID, Container-ID, Storage-Namen, MAC-Adressen oder Zugangsdaten werden in diesem Beitrag bewusst nicht gezeigt. Diese Schritte beschreibe ich nur im Text.

Warum Advanced Install?

Der Default-Installer wäre schneller. Für ein System, das später große Teile meines Homelabs überwachen soll, möchte ich aber nachvollziehen können, wie der Container aufgebaut ist. Deshalb wähle ich Advanced Install und gehe jede relevante Option einzeln durch.

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/checkmk.sh)"
Advanced Install im Community Helper Script

Die Advanced-Installation Schritt für Schritt

1. Container-Typ – Unprivileged

Checkmk benötigt keine privilegierten Host-Rechte. Deshalb bleibt der Container unprivileged. Das ist die sauberere Sicherheitsbasis und reicht für Checkmk vollkommen aus.

1. Container-Typ – Unprivileged

2. Root-Passwort

Der Helper kann den Container auch ohne gesetztes Root-Passwort erstellen. Ich vergebe bewusst ein eigenes Passwort für die lokale Administration des LXC. Das Passwort selbst ist im Screenshot nicht sichtbar.

2. Root-Passwort

3. Passwort bestätigen

Das Root-Passwort wird noch einmal bestätigt. Das ist nur ein normaler Kontrollschritt des Installers.

3. Passwort bestätigen

4. Container-ID

Die Container-ID folgt meinem eigenen Proxmox-Schema. Da die konkrete Nummer für andere Nutzer keinerlei Mehrwert hat, wird dieser Schritt nur beschrieben und nicht als Screenshot veröffentlicht.

5. Hostname

Als Hostname verwende ich schlicht checkmk. Der Name ist kurz, eindeutig und beschreibt direkt die Funktion des Systems.

5. Hostname

6. Disk-Größe

Für den Start reichen mir 10 GB. Die Checkmk-Basis benötigt nur einen Teil davon. Falls die Installation später wächst, kann ich die Root-Disk des LXC in Proxmox problemlos vergrößern.

6. Disk-Größe

7. CPU-Cores

Ich starte mit 2 CPU-Cores. Das reicht für die erste Ausbaustufe. Ob später mehr nötig ist, sollen reale Monitoring-Daten zeigen.

7. CPU-Cores

8. RAM

Auch beim RAM starte ich bewusst klein mit 2 GB. Ein LXC lässt sich später einfach auf mehr RAM erweitern, ohne das System neu aufzubauen.

8. RAM

9. Netzwerk-Bridge

Der Container hängt an der VLAN-aware Bridge des Proxmox-Hosts. Dadurch kann der LXC sauber in das vorgesehene Servernetz eingeordnet werden. Die konkrete Bridge-Konfiguration und weitere interne Netzwerkbezeichnungen zeige ich nicht als Screenshot.

10. IPv4-Modus

Für ein Monitoring-System möchte ich eine feste Adresse. Deshalb wähle ich Static statt DHCP. Das macht Webzugriff, Firewall-Regeln und spätere Agent-Verbindungen eindeutig.

10. IPv4-Modus

11. Statische IPv4-Adresse

Hier wird die feste Adresse im Servernetz eingetragen. Die reale interne IP veröffentliche ich nicht.

12. Gateway

Als Gateway wird das Gateway des Servernetzes gesetzt. Auch dieser Wert bleibt intern und erscheint nicht im Blog.

13. MTU

Die MTU lasse ich auf dem normalen Standardwert. Jumbo Frames bringen für Checkmk hier keinen Vorteil und würden nur eine weitere Fehlerquelle schaffen.

13. MTU

14. DNS Search Domain

Die interne Search-Domain hilft später bei der Namensauflösung interner Systeme. Der konkrete Domainname bleibt privat und wird nicht als Screenshot gezeigt.

15. DNS-Server

Checkmk verwendet meine internen DNS-Resolver. Damit kann das Monitoring später interne Hosts per DNS erreichen. Die konkreten DNS-Adressen veröffentliche ich nicht.

16. VLAN-Tag

Der LXC wird in das vorgesehene Server-VLAN eingeordnet. Die konkrete VLAN-ID bleibt intern. Entscheidend ist das Prinzip: VLAN-aware Bridge plus VLAN-Tag am virtuellen Interface.

17. Container-Tags

Mit Tags wie community-script und monitoring lässt sich der LXC in der Proxmox-Oberfläche später leichter wiederfinden. Technisch notwendig sind die Tags nicht.

17. Container-Tags

18. SSH-Key-Quelle

Der Helper kann vorhandene SSH-Keys übernehmen. Für meinen ersten Aufbau übernehme ich keine zusätzlichen Keys vom Proxmox-Host. Die Proxmox-Konsole reicht als administrativer Zugriff.

18. SSH-Key-Quelle

19. Root-SSH

Root-SSH bleibt deaktiviert. Checkmk benötigt keinen direkten Root-Zugang über das Netzwerk. Weniger Remote-Zugänge bedeuten weniger Angriffsfläche.

19. Root-SSH

20. FUSE

FUSE wäre beispielsweise für rclone oder Userspace-Dateisysteme nötig. Checkmk braucht das nicht, also bleibt die Option aus.

20. FUSE

21. TUN/TAP

TUN/TAP wird typischerweise für VPN-Software oder spezielle Netzwerkfunktionen gebraucht. Der Checkmk-LXC ist kein VPN-Gateway und benötigt diese Funktion nicht.

21. TUN/TAP

22. Nesting

Nesting würde Docker oder weitere Container innerhalb des LXC ermöglichen. Genau das möchte ich hier nicht. Checkmk läuft direkt im LXC, deshalb bleibt Nesting deaktiviert.

22. Nesting

23. GPU-Passthrough

Für Monitoring ist keine GPU-Beschleunigung nötig. GPU-Passthrough bleibt daher aus.

23. GPU-Passthrough

24. APT Cacher

Ein lokaler APT-Cacher kann bei vielen Debian-Systemen Bandbreite sparen. Für diesen Aufbau brauche ich ihn nicht.

24. APT Cacher

25. HTTP/HTTPS-Proxy

Der Container darf direkt über mein Netzwerk auf Paketquellen zugreifen. Ein zusätzlicher HTTP-Proxy ist nicht erforderlich.

25. HTTP/HTTPS-Proxy

26. Zeitzone

Die Zeitzone setze ich passend zum Proxmox-Host. Bei Monitoring ist eine korrekte Zeit besonders wichtig, damit Alarme und historische Daten später sauber zusammenpassen.

26. Zeitzone

27. Container Protection

Protection kann vor versehentlichem Löschen schützen. Für ein Monitoring-System, das später selbst wichtig für das Homelab wird, ist das sinnvoll.

27. Container Protection

28. Device Node Creation

Checkmk benötigt keine zusätzlichen Device Nodes. mknod bleibt daher deaktiviert.

28. Device Node Creation

29. Zusätzliche Filesystem-Mounts

Für den Checkmk-Basisbetrieb brauche ich keine zusätzlichen NFS-, CIFS- oder sonstigen Mounts. Das Feld bleibt leer.

29. Zusätzliche Filesystem-Mounts

30. Post-Install Hook

Ich verwende keinen eigenen Post-Install-Hook. Dadurch bleibt die Installation möglichst nah am Community Script und leichter nachvollziehbar.

30. Post-Install Hook

31. Verbose Mode

Beim ersten Aufbau aktiviere ich Verbose Mode. Dadurch sehe ich die einzelnen Installationsschritte und Warnungen direkt. Genau das hat sich später beim tmpfs-Problem ausgezahlt.

31. Verbose Mode

Vor dem Start: Zusammenfassung kontrollieren

Bevor der Container wirklich erstellt wird, zeigt der Helper noch einmal die vollständige Konfiguration. Hier kontrolliere ich vor allem Container-Typ, CPU, RAM, Disk und die deaktivierten Sonderfunktionen. Da diese Übersicht gleichzeitig interne Netzwerk- und Infrastrukturwerte enthält, veröffentliche ich davon bewusst keinen Screenshot.

Die Advanced-Einstellungen speichere ich nicht als allgemeine Vorlage. Werte wie IP, VLAN oder Ressourcen können beim nächsten Container anders aussehen.

Abfrage zum Speichern der Advanced-Einstellungen

Installation und erste Anmeldung

Danach erstellt das Script den Debian-LXC, installiert Checkmk und legt die erste Site an. Die originale Terminal-Ausgabe enthält interne Werte und automatisch generierte Zugangsdaten. Deshalb wird sie im Beitrag nicht als Screenshot verwendet.

Die vom Helper erzeugten Login-Daten lassen sich anschließend direkt auf dem Checkmk-LXC auslesen:

cat ~/checkmk.creds

Damit erhält man die für den ersten Login benötigten Zugangsdaten. Nach dem ersten Login sollte das automatisch erzeugte Passwort geändert werden.

Das erste echte Problem: tmpfs

Checkmk war nach der Installation erreichbar und die Site lief. Im Terminal erschien allerdings eine Warnung, dass das temporäre Site-Verzeichnis nicht wie vorgesehen als tmpfs gemountet werden konnte.

WARNING: You may continue without tmpfs,
but the performance of Check_MK may be degraded.

Mit folgendem Befehl lässt sich prüfen, wo das temporäre Verzeichnis tatsächlich liegt:

df -h /opt/omd/sites/monitoring/tmp

In meinem Fall zeigte die Ausgabe noch das Root-Filesystem des LXC. Das Helper Script hatte zwar bereits einen passenden Eintrag in /etc/fstab erzeugt, der Mount wurde im unprivilegierten LXC aber nicht aktiv – auch nicht nach einem Reboot.

tmpfs /opt/omd/sites/monitoring/tmp tmpfs noauto,user,mode=751,uid=monitoring,gid=monitoring 0 0
Wichtig: Ich wollte das Problem nicht dadurch lösen, dass ich den Container auf privileged umstelle. Der LXC bleibt unprivileged.

Die Lösung auf dem Proxmox-Host

Die saubere Lösung war, den tmpfs-Mount direkt in der LXC-Konfiguration auf dem Proxmox-Host bereitzustellen.

pct stop <CTID>

# /etc/pve/lxc/<CTID>.conf
lxc.mount.entry: tmpfs opt/omd/sites/monitoring/tmp tmpfs rw,nosuid,nodev,size=512M,mode=0751,uid=999,gid=988,create=dir 0 0

pct start <CTID>

Danach ließ sich kontrollieren, dass /opt/omd/sites/monitoring/tmp tatsächlich als 512-MB-tmpfs gemountet war und die Checkmk-Site weiterhin vollständig lief.

Ergebnis

Basis steht: Checkmk läuft als unprivilegierter LXC, unnötige LXC-Features bleiben deaktiviert und das temporäre Site-Verzeichnis liegt korrekt im RAM.

Die Ressourcen lasse ich vorerst bei 2 CPU-Cores, 2 GB RAM und 10 GB Disk. Wenn das Monitoring später wächst, kann ich RAM und Storage in Proxmox problemlos erweitern.

Wie es weitergeht

Im nächsten Teil binde ich den ersten echten Host ein: Proxmox selbst. Dann sehen wir, welche Services Checkmk automatisch erkennt und welche Checks für mein Homelab wirklich sinnvoll sind.