mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 07:26:51 +00:00
Alloy carried no log pipeline at all: no loki.source, loki.write or loki.process anywhere in the config, against a working metrics and OTLP path. Any deployment fed through Alloy rather than the reference collector therefore sent traces and metrics but no logs, so log-to-trace correlation was unavailable there even though both ends of the link were configured. Logs now leave through the same otlphttp exporter as the other two signals, so all three carry one resource identity. Alloy's own filelog receiver would have been the closest match to the reference collector, but it is still public-preview and refuses to load unless the service is started with --stability.level=public-preview, which would mean editing the unit on a box reachable only by RunCommand. The Loki source components are generally available, so they are used and bridged into OTLP by otelcol.receiver.loki; the service needs no extra flag. That bridge hands over an empty resource and puts everything on the log record, so the transform sets the resource attributes in log context. service.instance.id is concatenated in from XRPLD_HOST_LABEL because OTTL has no env() converter, and it is a resource attribute rather than a record one because only resource attributes are promoted to indexed Loki labels. It must equal the node's own service_instance_id or the logs join nothing. devnet writes one flat file rather than a per-node directory, so identity cannot be read off the path the way the docker collector does it; XRPLD_LOG_GLOB overrides the path for other layouts. The line is parsed for its own timestamp, severity and trace context, and trace_id/span_id are set on the first-class OTLP record fields so Grafana links a log to its trace without re-parsing the body. Lines emitted outside a sampled span keep an empty trace id rather than an invalid one. Also carry the node-identity operators into the Grafana Cloud collector variant, align this config's log directory with its service_instance_id, and rename the deprecated otlphttp/filelog collector component names. Alloy's otelcol.exporter.otlphttp is that product's own name and is unchanged.