diff --git a/docs/swarm/services.md b/docs/swarm/services.md index 8bd8184a..2eebc2a6 100644 --- a/docs/swarm/services.md +++ b/docs/swarm/services.md @@ -156,10 +156,9 @@ intended writer. ### Telemetry collector (OTEL) The swarm's collector receives from every hive's own collector and is the -only process that decides where telemetry goes: it writes the store above -and exports to `otel.endpoint`, doing both when both are configured. It -also holds the upstream credential, which is why no hive and no agent -needs one. +only process that decides where telemetry goes: it always writes the stores +above, and exports to `otel.endpoint` as well when that's set. It holds +the upstream credential, which is why no hive and no agent needs one. It runs in a `swarm-otel` container. Its `swarm.otel.port` defaults to `4319` rather than OTLP's usual `4318`, which the hive tier uses — swarm @@ -178,9 +177,11 @@ gateway either way. | `swarm.otel.domain` | Only to rename it — the default already resolves correctly for every hive in the swarm. | | `swarm.otel.port` | Only if something else on the services host already claims `4319`. | -With neither `otel.endpoint` nor the store enabled, this module refuses -the collector at eval — a tier that receives samples and drops them -looks healthy while losing data. +**Both store exporters are unconditional**, and `deploy.victoriametrics.enable` +doesn't gate them: that option says this host _runs_ the store, while the swarm +has one either way, reached by its swarm name through the gateway. Gating on it +once left a collector on any other host with no exporter at all — receiving from +every hive and dropping it, silently, because an absent exporter isn't an error. Agent-side configuration, and what a hive's own collector does, are in [`../scheduler/observability.md`](../scheduler/observability.md).