swarm-otel: say what is measured about _HOSTNAME, not a mechanism that is wrong

The previous commit's comments explained `_HOSTNAME` being `nixos` with
"no container sets `networking.hostName`", read off a `git grep` of this
tree. That grep answers a question about our source; the default is
nixpkgs': `nixos/modules/virtualisation/nixos-containers.nix` sets
`networking.hostName = mkDefault name` for every `containers.<name>`
guest, which is how every swarm service container here is declared.

So the stated cause is wrong, and why the default does not reach these
guests is still open. What is measured is narrower: an agent container
reports `nixos`, and `_MACHINE_ID` is per-machine by construction. The
comments now claim only that, and say the rest is unresolved.

The code is unchanged — `_MACHINE_ID` in `_stream_fields` is correct
regardless of which explanation turns out to be true.

Refs #4304
This commit is contained in:
atlas 2026-09-12 14:38:35 +02:00
commit 57aedc82ae

View file

@ -1107,10 +1107,12 @@ in
# "everything except user sessions" is not expressible. # "everything except user sessions" is not expressible.
# #
# Attribution is journald's either way — these fields are # Attribution is journald's either way — these fields are
# written by it rather than by the logging process. ⚠️ But # written by it rather than by the logging process. ⚠️ Use
# `_MACHINE_ID` is the only one that separates containers: # `_MACHINE_ID` to tell machines apart, not `_HOSTNAME`: an
# none sets `networking.hostName`, so `_HOSTNAME` is the # agent container reports the NixOS default `nixos`. Whether
# NixOS default `nixos` everywhere but the host itself. # every container does, and why the `networking.hostName`
# nixos-containers sets does not reach them, is unresolved —
# so rely on the field that is per-machine by construction.
// lib.optionalAttrs collectLogs { // lib.optionalAttrs collectLogs {
journald = { journald = {
directory = hostJournalDir; directory = hostJournalDir;
@ -1158,11 +1160,13 @@ in
# literal `missing _msg field` as its message and text search # literal `missing _msg field` as its message and text search
# finds nothing, while ingest keeps answering 200. # finds nothing, while ingest keeps answering 200.
# `_stream_fields` is one stream per unit per machine. # `_stream_fields` is one stream per unit per machine.
# `_MACHINE_ID` is what makes that true: `_HOSTNAME` reads # `_MACHINE_ID` is what makes that true — it is per-machine by
# `nixos` in every container, so naming it alone merges every # construction, where `_HOSTNAME` is only as distinct as the
# container's stream for a unit name into one — which is how # hostnames happen to be, and an agent container's is the
# two collectors sharing `opentelemetry-collector.service` # NixOS default `nixos`. Keying on the hostname alone merges
# became one series. # the streams of any two machines sharing one, which is what
# the host and containerised `opentelemetry-collector.service`
# would do.
"otlphttp/victorialogs" = { "otlphttp/victorialogs" = {
logs_endpoint = logs_endpoint =
logsPushUrl + "?_msg_field=MESSAGE&_stream_fields=_HOSTNAME,_MACHINE_ID,_SYSTEMD_UNIT"; logsPushUrl + "?_msg_field=MESSAGE&_stream_fields=_HOSTNAME,_MACHINE_ID,_SYSTEMD_UNIT";