// Inhalt
Zabbix ist ein grandioses Monitoring-Tool. Aber bei den eingebauten Netzwerk-Maps merkt man deutlich, dass die Optik aus einer anderen Ära stammt: statische Icons, manuelles Platzieren, kaum interaktiv. Wer eine Übersicht über seine Infrastruktur auf einen Blick will, greift zu Drittlösungen – oder baut sich selbst eine.
Genau das war der Ausgangspunkt für Network Topology – ein natives Zabbix-Modul (kein externes Dashboard, keine Proxy-Magie), das aus den vorhandenen Zabbix-Daten eine moderne, interaktive Netzwerk-Map rendert. In den letzten Wochen ist aus der ersten v5 bereits v4.19.0 geworden, mit deutlich mehr Funktionsumfang an den Stellen, an denen man im Alltag wirklich klickt.
Vier Ansichten, ein Datenmodell #
Die Map gibt es in vier Perspektiven, zwischen denen man ohne Neuladen umschalten kann.
Technische Ansicht #
Das Herzstück – ein Cytoscape.js-basiertes Graph-Layout, das die Topologie als physisches Netz darstellt. Jeder Host ist ein Node mit Severity-Ring, Kanten zeigen echte Verbindungen. Jeder Node hat einen Ring in vier Segmenten: CPU (blau), Memory (violett), Traffic (grün), Ping (orange). Der Füllstand des Rings zeigt den aktuellen Wert – ein voll gefüllter roter CPU-Ring sagt mehr als jede Tabelle.

Hover öffnet ein Tooltip mit Sparklines der letzten Stunde für CPU und Ping plus konkreten Werten für Traffic-IN/OUT und „Problem seit X Stunden". Rechtsklick öffnet direkt die Zabbix-Links für Latest Data, Problems, Graphs und Host-Konfiguration. Die hierarchische Ansicht (früher eigener Tab) lebt jetzt als Sub-Layout innerhalb dieser Ansicht – per Toolbar-Toggle, neben Force, Raster und Konzentrisch.
Management-Ansicht #

Für den schnellen Überblick im Standup: Hosts werden als Kacheln gruppiert nach Typ (Firewall, Router, Switch, Server, Storage, …), sortiert nach Severity. Kein Graph, keine Ablenkung – nur „was brennt gerade".
Tabellen-Ansicht (neu) #
Die nüchterne Sicht für den Alltag – eine Hostliste im Nagios-/Icinga-Style. Status, Type, IP, CPU, Memory, Ping, Traffic, Probleme – alles sortierbar, mit Severity-Pille pro Zeile, Volltext-Suche über Hostname/IP/Type/Interface/Proxy und Severity-Filter (Disaster/High/Avg/Warn/Info/Normal als Pillen togglebar). Klingt unspektakulär, ist aber der Tab, in dem ich inzwischen am häufigsten lande, wenn ich wirklich nur schnell wissen will: wer ist gerade dran.
Neu in v4.19.0: der Probleme-Counter pro Host ist aufklappbar. Klick darauf öffnet eine Detail-Zeile mit den einzelnen Problemen – Severity-Punkt, Name, Acked-Häkchen, Alter. Bis zu 20 Probleme pro Host, sortiert nach Severity desc und Clock desc. Spart das ständige Wechseln zur Zabbix-Problems-Seite.

Daneben ein zweiter Modus: Items-Pivot. Man gibt ein Item-Key-Pattern ein (z.B. vfs.fs.size[*,pused]) und bekommt eine Pivot-Tabelle Hosts × Items als Heatmap. Alle Disk-Auslastungen einer Hostgroup auf einen Blick, oder alle vm.memory.size, oder alle agent.ping – egal, solange das Pattern matched.

Es gibt fertige Presets (Memory, CPU-Util, Network In/Out, Ping-Loss + RTT) plus Auto-Discovery, die die häufigsten Items in der aktuellen Hostgroup-Auswahl vorschlägt. Custom-Patterns funktionieren mit Wildcards (*) und Komma-Argumenten.
Geo-Ansicht (neu) #

