grafana / k6

A modern load testing tool, using Go and JavaScript - https://k6.io
GNU Affero General Public License v3.0
23.89k stars 1.2k forks source link

OpenTelemetry metrics output #2557

Open pragmaticivan opened 2 years ago

pragmaticivan commented 2 years ago

Feature Description

Add support for exporting metrics via OTLP in addition to Statsd

Suggested Solution (optional)

https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp

GO SDK

Already existing or connected issues / PRs (optional)

No response

na-- commented 2 years ago

Thanks for opening the issue and sorry for the slow response! I haven't followed OpenTelemetry closely, so I am very out of touch where it's at in terms of features, stabilization and adoption. It's something we'll probably want to have support for in the k6 core in the future, but I can't give an estimate on when exactly that will be.

We have slowly been refactoring and improving the metrics internals in k6 over the last several releases to make such efforts easier and cleaner (https://github.com/grafana/k6/pull/2071, https://github.com/grafana/k6/issues/2330, https://github.com/grafana/k6/pull/2426, https://github.com/grafana/k6/pull/2463, https://github.com/grafana/k6/pull/2433, https://github.com/grafana/k6/pull/2442 among others), and we'll continue to do so for a while with things like https://github.com/grafana/k6/issues/1831, https://github.com/grafana/k6/issues/1889, https://github.com/grafana/k6/issues/572, https://github.com/grafana/k6/issues/2430, etc. The near-term goal is to natively support OpenMetrics / Prometheus metrics (https://github.com/grafana/k6/issues/858) in the k6 core, though probably just through remote write initially (https://github.com/grafana/k6/issues/1761). OTLP will probably be on the agenda relatively soon after that, though I can't make any promises yet...

The good news is that you don't have to wait for us to support it in the core before you can use it with k6! k6 supports output extensions through xk6 and you can write one for OTLP metrics yourself. It may be a bit rough or require some hacks before we've finished with all of the planned refactoring tasks I linked to above, but something should still be possible. For examples, see https://github.com/grafana/xk6-output-prometheus-remote or other output extensions in https://k6.io/docs/extensions/

gurudatta-carbon commented 1 year ago

any update on this? most of the grafana offered products support opentelemetry, it would be nice if k6 can support opentelemetry integration for metrics, traces.

codebien commented 5 months ago

We had a quick internal sync around this issue. We intend to wrap the OTel Go SDK in a metric output. The path should be as usual to have an output extension (e.g. xk6-output-open-telemetry) then move it to the core. Potentially, directly to the core as an experimental output if we are confident enough.

The output should provide the way to configure the aggregation temporality via an option. Ideally, both, delta and cumulative will be supported but if some order of precedence is required then cumulative will be the first. As it is the natural way for supporting Prometheus.

mshoosht-cisco commented 4 months ago

We had a quick internal sync around this issue. We intend to wrap the OTel Go SDK in a metric output. The path should be as usual to have an output extension (e.g. xk6-output-open-telemetry) then move it to the core. Potentially, directly to the core as an experimental output if we are confident enough.

Is there a branch or new repo with this work?

codebien commented 4 months ago

Hey @mshoosht-cisco, no there isn't yet any concrete implementation available. Would you like to contribute or just try to use it?

bbortt commented 3 months ago

@codebien if you're looking for alpha testers, I am here 😉

olegbespalov commented 1 month ago

Hey there!

I'm happy to update this issue with the details that the core team actually started the work on the open telemetry output.

We've created the extension repository https://github.com/grafana/xk6-output-opentelemetry

After a few PRs (https://github.com/grafana/xk6-output-opentelemetry/pull/3), it will actually start sending some metrics to the OpenTelemetry.

There are still many things to do, but we aim to include this output as the experimental in the core.

Any feedback is welcome!

cc: @mshoosht-cisco @bbortt

olegbespalov commented 1 week ago

Hey there again!

I want to update you that we finished the first iteration of the work for the open telemetry output extension (v0.1.0). It's available under the https://github.com/grafana/xk6-output-opentelemetry repository, and you should compile the k6 with it to use it.

Our plan is to wait for initial feedback. If nothing critical is spotted with the following k6 v0.53 (and a bit earlier in the latest docker), we will make the extension part of the k6 an experimental output (https://github.com/grafana/xk6-output-opentelemetry/issues/1).

We want to get the usage feedback, so if you have the capacity, please go ahead and try it. If you see any bug or a possible improvement, feel free to open the issue directly in the GitHub repository or write a comment in the issue: https://github.com/grafana/xk6-output-opentelemetry/issues/1.

Community suggestions/thoughts are especially welcome for the issue https://github.com/grafana/xk6-output-opentelemetry/issues/12, where we define the way of handling K6's rate metrics.