Files
serverAppConfigs/docs/Infrastructure/Alloy.md
T
Frank e3eb5334cb feat: initialize serverAppConfigs with podman stacks for Dankserver and Dankclaw
- Dankserver stack: RomM, Copyparty, Calibre-Web, node-exporter
- Dankclaw stack: Gluetun VPN (SearXNG tunnel), SearXNG+Valkey, ComfyUI
  (CPU backend), OpenWebUI, Hermes, Gitea+Postgres (migrated), Caddy
  reverse proxy, Grafana+Prometheus+Loki+Alloy observability
- Caddyfiles with .local hostname convention and basicauth homepage
- bind-mount storage policy, no named volumes
- deploy.sh mirroring vllmScripts git workflow (push -> pull -> restart -> health)
- docs/ Obsidian vault: per-service docs from frank-default-small research
  subagents (promtail EOL -> Alloy; gitea SECRET_KEY preservation; ComfyUI --cpu)
- bats test suite at 6 seams — 22 tests green
2026-08-13 20:19:41 -07:00

1.7 KiB

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 grafana/alloy:latest
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