diff --git a/docs/source/conf.py b/docs/source/conf.py
index 7b6ef0790424f60789cb419a1b58bf32534f900e..2c668d6a985499d66054b3bb8623e602e53aa631 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -28,6 +28,7 @@ author = 'Stichting ASTRON'
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
+    "sphinx.ext.graphviz"
 ]
 
 # Add any paths that contain templates here, relative to this directory.
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index 421248d1386862cd443b3be88ed4d44a77334a5a..7b4e1020dd3167e3ba18018af67245a96459180a 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -12,3 +12,67 @@ As well as the following backing services to support the setup:
 * A *Node Exporter* scraper that collects monitoring informatino of the host running this software stack, exposed on http://localhost:9100.
 
 .. hint:: The URLs assume you're running this software on localhost. Replace this with the hostname of the hosting system if you're accessing this software on a server.
+
+The services are connected as follows. The green components are part of this software package, the gray components are external:
+
+.. graphviz::
+
+    digraph monitoring_setup {
+        layout=dot;
+        nodesep=1.2;
+
+        fontname="Helvetica,Arial,sans-serif"
+        node [fontname="Helvetica,Arial,sans-serif" fontsize="20pt" style=filled fixedsize=true]
+        edge [fontname="Helvetica,Arial,sans-serif" fontsize="20pt"]
+        rankdir=TB;
+
+        node [shape=ellipse height=1 width=2 color=gray];
+        slack;
+
+        node [shape=rectangle width=1 color=gray];
+        user;
+
+        subgraph cluster_operational_central_management {
+            color=black;
+            label="Operational Central Management";
+
+            node [shape=ellipse height=1 width=2 color=aquamarine];
+            prometheus; grafana; alerta; node_exporter;
+
+            prometheus -> grafana [label="query results"];
+            grafana -> alerta [label="alerts"];
+            node_exporter -> prometheus [label="metrics"];
+            grafana -> prometheus [label="metrics"];
+            prometheus -> prometheus [label="metrics"];
+        }
+
+        subgraph cluster_station {
+            label="LOFAR2.0 Station";
+            node [shape=ellipse height=1 width=2 color=gray];
+            station_prometheus [label="prometheus"];
+            station_grafana [label="grafana"]
+            station_node_exporter [label="node_exporter"]
+            hardware
+            tango_devices;
+            exporter;
+            jupyter;
+
+            station_node_exporter -> station_prometheus [label="metrics"];
+            station_prometheus -> station_grafana [label="query results"];
+            station_grafana -> station_prometheus [label="metrics"];
+            hardware -> tango_devices [label="M&C"];
+            tango_devices -> exporter [label="metrics"];
+            exporter -> station_prometheus [label="metrics"];
+            station_prometheus -> jupyter [label="metrics"];
+            tango_devices -> jupyter [label="M&C"]
+        }
+
+        station_prometheus -> prometheus [label="metrics" minlen=1];
+        station_grafana -> user [label="dashboards"]
+        jupyter -> user [label="M&C"];
+        alerta -> slack [label="notifications"];
+
+        grafana -> user [label="dashboards"];
+        alerta -> user [label="notifications"];
+        slack -> user [label="notifications"];
+    }