Skip to content

Commit 8b2a3fd

Browse files
committed
k6runner: create spans for k6-backed check runs
1 parent 643fa69 commit 8b2a3fd

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

internal/k6runner/k6runner.go

Lines changed: 26 additions & 2 deletions
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.
@@ -92,15 +94,27 @@ var (
9294
func (r Processor) Run(ctx context.Context, registry *prometheus.Registry, logger logger.Logger, internalLogger zerolog.Logger) (bool, error) {
9395
k6runner := r.runner.WithLogger(&internalLogger)
9496

95-
// 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)
97+
k6Ctx, k6Span := trace.SpanFromContext(ctx).TracerProvider().Tracer("").Start(ctx, "k6 processor")
98+
result, err := k6runner.Run(k6Ctx, r.script)
9799
if err != nil {
100+
// TODO: This error message is okay to be Debug for local k6 execution, but should be Error for remote runners.
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)