Skip to content

feat(install): observability stack provisioning (InfluxDB + Grafana) — co-located and separate-host #162

Description

@CameronBrooks11

What

Provision the observability stack (InfluxDB + Grafana) via the deployment engine, supporting two first-class topologies:

  • Co-located — stack runs on the control Pi alongside the runtime (current default).
  • Separate host — stack runs on a dedicated monitoring host; control Pis push telemetry to it (long-term preferred form).

Split out of #137 (G3): the observability half is Docker/topology-heavy and has a very different blocker profile from telemetry-export provisioning.

Context

Deep assessment (2026-07) established that the control Pi only needs the telemetry-export service pointed at an InfluxDB URL + token (that is #137). Where InfluxDB/Grafana actually run is this issue. Observability ships today as the anolis-<ver>-observability.tar.gz release asset deployed via docker compose; workbench currently runs it on the operator's host (a de-facto separate-host).

Scope / open questions

  • Docker prerequisite: install.sh installs only i2c-tools; nothing installs Docker. Decide graceful-skip-if-absent vs fail-fast; documented operator precondition. install.sh must NOT apt-install Docker (offline guarantee).
  • arm64 images: verify the influxdb/grafana image tags publish linux/arm64 manifests; pin by digest.
  • Co-located mode: run docker compose as root (never add the nologin anolis user to the docker group). Note runtime/monitoring resource contention on the control Pi.
  • Separate-host mode: provisioning target is the monitoring host, not the control Pi — define the invocation path.
  • Extract/start flag: a dedicated flag — NOT the global --no-start (which gates the runtime's start + health; overloading it would stop the runtime).
  • Secrets: InfluxDB admin token + Grafana creds via a 0600 root EnvironmentFile / generated; never logged (Define telemetry redaction/classification + secret-safe logging policy #96); no insecure defaults that ship silently.
  • Offline images: docker save/load of arm64 images for air-gap — no CI produces these today; deferred to Define packaging & distribution strategy for shipped components (future) #100.
  • Rollback/uninstall: observability out of the binaries-only rollback contract; do_uninstall gains docker compose down.

Child of #139.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions