Skip to content

Grafana Alloy

OpenTelemetry Collector distribution with programmable pipelines. This app runs the HassOS scenario from alloy-resources, vendored into the image so it runs self-contained. The Alloy UI is at http://<homeassistant_ip>:12345.

What it collects

The scenario is split into a base (the metric/log sinks + shared log pipeline) plus toggleable input pipelines. run.sh assembles the active config from the enabled inputs.

Toggle Default Input
enable_unix true node_exporter (unix) metrics.
enable_process true process_exporter metrics.
enable_docker true cAdvisor metrics + Docker container logs.
enable_journal true systemd journal logs.
scrape_exporter false Scrape the Home Assistant Exporter add-on at :9878.
scrape_core false Scrape HA core /api/prometheus (no auth, job homeassistant).

Options

Each option maps to the environment variable the scenario reads.

Key Env var Default Notes
metrics_url METRICS_PRIMARY_URL Prometheus remote_write URL.
metrics_tenant METRICS_PRIMARY_ORG Sent as X-Scope-OrgID (multi-tenant Mimir).
logs_url LOGS_PRIMARY_URL Loki push URL.
logs_tenant LOGS_PRIMARY_ORG Loki tenant_id.
cluster_name CLUSTER_NAME HomeAssistant cluster external label on every series.
env ENV env external label.
region REGION region external label.
instance INSTANCE Override the instance label on all metrics (host name).

Protection mode

Disable Protection mode so the Docker (cAdvisor + log) components can reach the Docker socket (docker_api: true). The rest of the pipeline runs regardless.

Examples

Local Mimir + Loki (multi-tenant)

metrics_url: "http://mimir.lan:9009/api/v1/push"
metrics_tenant: "home"
logs_url: "http://loki.lan:3100/loki/api/v1/push"
logs_tenant: "home"
cluster_name: "house"
env: "prod"
region: "home-lab"

Metrics only

metrics_url: "http://prometheus.lan:9090/api/v1/write"
logs_url: ""        # leave empty to skip the logs pipeline target
cluster_name: "house"