# Alloy Alloy is Grafana's log and telemetry shipper. It replaces Promtail (EOL 2026-03-02). One Alloy instance runs per host and forwards container and journal logs to Loki, and optionally metrics to Prometheus. **Hosts:** Dankclaw + Dankserver (one per host) — **Docs:** https://grafana.com/docs/alloy/latest ## Facts (from research) | Item | Value | |------|-------| | Image | `franksdank/alloy:latest` (local build with a static busybox healthcheck) | | Port | none published (push-only) | | Config | River syntax, `config.alloy` | | Successor to | Promtail (EOL 2026-03-02) | | Inputs | journald socket, container log files | | Output | Loki push endpoint | ## Why Alloy and not Promtail Promtail reached end-of-life on 2026-03-02. Grafana Labs directs new installs to Alloy. This stack uses Alloy from day one. ## Configuration River config at `shared/alloy/config.alloy`: - Read journald logs from the host's `/run/systemd/journal/socket`. - Read container logs from `/var/lib/containers/...` (podman) or the docker path. - Forward to `http://loki:3100/loki/api/v1/push` with `host` and `job` labels. ## Volumes | Container path | Host path (convention) | |----------------|------------------------| | `/etc/alloy/config.alloy` | `shared/alloy/config.alloy` (bind mount) | | `/run/systemd/journal/socket` | host journald socket (read-only) | | `/var/log` | host logs (read-only) | ## Gotchas - The journald socket mount is required for journal scraping. - Container log paths differ between docker (`/var/lib/docker/containers`) and podman (`/var/lib/containers/storage/...`); point the config at the right one per host. - One Alloy per host; do not run a single instance that tries to reach both hosts' logs. ## See Also - [[Loki]] — the log backend - [[Observability]] — the full stack