Wer Hosts mit GPS-Koordinaten in den Inventory-Feldern (location_lat + location_lon) hat, bekommt sie jetzt auf einer Leaflet-Karte. Tile-Layer ist OpenStreetMap Mapnik per Default, lässt sich aber umschalten. Marker zeigen die Severity-Farbe, Klick öffnet ein kompaktes Popup mit Hostname, IP, CPU, RAM und Live-Traffic.
Für eine Single-Server-Umgebung ist das uninteressant. Aber wenn man Außenstandorte oder ein verteiltes Setup über mehrere Städte hat, ist es wirklich praktisch – gerade weil ein orange-roter Pin auf der Landkarte sehr viel mehr Wirkung hat als die gleiche Information in einer Tabellenzeile.
LLDP-Auto-Discovery & Live-Traffic-Heatmap #
Edges zwischen Hosts kann man manuell setzen, aber der spannende Teil: das Modul parst automatisch LLDP-Daten aus den Zabbix-Items (lldpRemSysName, lldpRemPortDesc). Switches, die per SNMP ihre Nachbarn melden, werden automatisch verdrahtet. Keine manuelle Pflege.
Die Kanten sind nicht statisch – sie werden nach Traffic-Volumen eingefärbt und skaliert:
- Grau gestrichelt: keine Daten
- Grün dünn: < 10 Kb/s
- Cyan: < 100 Kb/s
- Blau: < 1 Mb/s
- Orange: < 10 Mb/s
- Rot dick: > 10 Mb/s

Gleichzeitig laufen „fließende Punkte" über die aktiven Kanten – was gerade überträgt, sieht man sofort. Wenn ein Host disaster-severity erreicht, werden seine Kanten tot gestrichelt dargestellt.
Gruppen-Layouts statt Spaghetti #

Bei Multi-Group-Auswahl (z.B. „intern" und „extern" gleichzeitig) verlief das Force-Layout früher schnell zu einer großen Knäuel. Seit v4.18 läuft das adaptiv: 2–3 Hostgroups → vertikale Spalten, 4+ Hostgroups → horizontale Reihen. Auto, Spalten, Reihen oder Aus per Toolbar-Toggle.
Jede Gruppe bekommt ihre eigene Box mit Convex-Hull-Lasso (gestrichelte Linie + Label), und der Sichtgap zwischen den Hüllen ist großzügig genug, dass man die Gruppen sofort als getrennte Einheiten wahrnimmt. Innerhalb der Hülle läuft das gewählte Layout – Force, Raster, Baum, Konzentrisch – jetzt pro Gruppe statt global. Das war eine der Änderungen, die im Alltag den größten Unterschied gemacht hat.
Die Gruppen-Modi werden im localStorage gemerkt, ebenso die Layout-Presets, die man jetzt als benannte Snapshots speichern und laden kann.
History-Mode mit Slider #

Der zweite Killer im Alltag: ein Toggle in der Toolbar öffnet eine Zeitleiste über 1h / 24h / 7 Tage, und der Trigger-Status wird zum gewählten Zeitpunkt zurückgespielt. Die Map zeigt also nicht mehr den Live-Stand, sondern den Stand von vor zwei Stunden, von gestern Abend, von letztem Mittwoch.
Klassisches Szenario: „Wie sah das aus, als der Kunde um 14:23 angerufen hat?" – Slider auf 14:23 schieben, fertig. Aus Sicherheitsgründen ist die Range auf 7 Tage und maximal 50.000 Events begrenzt; CPU, Memory und Traffic bleiben Live, weil History-Werte für ein mittelgroßes Setup schnell richtig viele Datenbankabfragen werden.
Custom-Tags am Host #
Anstelle einer eigenen Konfigurations-UI nutzt das Modul Zabbix-Tags am Host. Wer das Verhalten der Map pro Host anpassen will, klebt einfach Tags ran:
nt:icon=switch– überschreibt das automatisch erkannte Device-Iconnt:label=Core-Switch DC1– alternativer Anzeigename in der Mapnt:note=Reboot 2026-06-12 geplant– kleiner Notiz-Sticker am Knotennt:link=Wiki|https://wiki.example/host/123– Custom-Link im Kontextmenü (mehrfach möglich)nt:show=system.uptime– zusätzlicher Item-Wert im Tooltip
Das Schöne daran: die Visualisierungs-Konfiguration bleibt am Host, wo sie hingehört. Keine zweite Datenbank, keine Hosts-die-im-UI-existieren-aber-im-Modul-anders-heißen, kein Sync-Problem.
Detail-Panel statt Modaldialog #

