An unmonitored cloud is a cloud waiting for problems. This episode builds MicroCloud's observability layer: the LXD Grafana dashboard, Prometheus exporters for LXD/Ceph/OVN, Zabbix integration, and alerting for node down, OSD down, and degraded clusters.

Episode 19 linked MicroCloud to the automation ecosystem. But automation without visibility is a blind flight — episode 20 builds monitoring & observability. You'll see what's happening in the cluster from one screen: healthy nodes, nearly full OSDs, or problematic networking. Episode 12 touched on Cluster Manager; this episode covers the standard observability layer you can use in production.
An analogy: pilots can't fly without instruments — altimeter, fuel gauge, and warning lights are the nervous system that keeps cockpit decisions informed. MicroCloud monitoring is your instrument panel; this episode installs it.
The common monitoring architecture:
MicroCloud node ──► exporter (metrik) ──► Prometheus (scrape)
│
▼
Alertmanager ──► alert channel
Grafana ──► dashboardThe LXD Grafana dashboard is the LXD project's official dashboard — visualizing cluster metrics:
This dashboard works with data from the LXD Prometheus exporter (exposed automatically via the LXD API) — available through MicroCloud Cluster Manager (episode 12) or a standalone deployment.
For standalone production observability, deploy Prometheus and Grafana on an admin node or a separate VM, then register scrape targets for each service:
snap install prometheus grafanaLXD, Ceph, and OVN each expose metrics on their endpoints — scrape them all from a single config file:
scrape_configs:
- job_name: lxd
metrics_path: /1.0/metrics
static_configs:
- targets: ["10.0.0.11:8443", "10.0.0.12:8443", "10.0.0.13:8443"]
- job_name: ceph
static_configs:
- targets: ["10.0.0.11:9283", "10.0.0.12:9283", "10.0.0.13:9283"]
- job_name: microovn
static_configs:
- targets: ["10.0.0.11:9473", "10.0.0.12:9473", "10.0.0.13:9473"]Key metrics per layer:
ceph_osd_up, ceph_pool_percent_used, cluster status.Zabbix is a classic monitoring alternative widely used by established infra teams — it supports MicroCloud through the LXD template and host agents:
If your team is already Zabbix-based, use it as the existing layer; Prometheus/Grafana remain great for modern ecosystems. Choose what best fits your team's skill set — not what's most popular.
Tip
You don't have to choose between Prometheus and Zabbix exclusively — both can run in parallel. What matters is one source of truth for alerting, so no alarms contradict each other.
Three alerts that are mandatory in MicroCloud:
up metric for LXD/Ceph/OVN targets; or LXD member heartbeats.ceph_osd_up == 0; Ceph will enter HEALTH_WARN/DEGRADED.min_size, but the redundancy factor drops.lsblk, logs), add a replacement OSD if permanently broken (episodes 6, 11).HEALTH_OK; PGs are degraded/stuck; OVN members offline.ceph -s, identify the problematic PGs, let recovery finish (episode 16).Example alert rules for all three:
groups:
- name: microcloud
rules:
- alert: NodeDown
expr: up{job="lxd"} == 0
- alert: OsdDown
expr: ceph_osd_up == 0
- alert: ClusterDegraded
expr: ceph_cluster_health != 1Warning
Alerts without a runbook just produce noise. Every critical alarm must have who gets paged, the first diagnostic step, and an escalation path. Alerting starts from documentation, not from YAML config.
targets in Prometheus.Key takeaways:
In the next episode, we'll cover roadmap & community — where MicroCloud is heading (a maturing Cluster Manager, MicroOVN 26.03 LTS, and the awaited 3.x LTS) and the community gathering places: Canonical documentation, the GitHub canonical/microcloud repo, discourse.ubuntu.com, and ubuntu.com/blog. You'll know where the latest news comes from!