@@ -16,6 +16,8 @@ import (
1616 "github.com/prometheus/common/model"
1717 "github.com/rs/zerolog"
1818 "github.com/spf13/afero"
19+ "go.opentelemetry.io/otel/attribute"
20+ "go.opentelemetry.io/otel/trace"
1921)
2022
2123// Script is a k6 script that a runner is able to run, with some added instructions for that runner to act on.
@@ -93,14 +95,26 @@ func (r Processor) Run(ctx context.Context, registry *prometheus.Registry, logge
9395 k6runner := r .runner .WithLogger (& internalLogger )
9496
9597 // TODO: This error message is okay to be Debug for local k6 execution, but should be Error for remote runners.
96- result , err := k6runner .Run (ctx , r .script )
98+ k6Ctx , k6Span := trace .SpanFromContext (ctx ).TracerProvider ().Tracer ("" ).Start (ctx , "k6 run" )
99+ result , err := k6runner .Run (k6Ctx , r .script )
97100 if err != nil {
98101 internalLogger .Debug ().
99102 Err (err ).
100103 Msg ("k6 script exited with error code" )
104+ k6Span .RecordError (err )
105+ k6Span .End ()
101106 return false , err
102107 }
103108
109+ k6Span .SetAttributes (
110+ attribute .String ("error" , result .Error ),
111+ attribute .String ("errorCode" , result .ErrorCode ),
112+ attribute .Int ("metricsSizeBytes" , len (result .Metrics )),
113+ attribute .Int ("logsSizeBytes" , len (result .Logs )),
114+ )
115+
116+ k6Span .End ()
117+
104118 // If only one of Error and ErrorCode are non-empty, the proxy is misbehaving.
105119 switch {
106120 case result .Error == "" && result .ErrorCode != "" :
@@ -126,11 +140,15 @@ func (r Processor) Run(ctx context.Context, registry *prometheus.Registry, logge
126140 }()
127141 }
128142
143+ _ , reportTelemetrySpan := trace .SpanFromContext (ctx ).TracerProvider ().Tracer ("" ).Start (ctx , "report telemetry" )
144+
129145 // Send logs before metrics to make sure logs are submitted even if the metrics output is not parsable.
130146 if err := k6LogsToLogger (result .Logs , logger ); err != nil {
131147 internalLogger .Debug ().
132148 Err (err ).
133149 Msg ("cannot load logs to logger" )
150+ reportTelemetrySpan .RecordError (err )
151+ reportTelemetrySpan .End ()
134152 return false , err
135153 }
136154
@@ -143,16 +161,22 @@ func (r Processor) Run(ctx context.Context, registry *prometheus.Registry, logge
143161 internalLogger .Debug ().
144162 Err (err ).
145163 Msg ("cannot extract metric samples" )
164+ reportTelemetrySpan .RecordError (err )
165+ reportTelemetrySpan .End ()
146166 return false , err
147167 }
148168
149169 if err := registry .Register (& collector .collector ); err != nil {
150170 internalLogger .Error ().
151171 Err (err ).
152172 Msg ("cannot register collector" )
173+ reportTelemetrySpan .RecordError (err )
174+ reportTelemetrySpan .End ()
153175 return false , err
154176 }
155177
178+ reportTelemetrySpan .End ()
179+
156180 // https://github.com/grafana/sm-k6-runner/blob/b811839d444a7e69fd056b0a4e6ccf7e914197f3/internal/mq/runner.go#L51
157181 switch result .ErrorCode {
158182 case "" :
0 commit comments