Export logs over OTLP beside traces and metrics #839
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!839
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/xh55-otlp-logs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #810.
ward exec gatePASS on all six steps.What landed
An
otlploghttpexporter and aLoggerProvidersharing the resource the tracer already built, soservice.namecomes along for free and matches the trace side exactly.Stdout stays
@Olaf's weak preference, taken. Every line is now stored twice, once scraped and once over OTLP, with different attribute sets on the two rows.
Dropping stdout would make
kubectl logsuseless for these pods, and that is the path that still works when SigNoz is itself the thing that is unreachable — which is precisely the incident where the logs matter most. A duplicated line is cheaper than a blind incident.The acceptance asked for this to be written down because a future reader cannot infer it from the code.
docs/sirens-echo-log-export.mdcarries it.The fan-out
sloghas no fan-out, somultiHandlerwrites one record to every handler. Three properties matter and each has a test:WithAttrsorWithGroupdoes not reshape the handler it came from, so one logger's attributes cannot leak into another's.Records are cloned per destination, because a handler may retain or modify what it is given.
Verification against the acceptance
service.namematching its trace-side value" —TestALoggedLineIsExportedWithItsServiceNameruns a fake collector and asserts the body reaching/v1/logscarries bothservice.nameand the logged line.TestLogsAndTracesShareOneServiceNameasserts the same value on both signal paths.Checked by mutation, with a mutation that compiles. Pointing the bridge at a provider with no processor fails both tests. Removing the handler outright only breaks the build, which reports zero
--- FAILlines — the trap #653 recorded, so it is worth saying which mutation was used.Dependencies
otlploghttp,sdk/log, and theotelslogbridge. Resolving them moved otel core 1.44.0 → 1.45.0 and left the two existing exporters behind at 1.44.0, so those are pinned forward and the family is uniform again. All are officialgo.opentelemetry.iomodules already in this tree's dependency family.Two notes for the deploy side
sirens-echo-evalbuilds telemetry the same way, so its logs now export againstevaluationOTLPEndpoint()alongside its traces. Its dataset-on-stdout behaviour is unchanged and still covered byTestTheEvaluationRunnerKeepsLogsOffStdout.OTEL_EXPORTER_OTLP_ENDPOINTthe same way the trace and metric paths are, so there is no new variable and no deploy change required for this to take effect.