catalog / docker.io/grafana/alloy / criteria

alloy — validation criteria

Per-image acceptance criteria for the docker.io/grafana/alloy profile (Grafana Alloy, the OpenTelemetry collector / agent). Validated against …@sha256:32913cb… (tag v1.16.2), derived by drop-test. alloy already runs cap_drop: ALL and as a non-root user (uid 473), so there is no capability reduction to derive — this profile covers the filesystem dimension.

Representative workload / correctness check

profiles/workloads/alloy.sh confirms alloy loads and runs its pipeline under --read-only: /-/ready returns 200 and /metrics exposes alloy_* metrics (components loaded and running). Because alloy fatals at startup if its storage.path is not writable, "ready + a live pipeline" already exercises the storage.path write path — this is real function, not a bare liveness ping.

alloy is distroless (no shell, no curl), so it is probed from a sidecar container sharing alloy's network namespace (docker run --network container:<alloy> + a pinned multi-arch curl), reaching it on localhost:12345 — the same reusable helper loki uses (testdata/drop-test/correctness/lib/sidecar.sh in container-sec-derive). A sidecar (not a host-side probe) works for any target network mode, independent of daemon location, and never touches alloy's filesystem — no confound for the fs dimension.

capabilities — derived by drop-test

filesystem — derived by drop-test

Coverage & confidence (moderate)

Per ADR-018, moderate — Alloy runs configurable collection pipelines, and the derived zero-cap minimum is for the exercised pipeline. Other collectors (process, ebpf) can need SYS_PTRACE/BPF, a surface the workload does not bound, so coverage: partial.

Scope (run_config + out-of-band conditions)