Skip to content

feat: add OpenTelemetry support for task execution#2933

Open
lwencel-priv wants to merge 1 commit into
go-task:mainfrom
Margays:otel-support
Open

feat: add OpenTelemetry support for task execution#2933
lwencel-priv wants to merge 1 commit into
go-task:mainfrom
Margays:otel-support

Conversation

@lwencel-priv

@lwencel-priv lwencel-priv commented Jul 23, 2026

Copy link
Copy Markdown

Introduce OpenTelemetry-based tracing to the project, enabling distributed tracing and improved observability for task and command execution. It adds a new telemetry initialization module, instruments core execution paths with trace spans and attributes, and updates dependencies to include the necessary OpenTelemetry packages.

Example output with export OTEL_TRACES_EXPORTER=console:

{"Name":"shell[0]","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"d1fe586ea540da61","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"f4849205374edb00","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:29:54.84908243Z","EndTime":"2026-07-23T20:30:17.75387468Z","Attributes":[{"Key":"command.index","Value":{"Type":"STRING","Value":"0"}},{"Key":"command.defer","Value":{"Type":"BOOL","Value":false}},{"Key":"command.type","Value":{"Type":"STRING","Value":"shell"}},{"Key":"command.shell","Value":{"Type":"STRING","Value":"golangci-lint run"}},{"Key":"command.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":0,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"lint","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"f4849205374edb00","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"d22a17d82e64dc8a","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:29:54.556372703Z","EndTime":"2026-07-23T20:30:17.753891055Z","Attributes":[{"Key":"task.name","Value":{"Type":"STRING","Value":"lint"}},{"Key":"task.call","Value":{"Type":"STRING","Value":"lint"}},{"Key":"task.indirect","Value":{"Type":"BOOL","Value":true}},{"Key":"task.silent","Value":{"Type":"BOOL","Value":false}},{"Key":"task.watch","Value":{"Type":"BOOL","Value":false}},{"Key":"task.dir","Value":{"Type":"STRING","Value":"/workspaces/task"}},{"Key":"task.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":1,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"task:lint","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"d22a17d82e64dc8a","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"8620918a29070478","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:29:54.556202746Z","EndTime":"2026-07-23T20:30:17.753895847Z","Attributes":[{"Key":"command.index","Value":{"Type":"STRING","Value":"0"}},{"Key":"command.defer","Value":{"Type":"BOOL","Value":false}},{"Key":"command.type","Value":{"Type":"STRING","Value":"task"}},{"Key":"command.task","Value":{"Type":"STRING","Value":"lint"}},{"Key":"command.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":1,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"shell[0]","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"92b588e810fc1b46","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"767f71bb024d84cf","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:30:17.75532809Z","EndTime":"2026-07-23T20:30:24.206736563Z","Attributes":[{"Key":"command.index","Value":{"Type":"STRING","Value":"0"}},{"Key":"command.defer","Value":{"Type":"BOOL","Value":false}},{"Key":"command.type","Value":{"Type":"STRING","Value":"shell"}},{"Key":"command.shell","Value":{"Type":"STRING","Value":"go install gotest.tools/gotestsum@latest"}},{"Key":"command.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":0,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"gotestsum:install","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"767f71bb024d84cf","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"cfe7c036baeaa240","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:30:17.754852759Z","EndTime":"2026-07-23T20:30:24.206750147Z","Attributes":[{"Key":"task.name","Value":{"Type":"STRING","Value":"gotestsum:install"}},{"Key":"task.call","Value":{"Type":"STRING","Value":"gotestsum:install"}},{"Key":"task.indirect","Value":{"Type":"BOOL","Value":true}},{"Key":"task.silent","Value":{"Type":"BOOL","Value":false}},{"Key":"task.watch","Value":{"Type":"BOOL","Value":false}},{"Key":"task.dir","Value":{"Type":"STRING","Value":"/workspaces/task"}},{"Key":"task.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":1,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"shell[0]","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"4e2907facf929fe9","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"cfe7c036baeaa240","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:30:24.857795412Z","EndTime":"2026-07-23T20:30:45.571448546Z","Attributes":[{"Key":"command.index","Value":{"Type":"STRING","Value":"0"}},{"Key":"command.defer","Value":{"Type":"BOOL","Value":false}},{"Key":"command.type","Value":{"Type":"STRING","Value":"shell"}},{"Key":"command.shell","Value":{"Type":"STRING","Value":"gotestsum -f 'pkgname' ./..."}},{"Key":"command.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":0,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"test","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"cfe7c036baeaa240","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"ae9c8548f08f3cef","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:30:17.754370678Z","EndTime":"2026-07-23T20:30:45.571468171Z","Attributes":[{"Key":"task.name","Value":{"Type":"STRING","Value":"test"}},{"Key":"task.call","Value":{"Type":"STRING","Value":"test"}},{"Key":"task.indirect","Value":{"Type":"BOOL","Value":true}},{"Key":"task.silent","Value":{"Type":"BOOL","Value":false}},{"Key":"task.watch","Value":{"Type":"BOOL","Value":false}},{"Key":"task.dir","Value":{"Type":"STRING","Value":"/workspaces/task"}},{"Key":"task.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":2,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"task:test","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"ae9c8548f08f3cef","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"8620918a29070478","TraceFlags":"01","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:30:17.753916847Z","EndTime":"2026-07-23T20:30:45.571470421Z","Attributes":[{"Key":"command.index","Value":{"Type":"STRING","Value":"1"}},{"Key":"command.defer","Value":{"Type":"BOOL","Value":false}},{"Key":"command.type","Value":{"Type":"STRING","Value":"task"}},{"Key":"command.task","Value":{"Type":"STRING","Value":"test"}},{"Key":"command.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":1,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}
{"Name":"default","SpanContext":{"TraceID":"807d532209df37b0b3855588e976a287","SpanID":"8620918a29070478","TraceFlags":"01","TraceState":"","Remote":false},"Parent":{"TraceID":"00000000000000000000000000000000","SpanID":"0000000000000000","TraceFlags":"00","TraceState":"","Remote":false},"SpanKind":1,"StartTime":"2026-07-23T20:29:54.555981289Z","EndTime":"2026-07-23T20:30:45.571471588Z","Attributes":[{"Key":"task.name","Value":{"Type":"STRING","Value":"default"}},{"Key":"task.call","Value":{"Type":"STRING","Value":"default"}},{"Key":"task.indirect","Value":{"Type":"BOOL","Value":false}},{"Key":"task.silent","Value":{"Type":"BOOL","Value":false}},{"Key":"task.watch","Value":{"Type":"BOOL","Value":false}},{"Key":"task.dir","Value":{"Type":"STRING","Value":"/workspaces/task"}},{"Key":"task.outcome","Value":{"Type":"STRING","Value":"executed"}}],"Events":null,"Links":null,"Status":{"Code":"Ok","Description":""},"DroppedAttributes":0,"DroppedEvents":0,"DroppedLinks":0,"ChildSpanCount":2,"Resource":[{"Key":"service.name","Value":{"Type":"STRING","Value":"unknown_service:task"}},{"Key":"telemetry.sdk.language","Value":{"Type":"STRING","Value":"go"}},{"Key":"telemetry.sdk.name","Value":{"Type":"STRING","Value":"opentelemetry"}},{"Key":"telemetry.sdk.version","Value":{"Type":"STRING","Value":"1.44.0"}}],"InstrumentationScope":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null},"InstrumentationLibrary":{"Name":"github.com/go-task/task/v3","Version":"","SchemaURL":"","Attributes":null}}

@lwencel-priv
lwencel-priv force-pushed the otel-support branch 2 times, most recently from 95caee9 to def6093 Compare July 23, 2026 20:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant