Skip to content

Commit 10314b2

Browse files
committed
k6runner: create spans for k6-backed check runs
1 parent df44947 commit 10314b2

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

internal/k6runner/k6runner.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)