Files
serverAppConfigs/serverAppConfigs-docs/Infrastructure/Alloy.md
T
Frank 93d1181fee docs: OKF v0.1 compliance pass + fact-check + 3 research briefs
- Migrate all 127 non-reserved docs to OKF v0.1 frontmatter (type/description/tags/timestamp); fix 13 YAML issues, 2 duplicate-FM blocks, strip reserved-page FM
- Restructure log.md to OKF (## YYYY-MM-DD, newest-first)
- Fact-check against scripts/AGENTS.md ground truth: fix 6 false 'Active' banners on retired runbooks, 96->114 GiB GTT, deployment.md vs deploy-plan.py/deploy-remote.sh, Deployment Flow frank-medium=Quadlet, Calibre 9.9.0->9.15.0 + CVE-2025-7404 conflation, Copyparty v1.20.24, RomM 5.3.0 breaking change
- Move *arr docs to new FrankBook-Pro/ section (git mv, link-safe)
- Write active runbook bodies from ground truth (frank-large, frank-small)
- Add 3 research briefs + HTML report: Local TTS and Voice Cloning, AI Job Search and Resume Tools, Most Popular Self-Hosted AI Apps (Jun-Sep 2026)
- Add upstream-version rows to ComfyUI/OpenWebUI/Hermes app docs
- All 336 tests pass; 136 pages, 0 unresolved wikilinks
2026-09-22 02:09:41 -07:00

2.8 KiB

type, description, tags, timestamp
type description tags timestamp
reference Alloy is Grafana's log and telemetry shipper.
infrastructure
2026-09-11

Alloy

Alloy is Grafana's log and telemetry shipper. It replaces Promtail (EOL 2026-03-02). It forwards container and journal logs to Loki.

Host: Dankclaw (one instance per host) — Port: 12345 (loopback) — Docs: https://grafana.com/docs/alloy/latest

Facts

Item Value
Image franksdank/alloy:latest (local build: upstream + a static busybox for the healthcheck)
Published 127.0.0.1:12345 → 12345 (its own UI/health port)
Unit dankclaw/observability/quadlet/alloy.container → alloy.service
Config shared/alloy/config.alloy, installed to /opt/alloy/config/
Inputs host journald socket, podman container logs, /var/log
Output http://loki:3100/loki/api/v1/push
Successor to Promtail (EOL 2026-03-02)

Why Alloy and not Promtail

Promtail reached end-of-life on 2026-03-02 and Grafana Labs directs new installs to Alloy. This stack uses Alloy from day one.

Configuration

shared/alloy/config.alloy is the source of truth:

  • Reads journald logs from the host's /run/systemd/journal/socket.
  • Reads container logs from /var/lib/containers/storage/... (podman).
  • Forwards to Loki with job labels.

Volumes

Container path Host path
/etc/alloy /opt/alloy/config
/run/systemd/journal/socket host journald socket (read-only)
/var/log host logs (read-only)
/var/lib/containers podman storage (read-only)

The UI port is published on purpose

Alloy's UI listens on the container's own 127.0.0.1:12345 by default, and Alloy 1.x refuses to configure the ui service from a config block ("service ui does not support being configured"). Under compose that meant no reachable health endpoint at all: the homepage status card for alloy read down continuously and a deploy had nothing to wait on. The unit therefore passes --server.http.listen-addr=0.0.0.0:12345 and publishes 127.0.0.1:12345 — same posture as the other three: reachable from the host and from Caddy's network, and from nothing off-host. Alloy has no authentication, which is exactly why it is not published wider.

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.
  • The unit Wants=/After= loki.service: without a reachable Loki the write client fails and the pipeline backs up.

See Also

  • Loki — the log backend
  • Observability — the full stack, including what is still unconfigured