Technical Briefing – unbound‑dashboard*

The Problem

Operating a DNS resolver with Unbound on a Raspberry Pi generates valuable metrics (query rates, cache hits, latency) that are not exposed by default to monitoring stacks. Without a dedicated collector and visualisation, operators must rely on ad‑hoc scripts or generic system dashboards, making it hard to spot performance regressions or abuse.

What This Does

The repository supplies a ready‑to‑import Grafana dashboard that visualises Unbound‑specific metrics scraped by a custom Go exporter and stored in Prometheus. The only artefacts in the repo are documentation and static assets:

FileRole
README.mdInstallation guide for Grafana, Prometheus, and the (external) Unbound exporter; includes a download badge and a screenshot of the final dashboard.
info.mdDescribes each panel, metric names, and recommended alerts.
release.mdChangelog for dashboard revisions.
screenshots/PNG of the dashboard and a markdown index.
LICENSEMIT‑style license.

No source code for the exporter is shipped; the README references a separate Go project (“Unbound exporter in Go”) that must be obtained elsewhere.

How To Use It

Provision the stack – follow the exact commands in README.md:

Grafana OSS (arm64)

wget https://dl.grafana.com/oss/release/grafana11.1.0arm64.deb sudo apt install musl sudo dpkg -i grafana11.1.0arm64.deb sudo systemctl daemon-reload sudo systemctl enable --now grafana-server

Prometheus (Debian package)

sudo apt install prometheus Configure Prometheus – replace the default /etc/prometheus/prometheus.yml with the trimmed file supplied in the release assets (referenced in the README). This config enables scraping only the Unbound exporter on the default 5m interval and removes node‑exporter jobs.

sudo cp prometheus.yml /etc/prometheus/prometheus.yml sudo systemctl restart prometheus Deploy the Unbound exporter – the repository does not contain the binary or source. Obtain the pre‑built binary from the linked unbound-redis repo or build it from its own Go source. Typical steps (not in this repo) would be:

go build -o unbound-exporter ./cmd/exporter ./unbound-exporter --listen :9115

Ensure the exporter is reachable at the address defined in prometheus.yml. Import the dashboard – in Grafana UI (http://<RP‑IP>:3000), use Create → Import and paste the JSON payload attached to the latest release (the README points to a download badge). The panels will automatically query the unbound series collected by Prometheus. Optional – Loki – The README mentions Loki for log aggregation, but no Loki configuration files are present. Deploy Loki separately if log correlation is required.

Real‑World Use

A small ISP runs Unbound on a fleet of Raspberry Pi DNS resolvers. By installing the stack above, they obtain a single Grafana view showing query volume per client subnet, cache‑hit ratios, and latency spikes. Alerts defined in info.md trigger a webhook to their ticketing system when cache‑hit drops below 80 % for more than 10 minutes.

Code Health & Issues

Medium – Missing exporter source – No Go files or binaries are in the repo; users must locate them elsewhere, adding integration risk. Medium – No automated tests or CI – Repository lacks test.go, a workflow file, or any build script, so regressions in the dashboard JSON are not caught automatically. Low – Documentation gaps – info.md and release.md are present, but there is no explicit version pinning for the exporter binary, nor a checksum to verify downloads. Low – No Loki assets – The README mentions Loki, yet no Loki config or dashboard panels are provided, which may cause confusion.

No obvious security secrets are stored; the license file is present (MIT‑style). The Markdown files are well‑formatted and the screenshots accurately reflect the final UI.

The Bottom Line

unbound-dashboard delivers a complete, ready‑to‑import Grafana view for Unbound metrics, but the core exporter is external to the repository, and the project lacks test automation. It is suitable for small‑to‑medium deployments where the operator can source the exporter independently and is comfortable managing a manual update process. For teams that require reproducible builds or CI validation, the missing pieces will need to be added.