Klick auf einen Knoten oder eine Tabellenzeile öffnet jetzt eine Seitenleiste rechts statt eines Modals – Severity, CPU, Memory, Ping, Traffic, Geräte-Typ mit Custom-Indikator wenn ein nt:icon-Tag das Auto-Detect überschreibt, Interface (Agent/SNMP/IPMI/JMX) plus Proxy-Info, und vier Action-Buttons direkt zu Latest Data, Probleme, Graphs und Bearbeiten. Die restliche Map bleibt sichtbar.
Auch hier eine Kleinigkeit, die einen größeren Unterschied macht als gedacht: ein Modal reißt einen aus dem Kontext, eine Seitenleiste lässt einen drin.
Interaktion, die nicht nervt #
Nodes lassen sich per Drag verschieben, die Positionen werden pro Host-Gruppe im localStorage gespeichert – beim nächsten Öffnen ist das Layout wieder da. Wichtige Hosts kann man pinnen (Rechtsklick → Pin), dann bleiben sie beim Auto-Layout an Ort und Stelle. Notizen direkt am Node, Volltextsuche mit Fade-Out der nicht-treffenden Knoten, Severity-Pills zum Filtern nach OK/Warn/Avg/High, manueller Link-Modus für logische Verbindungen, die nicht via LLDP entdeckt werden, Dark-Mode für die Nachtschicht.
Die Minimap unten rechts zeigt den gesamten Graph und den aktuellen Viewport – ein Klick springt dorthin. Bei größeren Topologien (>50 Nodes) ist das Gold wert.
Sicherheit nicht nachträglich #
Bei der Gelegenheit: alle Actions prüfen USER_TYPE_ZABBIX_USER, Permission-Filter laufen über API::HostGroup()->get() statt Frontend-Trust, jede Ausgabe geht durch eine zentrale esc()-Funktion, DB-Zugriffe nutzen (int)-Cast oder dbConditionInt(). Item-Patterns brauchen mindestens drei Non-Wildcard-Zeichen (sonst matched man versehentlich Tausende Items), History-Calls sind auf 7 Tage und 50.000 Events begrenzt, Spark-History auf 50 Hostids pro Call. nt:link-URLs sind auf 2.048 Zeichen, http/https only und ohne CRLF beschränkt.
Race-Conditions in async Fetches (History-Slider, Items-Pivot) werden über Sequence-Counter abgefangen – ein Detail, das man erst dann zu schätzen lernt, wenn man mal Daten aus der falschen Antwort gerendert hat.
Export für Reports #
Das Ganze lässt sich auch raustragen: PNG (hochauflösend, 2x Scale), PDF über die Browser-Druckfunktion mit einem fertig gestylten Report (Map + Host-Tabelle nach Severity sortiert), oder direkt per Mail an einen Empfänger – die SMTP-Konfiguration zieht sich das Modul aus Zabbix selbst (media_type-Tabelle).
Stand der Dinge #
Aktuelle Version ist 4.19.0, mit aufklappbaren Probleme-Listen in der Tabelle, Stats-Header im Management-Tab und einem Cache-Buster, der sich aus dem max. mtime der Hauptdateien ableitet (kleines Detail, große Wirkung beim Deployment – keine alten JS-Versionen mehr im Browser-Cache).
Sie wollen Network Topology in Ihrer Zabbix-Umgebung einsetzen oder brauchen Hilfe bei der Integration in Ihr Monitoring-Setup? Schreiben Sie mir – ich helfe gerne weiter.
2.670 Impressions
Resonanz auf LinkedIn
Reaktionen u.a. von Alexei Vladishev #
Der Beitrag zur Network-Topology-Erweiterung wurde auf LinkedIn von der Zabbix-Community aufgegriffen – darunter eine Reaktion von Alexei Vladishev (Founder & CEO, Zabbix SIA) sowie weiteren Zabbix-Anwendern und Observability-Spezialisten aus der internationalen Tech-Community.
