From bbe7029d0a211c49bb6b01641bf582f00de34324 Mon Sep 17 00:00:00 2001 From: Andre Pereira Date: Fri, 18 Oct 2024 13:10:22 +0100 Subject: [PATCH] Tempo: Add support for /api/v2/traces/ and partial traces in Trace View (#94267) * Request trace by id using v2, fallback for v1 when 404 * Show partial traces badge in Trace View * update go work sum * Fix tests * some linting * Fix tests and try to ignore linter * Move no lint * nolint:bodyclose * merge main * Fix null tags in array * Fix test * Update go.sum * Update go.sum --- go.mod | 14 +- go.work.sum | 155 ++ pkg/build/go.mod | 6 +- pkg/build/go.sum | 12 +- pkg/promlib/go.mod | 4 +- pkg/promlib/go.sum | 9 +- pkg/tsdb/tempo/testData/tempo_proto_response | Bin 6668 -> 0 bytes pkg/tsdb/tempo/testData/trace.json | 1354 +++++++++++++++++ pkg/tsdb/tempo/trace.go | 147 +- pkg/tsdb/tempo/trace_test.go | 25 +- pkg/tsdb/tempo/trace_transform.go | 185 ++- pkg/tsdb/tempo/trace_transform_test.go | 71 +- .../TracePageHeader/TracePageHeader.tsx | 7 + 13 files changed, 1785 insertions(+), 204 deletions(-) delete mode 100644 pkg/tsdb/tempo/testData/tempo_proto_response create mode 100644 pkg/tsdb/tempo/testData/trace.json diff --git a/go.mod b/go.mod index d61d779f5ad..6138c6c3f49 100644 --- a/go.mod +++ b/go.mod @@ -79,7 +79,7 @@ require ( github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code github.com/grafana/dataplane/examples v0.0.1 // @grafana/observability-metrics github.com/grafana/dataplane/sdata v0.0.9 // @grafana/observability-metrics - github.com/grafana/dskit v0.0.0-20240311184239-73feada6c0d7 // @grafana/grafana-backend-group + github.com/grafana/dskit v0.0.0-20240801171758-736c44c85382 // @grafana/grafana-backend-group github.com/grafana/gofpdf v0.0.0-20231002120153-857cc45be447 // @grafana/sharing-squad github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e // @grafana/grafana-operator-experience-squad github.com/grafana/grafana-aws-sdk v0.31.3 // @grafana/aws-datasources @@ -98,13 +98,13 @@ require ( github.com/grafana/otel-profiling-go v0.5.1 // @grafana/grafana-backend-group github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // @grafana/observability-traces-and-profiling github.com/grafana/pyroscope/api v0.3.0 // @grafana/observability-traces-and-profiling - github.com/grafana/tempo v1.5.1-0.20240604192202-01f4bc8ac2d1 // @grafana/observability-traces-and-profiling + github.com/grafana/tempo v1.5.1-0.20241001135150-ed943d7a56b2 // @grafana/observability-traces-and-profiling github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // @grafana/plugins-platform-backend github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // @grafana/grafana-backend-group github.com/hashicorp/go-hclog v1.6.3 // @grafana/plugins-platform-backend github.com/hashicorp/go-multierror v1.1.1 // @grafana/alerting-squad github.com/hashicorp/go-plugin v1.6.1 // @grafana/plugins-platform-backend - github.com/hashicorp/go-version v1.6.0 // @grafana/grafana-backend-group + github.com/hashicorp/go-version v1.7.0 // @grafana/grafana-backend-group github.com/hashicorp/golang-lru/v2 v2.0.7 // @grafana/alerting-backend github.com/hashicorp/hcl/v2 v2.17.0 // @grafana/alerting-backend github.com/huandu/xstrings v1.3.3 // @grafana/partner-datasources @@ -154,7 +154,7 @@ require ( github.com/xlab/treeprint v1.2.0 // @grafana/observability-traces-and-profiling github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // @grafana/grafana-operator-experience-squad github.com/yudai/gojsondiff v1.0.0 // @grafana/grafana-backend-group - go.opentelemetry.io/collector/pdata v1.6.0 // @grafana/grafana-backend-group + go.opentelemetry.io/collector/pdata v1.12.0 // @grafana/grafana-backend-group go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // @grafana/plugins-platform-backend go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.55.0 // @grafana/grafana-operator-experience-squad go.opentelemetry.io/contrib/propagators/jaeger v1.29.0 // @grafana/grafana-backend-group @@ -224,7 +224,7 @@ require ( github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/RoaringBitmap/roaring v1.9.3 // indirect github.com/agext/levenshtein v1.2.1 // indirect - github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect + github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect @@ -297,7 +297,7 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/grafana/grafana/pkg/storage/unified/apistore v0.0.0-20240821183201-2f012860344d // @grafana/grafana-search-and-storage github.com/grafana/grafana/pkg/storage/unified/resource v0.0.0-20240821161612-71f0dae39e9d // @grafana/grafana-search-and-storage - github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db // indirect + github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 // indirect; @grafana/plugins-platform-backend github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // @grafana/identity-access-team @@ -346,7 +346,7 @@ require ( github.com/mattn/go-ieproxy v0.0.11 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mfridman/interpolate v0.0.2 // indirect - github.com/miekg/dns v1.1.59 // indirect + github.com/miekg/dns v1.1.61 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect diff --git a/go.work.sum b/go.work.sum index aadaa823b6d..d0f7f3ddcd4 100644 --- a/go.work.sum +++ b/go.work.sum @@ -309,6 +309,8 @@ github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 h1:oVLqHXhnYtUwM89y9T1 github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= github.com/IBM/sarama v1.43.0 h1:YFFDn8mMI2QL0wOrG0J2sFoVIAFl7hS9JQi2YZsXtJc= github.com/IBM/sarama v1.43.0/go.mod h1:zlE6HEbC/SMQ9mhEYaF7nNLYOUyrs0obySKCckWP9BM= +github.com/IBM/sarama v1.43.2 h1:HABeEqRUh32z8yzY2hGB/j8mHSzC/HA9zlEjqFNCzSw= +github.com/IBM/sarama v1.43.2/go.mod h1:Kyo4WkF24Z+1nz7xeVUFWIuKVV8RS3wM8mkvPKMdXFQ= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= @@ -319,6 +321,7 @@ github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x9 github.com/MicahParks/keyfunc/v2 v2.1.0 h1:6ZXKb9Rp6qp1bDbJefnG7cTH8yMN1IC/4nf+GVjO99k= github.com/MicahParks/keyfunc/v2 v2.1.0/go.mod h1:rW42fi+xgLJ2FRRXAfNx9ZA8WpD4OeE/yHVMteCkw9k= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.6 h1:U68crOE3y3MPttCMQGywZOLrTeF5HHJ3/vDBCJn9/bA= github.com/OneOfOne/xxhash v1.2.6/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= @@ -628,8 +631,11 @@ github.com/grafana/alerting v0.0.0-20240830172655-aa466962ea18 h1:3cQ+d+fkNL2Eqp github.com/grafana/alerting v0.0.0-20240830172655-aa466962ea18/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4= github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10 h1:oDbLKM34O+JUF9EQFS+9aYhdYoeNfUpXqNjFCLIxwF4= github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4= +github.com/grafana/dskit v0.0.0-20240801171758-736c44c85382/go.mod h1:lcjGB6SuaZ2o44A9nD6p/tR4QXSPbzViRY520Gy6pTQ= github.com/grafana/gomemcache v0.0.0-20240229205252-cd6a66d6fb56/go.mod h1:PGk3RjYHpxMM8HFPhKKo+vve3DdlPUELZLSDEFehPuU= github.com/grafana/pyroscope-go/godeltaprof v0.1.6/go.mod h1:Tk376Nbldo4Cha9RgiU7ik8WKFkNpfds98aUzS8omLE= +github.com/grafana/tempo v1.5.1-0.20241001135150-ed943d7a56b2 h1:XMreZ1SPjLpd9zhql5FXKFYwAcgBzS2E2MOPx4n+FyY= +github.com/grafana/tempo v1.5.1-0.20241001135150-ed943d7a56b2/go.mod h1:UKONJhBCxmL+0ri27VMledCVzZIJqnl6Ah24A5vCRzs= github.com/grafana/thema v0.0.0-20230511182720-3146087fcc26 h1:HX927q4X1n451pnGb8U0wq74i8PCzuxVjzv7TyD10kc= github.com/grafana/thema v0.0.0-20230511182720-3146087fcc26/go.mod h1:Pn9nfzCk7nV0mvNgwusgCjCROZP6nm4GpwTnmEhLT24= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= @@ -640,11 +646,19 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc github.com/hamba/avro/v2 v2.17.2 h1:6PKpEWzJfNnvBgn7m2/8WYaDOUASxfDU+Jyb4ojDgFY= github.com/hamba/avro/v2 v2.17.2/go.mod h1:Q9YK+qxAhtVrNqOhwlZTATLgLA8qxG2vtvkhK8fJ7Jo= github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= +github.com/hashicorp/consul/api v1.29.2 h1:aYyRn8EdE2mSfG14S1+L9Qkjtz8RzmaWh6AcNGRNwPw= +github.com/hashicorp/consul/api v1.29.2/go.mod h1:0YObcaLNDSbtlgzIRtmRXI1ZkeuK0trCBxwZQ4MYnIk= +github.com/hashicorp/consul/proto-public v0.6.2 h1:+DA/3g/IiKlJZb88NBn0ZgXrxJp2NlvCZdEyl+qxvL0= +github.com/hashicorp/consul/proto-public v0.6.2/go.mod h1:cXXbOg74KBNGajC+o8RlA502Esf0R9prcoJgiOX/2Tg= github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8= +github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg= +github.com/hashicorp/consul/sdk v0.16.1/go.mod h1:fSXvwxB2hmh1FMZCNl6PwX0Q/1wdWtHJcZ7Ea5tns0s= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= @@ -666,6 +680,8 @@ github.com/jackspirou/syscerts v0.0.0-20160531025014-b68f5469dff1 h1:9Xm8CKtMZIX github.com/jackspirou/syscerts v0.0.0-20160531025014-b68f5469dff1/go.mod h1:zuHl3Hh+e9P6gmBPvcqR1HjkaWHC/csgyskg6IaFKFo= github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs= github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI= +github.com/jaegertracing/jaeger v1.57.0 h1:3wDtUUPs6NRYH7+d+y8MilDkLHdpPrVlQ2wbcsA62bs= +github.com/jaegertracing/jaeger v1.57.0/go.mod h1:p/1fxIU9hKHl7qEhKC72p2ZYVhvvZvNB73y6V7YyuTs= github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= github.com/jedib0t/go-pretty/v6 v6.2.4 h1:wdaj2KHD2W+mz8JgJ/Q6L/T5dB7kyqEFI16eLq7GEmk= github.com/jedib0t/go-pretty/v6 v6.2.4/go.mod h1:+nE9fyyHGil+PuISTCrp7avEdo6bqoMwqZnuiK2r2a0= @@ -712,6 +728,8 @@ github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= github.com/knadh/koanf/v2 v2.1.0 h1:eh4QmHHBuU8BybfIJ8mB8K8gsGCD/AUQTdwGq/GzId8= github.com/knadh/koanf/v2 v2.1.0/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es= +github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM= +github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= @@ -752,9 +770,15 @@ github.com/mfridman/xflag v0.0.0-20240825232106-efb77353e578/go.mod h1:/483ywM5Z github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= +github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/minio-go/v7 v7.0.70 h1:1u9NtMgfK1U42kUxcsl5v0yj6TEOPR497OAQxpJnn2g= +github.com/minio/minio-go/v7 v7.0.70/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng= github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= @@ -766,6 +790,8 @@ github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8 github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI= github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w= +github.com/mostynb/go-grpc-compression v1.2.3 h1:42/BKWMy0KEJGSdWvzqIyOZ95YcR9mLPqKctH7Uo//I= +github.com/mostynb/go-grpc-compression v1.2.3/go.mod h1:AghIxF3P57umzqM9yz795+y1Vjs47Km/Y2FE6ouQ7Lg= github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8 h1:P48LjvUQpTReR3TQRbxSeSBsMXzfK0uol7eRcr7VBYQ= github.com/natessilva/dag v0.0.0-20180124060714-7194b8dcc5c4 h1:dnMxwus89s86tI8rcGVp2HwZzlz7c5o92VOy7dSckBQ= github.com/nats-io/jwt v1.2.2 h1:w3GMTO969dFg+UOKTmmyuu7IGdusK+7Ytlt//OYH/uU= @@ -787,42 +813,74 @@ github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16A github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.97.0 h1:8GH8y3Cq54Ey6He9tyhcVYLfG4TEs/7pp3s6934zNKA= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.97.0/go.mod h1:QBHXt+tHds39B4xGyBkbOx2TST+p8JLWBiXbKKAhNss= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.102.0 h1:R70PpK14trQfL/Vj5oAiGRqX09s2gOWuf6t1Ae5fevQ= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.102.0/go.mod h1:xmy/yFFmB1Epy+czrYMbA+4xeOKvhFqNqYWU6qINeis= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.97.0 h1:WGRSjhOYfW/NCseia4Av8s4q65vZmM66WJPw8ocjU1I= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.97.0/go.mod h1:3QaZO29iFAiW+wCjQ3pI7yFn+lcQB5VLfPjbyBx9ThA= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.102.0 h1:N3vWsp3xealy4AX8TovfHG5EKi/k7z+F/8LFP4SVAgo= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.102.0/go.mod h1:/Ijok2yF1qYoHuRHvyLS04ZuW91Pue2VkqZ/nZxpkvk= github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.97.0 h1:jPhm8t6pJcxgng2DaEhPZ3sY44KBoM0W32j6aI+hMgU= github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.97.0/go.mod h1:PAJCWmb9gEZh1OhazzHrvUGQeu31Rzqm8OJQVfxlLwU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.102.0 h1:PNLVcz8kJLE9V5kGnbBh277Bvl4WwiVZ+NbFbOB80WY= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.102.0/go.mod h1:cBbjwd8m4rBVgCQksUbAVQX1EoM5IuCyNQw2mzvibEM= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.97.0 h1:vX/BkTfd7/cvydXJ7FmUy5iSviQeNGAgTCoXcLu7/Ww= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.97.0/go.mod h1:yrlbvRlLeny1kFmj4Ac9BSqv/pOr2h7sOIvDE6OMCKk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.102.0 h1:qsM5HhWpAfIMg8LdO4u+CHofu4UuCuJwg/M+ySO9uZA= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.102.0/go.mod h1:wBJlGy9Wx6s7AxIMcSne2sGw73e5ZUy1AQ/duYwpFf8= github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.97.0 h1:f3HVDcjUVUbOpKWiebD9v8+9YdDdNvzPyKh3IVb0ORY= github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.97.0/go.mod h1:110wLws4lB2Jpv58rK7YoaMIhIEmLlzw5/viC0XJhbM= github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.97.0 h1:+EA1iNRxeOqtU+9/+4hu8Tz7LhW2xmhFPd3w+ntpxiE= github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.97.0/go.mod h1:pHbdUUE+6ZWpvaHyyHQiytt7t6IPVCvacnDPmKWVgu0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.102.0 h1:xBd9EXG9qvWwa2d7qDRVv/D/2gAQqn1zGbPqdjkd+O8= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.102.0/go.mod h1:e4pc6nkNyzBi5g2RgIRjJ1slRsOY5qHIbPu0E4oM3cE= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.97.0 h1:sd7JEwe5e7VYel/6gFWTKFTsQz8PxzdpU8tWlL6Ymos= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.97.0/go.mod h1:2E6Bx0OjGlwbsdpakU6ZiMb2VeA2hIcssmFL9Ov251g= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.102.0 h1:/J1Q2tylp8ID+AIpCmfaArUyCPoSjY3nyZXdkpTw9J8= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.102.0/go.mod h1:lbNQBpvs40lInohZrqAbRZ+8r29GzfMfkbLV4fBPrzE= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.97.0 h1:jZQsM7cMygRatb5ng1Hbstmfuzn6aqXDmhYpwtljZyg= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.97.0/go.mod h1:WONvd1Xj3VFOziyxExHxmhmEx70DxqJ0nIVQ3FXtdS0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.102.0 h1:pVJ792+Nzcv8nLlg18XOLOWEZ/dCK+Wo3Iak5TU8rz8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.102.0/go.mod h1:DmkGhNL9nuSTg8fMhYNopMuF1Y3LFqu/FQHrvhBzME0= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.97.0 h1:bVeo7BahYY4rWdaEuzJX2Tn20MbvYcEHXbFjV2IwnPQ= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.97.0/go.mod h1:lj29zRdEZdvbQvZ6g7Pb+tSPw4dQE/jahe39fRgO+08= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.97.0 h1:MWki5BBYideAF82i3ladRxmed3nkkGHDUA1YC2p2mz8= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.97.0/go.mod h1:Zsl3xSYy9QFqZ5lTPXqPHSuxz03kUaMw75kvvScE+94= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.102.0 h1:TvJYcU/DLRFCgHr7nT98k5D+qkZ4syKVxc8OJjv+K4c= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.102.0/go.mod h1:WzD3Ox7tywAQHknxAFpAC1oZJGItMp5mbvgUGjvzNY8= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.97.0 h1:/aQbyj1DK8mK2lU+7VrzI/OPGISrIayAJyHlu67LI/8= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.97.0/go.mod h1:4W8p7s7UtnLzAaFps6At8ELJE9eLc7y4C/xvQJ0t7Mg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.102.0 h1:IgLMHSuraJzxLqVeM7xU7aZPcXS5/eoVnX+HBuFGQ6E= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.102.0/go.mod h1:hG8EmxUvgXIiKTG6+UVcMhFeIN6UD/bswP7WYpQ2lCc= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.97.0 h1:5/19bkuB0GDo+vScgEnNy/TcXAkmyTu7BenfpaD2a/M= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.97.0/go.mod h1:CuGIeYSpb4Kmyq4Ez83gHbTjNQGxptjYcC4T5dWkPnM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.102.0 h1:4VQidhCgkJiBvBDMOukr5ixrf5uP66iW5Hb+CFsb+4E= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.102.0/go.mod h1:nMto9zkv0vD8YI3oGZFZS2Uu7k2oHt1d+xUHN/ofUYo= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.97.0 h1:vqkBZCBjZLuDpErk9bEWS02ZhwEDMJBtyNmK0eLwi7A= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.97.0/go.mod h1:Z65edZWOfvG3/l5F/X42jnW4yMST5UeuktvG5QMCvF8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.102.0 h1:Mh5MHf0PrUQMTM2S8HwEuPt3Fyz0Xnt0IG7GUc6Fmbs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.102.0/go.mod h1:6fc8qnIayeGwAF41LyLR+/FRbyJf4+FikbmaO0GGq/Y= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.97.0 h1:fgzi0d0NRJfSnFP0amVR1+tscNpYPnPs7ODKOzJzBq8= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.97.0/go.mod h1:x9pkj9/5Ej/8hwi+uHMPM70hcYpJ2cPf6gLFwGZpOv4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.102.0 h1:5M7I78lyGsH+Xyy4NoXKM/UUCa52aZQiPcSX6so6x94= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.102.0/go.mod h1:BEQy0zEel5uIOTEFBBmvQJ4A32R6nKLtSMtC6ylLI8k= github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.97.0 h1:IfJ9EkykXHBYdwuvZd0qfFcCHAAOuTEaiIlTRw6R9g4= github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.97.0/go.mod h1:uTs2ukYAG9tCkoUhW39J9bNQAqwpqHhE85eeRVm6zCM= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.97.0 h1:vPQQQezde/dqG/UzWFVeWPUE5YUU3neybTWtF6dSSLM= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.97.0/go.mod h1:oC3rBafNReIB/XZDshYZjjFulwOF1Feu3ZmY7aYJ4P4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.102.0 h1:HTGSfx2HzfudY1Uczw9yTBJnGBmTVFYzpGH1z+oD0nU= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.102.0/go.mod h1:Hlz24+Ah6Ojk0FUKNb1watRmTbLEru35+feroKA7dvQ= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.97.0 h1:S6b9R3SexIKjaP6wB7+v20oX/7abc9vOsiazMA+j/gM= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.97.0/go.mod h1:GZYAz9b6feR5cZOxqYZip7kiBfYc7gU6x0XL2VatINw= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.102.0 h1:2D3niNAKkr+NRVmAJW0bquSjzHUL6Pf1qQRLRPwA13M= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.102.0/go.mod h1:h0uqwH7b+NGDfFFWTjoGErMdYRdCqP1Az1/G+tfG024= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.97.0 h1:dHEhNYReKFxRAmVb9cXnpxwSCGgccps/SP+J1c2DOng= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.97.0/go.mod h1:IpzPnQdTgkYETRB7YwGJuzcZkSeznv/ZpxUWpALQL9s= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.102.0 h1:dBhFe/29ODIbxg4+JRaHwYAHMFFeh6/+izVtjceXwew= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.102.0/go.mod h1:WNFjuquVqyi+WEoa6L0J3DzPLRsP24ZlbZYwKv49VwY= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.97.0 h1:LEC8VOsV6BXyuROoCmZlr1m9yRNqtWtNFt5p62RpoG0= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.97.0/go.mod h1:guZo8ioeCrww44DypI+3CIWDDGodECkr/H+il26EzsI= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.102.0 h1:Pemo9pZa3VMYdrM/bss3f0qqVyBzPSulOBQL8VQcgN8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.102.0/go.mod h1:fvjAM+jOQdiXCmAENKH/eWxBBqTaImbq3lpoBI4X5Ek= github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e h1:4cPxUYdgaGzZIT5/j0IfqOrrXmq6bG8AwvwisMXpdrg= github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e/go.mod h1:DYR5Eij8rJl8h7gblRrOZ8g0kW1umSpKqYIBTgeDtLo= @@ -831,10 +889,14 @@ github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7l github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA= github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY= +github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= +github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde h1:x0TT0RDC7UhAVbbWWBzr41ElhJx5tXPWkIHA2HWPRuw= github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= github.com/parquet-go/parquet-go v0.20.2-0.20240416173845-962b3c5827c3 h1:dHzXGq6rltLEdYkZcB20RzdL+P3hu8/+rvEjna++/nc= github.com/parquet-go/parquet-go v0.20.2-0.20240416173845-962b3c5827c3/go.mod h1:wMYanjuaE900FTDTNY00JU+67Oqh9uO0pYWRNoPGctQ= +github.com/parquet-go/parquet-go v0.23.0 h1:dyEU5oiHCtbASyItMCD2tXtT2nPmoPbKpqf0+nnGrmk= +github.com/parquet-go/parquet-go v0.23.0/go.mod h1:MnwbUcFHU6uBYMymKAlPPAw9yh3kE1wWl6Gl1uLdkNk= github.com/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s= github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU= @@ -897,6 +959,8 @@ github.com/sercand/kuberesolver/v5 v5.1.1/go.mod h1:Fs1KbKhVRnB2aDWN12NjKCB+RgYM github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil/v3 v3.24.2 h1:kcR0erMbLg5/3LcInpw0X/rrPSqq4CDPyI6A6ZRC18Y= github.com/shirou/gopsutil/v3 v3.24.2/go.mod h1:tSg/594BcA+8UdQU2XcW803GWYgdtauFFPgJCJKZlVk= +github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU= +github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= @@ -1000,92 +1064,182 @@ go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.opentelemetry.io/collector v0.97.0 h1:qyOju13byHIKEK/JehmTiGMj4pFLa4kDyrOCtTmjHU0= go.opentelemetry.io/collector v0.97.0/go.mod h1:V6xquYAaO2VHVu4DBK28JYuikRdZajh7DH5Vl/Y8NiA= +go.opentelemetry.io/collector v0.102.1 h1:M/ciCcReQsSDYG9bJ2Qwqk7pQILDJ2bM/l0MdeCAvJE= +go.opentelemetry.io/collector v0.102.1/go.mod h1:yF1lDRgL/Eksb4/LUnkMjvLvHHpi6wqBVlzp+dACnPM= go.opentelemetry.io/collector/component v0.97.0 h1:vanKhXl5nptN8igRH4PqVYHOILif653vaPIKv6LCZCI= go.opentelemetry.io/collector/component v0.97.0/go.mod h1:F/m3HMlkb16RKI7wJjgbECK1IZkAcmB8bu7yD8XOkwM= +go.opentelemetry.io/collector/component v0.102.1 h1:66z+LN5dVCXhvuVKD1b56/3cYLK+mtYSLIwlskYA9IQ= +go.opentelemetry.io/collector/component v0.102.1/go.mod h1:XfkiSeImKYaewT2DavA80l0VZ3JjvGndZ8ayPXfp8d0= go.opentelemetry.io/collector/config/configauth v0.97.0 h1:38M2uUsBzgD7sdJPPXUsOq1BFr6X6P4A5VFg+MOcRNY= go.opentelemetry.io/collector/config/configauth v0.97.0/go.mod h1:BkCDatBU7CXXStrRPE1b4woj2VLxaYEMg2WTkb50BlI= +go.opentelemetry.io/collector/config/configauth v0.102.1 h1:LuzijaZulMu4xmAUG8WA00ZKDlampH+ERjxclb40Q9g= +go.opentelemetry.io/collector/config/configauth v0.102.1/go.mod h1:kTzfI5fnbMJpm2wycVtQeWxFAtb7ns4HksSb66NIhX8= go.opentelemetry.io/collector/config/configcompression v1.4.0 h1:qWRKdl49lBvPUr6UWmyf1pR4EOBHN+66pDeGtfQ1Mbk= go.opentelemetry.io/collector/config/configcompression v1.4.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M= +go.opentelemetry.io/collector/config/configcompression v1.9.0 h1:B2q6XMO6xiF2s+14XjqAQHGY5UefR+PtkZ0WAlmSqpU= +go.opentelemetry.io/collector/config/configcompression v1.9.0/go.mod h1:6+m0GKCv7JKzaumn7u80A2dLNCuYf5wdR87HWreoBO0= go.opentelemetry.io/collector/config/configgrpc v0.97.0 h1:Ukl1GPtzSko4Pu8KV5jedD8OjySL/C+QgrfRdaakfHk= go.opentelemetry.io/collector/config/configgrpc v0.97.0/go.mod h1:i8OrrxynYldlcZ6wPOUKNoZmmbUCDp3CzryRT+2mN7c= +go.opentelemetry.io/collector/config/configgrpc v0.102.1 h1:6Plnfx+xw/JH8k11MkljGoysPfn1u7hHbO2evteOTeE= +go.opentelemetry.io/collector/config/configgrpc v0.102.1/go.mod h1:Kk3XOSar3QTzGDS8N8M38DVlOzUD7STS2obczO9q43I= go.opentelemetry.io/collector/config/confighttp v0.97.0 h1:Tfw4DtK5x66uSoRdbZc9tQTNGWEo/urR8RAedBdYtNU= go.opentelemetry.io/collector/config/confighttp v0.97.0/go.mod h1:wyg4yXvCsk1CsfPBWQ3+rZDThz44Q0d35/1lJBHj5VI= +go.opentelemetry.io/collector/config/confighttp v0.102.1 h1:tPw1Xf2PfDdrXoBKLY5Sd4Dh8FNm5i+6DKuky9XraIM= +go.opentelemetry.io/collector/config/confighttp v0.102.1/go.mod h1:k4qscfjxuaDQmcAzioxmPujui9VSgW6oal3WLxp9CzI= go.opentelemetry.io/collector/config/confignet v0.97.0 h1:KJjv10/YVMslSSLVWW/IIjpLM3JiO3rWvw5dK/t1H7g= go.opentelemetry.io/collector/config/confignet v0.97.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k= +go.opentelemetry.io/collector/config/confignet v0.102.1 h1:nSiAFQMzNCO4sDBztUxY73qFw4Vh0hVePq8+3wXUHtU= +go.opentelemetry.io/collector/config/confignet v0.102.1/go.mod h1:pfOrCTfSZEB6H2rKtx41/3RN4dKs+X2EKQbw3MGRh0E= go.opentelemetry.io/collector/config/configopaque v1.4.0 h1:5KgD9oLN+N07HqDsLzUrU0mE2pC8cMhrCSC1Nf8CEO4= go.opentelemetry.io/collector/config/configopaque v1.4.0/go.mod h1:7Qzo69x7i+FaNELeA9jmZtVvfnR5lE6JYa5YEOCJPFQ= +go.opentelemetry.io/collector/config/configopaque v1.9.0 h1:jocenLdK/rVG9UoGlnpiBxXLXgH5NhIXCrVSTyKVYuA= +go.opentelemetry.io/collector/config/configopaque v1.9.0/go.mod h1:8v1yaH4iYjcigbbyEaP/tzVXeFm4AaAsKBF9SBeqaG4= go.opentelemetry.io/collector/config/configretry v0.97.0 h1:k7VwQ5H0oBLm6Fgm0ltfDDbmQVsiqSIY9ojijF0hiR0= go.opentelemetry.io/collector/config/configretry v0.97.0/go.mod h1:s7A6ZGxK8bxqidFzwbr2pITzbsB2qf+aeHEDQDcanV8= +go.opentelemetry.io/collector/config/configretry v0.102.1 h1:J5/tXBL8P7d7HT5dxsp2H+//SkwDXR66Z9UTgRgtAzk= +go.opentelemetry.io/collector/config/configretry v0.102.1/go.mod h1:P+RA0IA+QoxnDn4072uyeAk1RIoYiCbxYsjpKX5eFC4= go.opentelemetry.io/collector/config/configtelemetry v0.97.0 h1:JS/WxK09A9m39D5OqsAWaoRe4tG7ESMnzDNIbZ5bD6c= go.opentelemetry.io/collector/config/configtelemetry v0.97.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o= +go.opentelemetry.io/collector/config/configtelemetry v0.102.1 h1:f/CYcrOkaHd+COIJ2lWnEgBCHfhEycpbow4ZhrGwAlA= +go.opentelemetry.io/collector/config/configtelemetry v0.102.1/go.mod h1:WxWKNVAQJg/Io1nA3xLgn/DWLE/W1QOB2+/Js3ACi40= go.opentelemetry.io/collector/config/configtls v0.97.0 h1:wmXj/rKQUGMZzbHVCTyB+xUWImsGxnLqhivwjBE0FdI= go.opentelemetry.io/collector/config/configtls v0.97.0/go.mod h1:ev/fMI6hm1WTSHHEAEoVjF3RZj0qf38E/XO5itFku7k= +go.opentelemetry.io/collector/config/configtls v0.102.1 h1:7fr+PU9BRg0HRc1Pn3WmDW/4WBHRjuo7o1CdG2vQKoA= +go.opentelemetry.io/collector/config/configtls v0.102.1/go.mod h1:KHdrvo3cwosgDxclyiLWmtbovIwqvaIGeTXr3p5721A= go.opentelemetry.io/collector/config/internal v0.97.0 h1:vhTzCm2u6MUAxdWPprkOePR/Kd57v2uF11twpza1E7o= go.opentelemetry.io/collector/config/internal v0.97.0/go.mod h1:RVGDn9OH/KHT878cclG497/n2qxe54+zW+u/SVsRLNw= +go.opentelemetry.io/collector/config/internal v0.102.1 h1:HFsFD3xpHUuNHb8/UTz5crJw1cMHzsJQf/86sgD44hw= +go.opentelemetry.io/collector/config/internal v0.102.1/go.mod h1:Vig3dfeJJnuRe1kBNpszBzPoj5eYnR51wXbeq36Zfpg= go.opentelemetry.io/collector/confmap v0.97.0 h1:0CGSk7YW9rPc6jCwJteJzHzN96HRoHTfuqI7J/EmZsg= go.opentelemetry.io/collector/confmap v0.97.0/go.mod h1:AnJmZcZoOLuykSXGiAf3shi11ZZk5ei4tZd9dDTTpWE= +go.opentelemetry.io/collector/confmap v0.102.1 h1:wZuH+d/P11Suz8wbp+xQCJ0BPE9m5pybtUe74c+rU7E= +go.opentelemetry.io/collector/confmap v0.102.1/go.mod h1:KgpS7UxH5rkd69CzAzlY2I1heH8Z7eNCZlHmwQBMxNg= go.opentelemetry.io/collector/confmap/converter/expandconverter v0.97.0 h1:Tw0+JlvA1Z5xpvHYqzYXsPdsCaq6+oGoqw7fCymh+lc= go.opentelemetry.io/collector/confmap/converter/expandconverter v0.97.0/go.mod h1:gp3XWfC1OpmwHZsODRIpy4XZtrNy1RryJhvK7sdNgmk= +go.opentelemetry.io/collector/confmap/converter/expandconverter v0.102.1 h1:s0RxnaABoRxtfvUeimZ0OOsF83wD/EK1tR2N5GZyst0= +go.opentelemetry.io/collector/confmap/converter/expandconverter v0.102.1/go.mod h1:ZwSMlOSIzmrrSSVNoMPDr21SQx7E52bZFMQJSOZ+EhY= go.opentelemetry.io/collector/confmap/provider/envprovider v0.97.0 h1:2F3yl+Vr6nJ0sN9HoYeebY5+lJ8OJ4VqxCY16SsVcXs= go.opentelemetry.io/collector/confmap/provider/envprovider v0.97.0/go.mod h1:GrHP/mOgzx8+fcTRmgB/IgH3lG80nv2bFW1v6oPggRM= +go.opentelemetry.io/collector/confmap/provider/envprovider v0.102.1 h1:4KLw0pTChIqDfw0ckZ411aQDw98pu2dDOqgBHXfJm8M= +go.opentelemetry.io/collector/confmap/provider/envprovider v0.102.1/go.mod h1:f+IJBW0Sc96T79qj3GQtE1wQ0uWEwpslD785efKBl+c= go.opentelemetry.io/collector/confmap/provider/fileprovider v0.97.0 h1:5SXsBAA/6Hv76+ndBY0wZRYGNES/55SKu6VhP4kriqM= go.opentelemetry.io/collector/confmap/provider/fileprovider v0.97.0/go.mod h1:YAj2CNxE1go08GiAxYO2HSeNkWv8g7C7DHFpEECttI8= +go.opentelemetry.io/collector/confmap/provider/fileprovider v0.102.1 h1:nPhOtUbJHfTDqZqtvU76HmEz9iV4O/4/DSCZdnm0mpY= +go.opentelemetry.io/collector/confmap/provider/fileprovider v0.102.1/go.mod h1:eJnr6YDQiocmoRBvsKj33bIc4wysq5hy/jmOApv1dSM= go.opentelemetry.io/collector/confmap/provider/httpprovider v0.97.0 h1:Wd4XR3cOznED8sYM0Qy0NlAToxvpEG8OH9O89RKp+pg= go.opentelemetry.io/collector/confmap/provider/httpprovider v0.97.0/go.mod h1:2LIGxKR6dJPP5kxkRSTIeWuJ7Mto1Mv456+MlG86RH8= +go.opentelemetry.io/collector/confmap/provider/httpprovider v0.102.1 h1:VsaGXqEUFost0mf2svhds6loYzPavkyY37nMQcqoTkc= +go.opentelemetry.io/collector/confmap/provider/httpprovider v0.102.1/go.mod h1:lQocxKI32Zj1F3PR9UZfzykq50/mOI1mbyZ0729dphI= go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.97.0 h1:suZwewHxcwA3z0kE6p6tjYcPKlGOYWoIjy/58gBK/c0= go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.97.0/go.mod h1:R+cJ8wWzaJll+WCTUOM769zIk1vOb7NQARG9xWNbgUA= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.102.1 h1:rEhPTqkGAezaFxJ8y/BL5m4vKTK3ZSpn+VcVLKnZo7Q= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.102.1/go.mod h1:GxUZM23m3u4vURw/At2zEKW+5GwcuCNsHJNT/Wq/cFI= go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.97.0 h1:ntcR7AMHwFRROTMW1ifx0xVu+ltbPafS/1r/ssxe+hM= go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.97.0/go.mod h1:0THo600LMD0RGl7loqyaHgd/47Icgb64QOmqaj0j5dU= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.102.1 h1:qmdaBIz0UnUKVitZzq+4HtO9zvRTwgNc/Q3b7kyf1NQ= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.102.1/go.mod h1:nAckG/FkzAaPuwtEN2Na2+ij+2hdTjtXUtFBnlUqpFk= go.opentelemetry.io/collector/connector v0.95.0 h1:HBfGg92Eyw5jkneu7jh3yed7w/dzi7v6SZ+CyqpNK7E= go.opentelemetry.io/collector/connector v0.95.0/go.mod h1:an/NwQl07kw28iiwmZzN2KUeF3Br6UeW8u9iFpAlCXc= +go.opentelemetry.io/collector/connector v0.102.1 h1:7lEwXmhzqtyZwz2bBUHzwV/CZqA8bhPPVJOi0cm9+Fk= +go.opentelemetry.io/collector/connector v0.102.1/go.mod h1:DRlDYJXsFx1FKKxkdM2Ja52/xe+0bgmy0hA+wgKRUVI= go.opentelemetry.io/collector/consumer v0.97.0 h1:S0BZQtJQxSHT156S8a5rLt3TeWYP8Rq+jn8QEyWQUYk= go.opentelemetry.io/collector/consumer v0.97.0/go.mod h1:1D06LURiZ/1KA2OnuKNeSn9bvFmJ5ZWe6L8kLu0osSY= +go.opentelemetry.io/collector/consumer v0.102.1 h1:0CkgHhxwx4lI/m+hWjh607xyjooW5CObZ8hFQy5vvo0= +go.opentelemetry.io/collector/consumer v0.102.1/go.mod h1:HoXqmrRV13jLnP3/Gg3fYNdRkDPoO7UW58hKiLyFF60= go.opentelemetry.io/collector/exporter v0.97.0 h1:kw/fQrpkhTz0/3I/Z0maRj0S8Mi0NK50/WwFuWrRYPc= go.opentelemetry.io/collector/exporter v0.97.0/go.mod h1:EJYc4biKWxq3kD4Xh4SUSFbZ2lMsxjzwiCozikEDMjk= +go.opentelemetry.io/collector/exporter v0.102.1 h1:4VURYgBNJscxfMhZWitzcwA1cig5a6pH0xZSpdECDnM= +go.opentelemetry.io/collector/exporter v0.102.1/go.mod h1:1pmNxvrvvbWDW6PiGObICdj0eOSGV4Fzwpm5QA1GU54= go.opentelemetry.io/collector/exporter/otlpexporter v0.95.0 h1:3GGUHciA0EGqzjAMqw/z9n2PavZjX1vQbCJ0QdChKmo= go.opentelemetry.io/collector/exporter/otlpexporter v0.95.0/go.mod h1:8iKJe0ueSSns5u8vQjr0jRGKF1HFNSNUuMl/d7cxAlk= +go.opentelemetry.io/collector/exporter/otlpexporter v0.102.1 h1:bOXE7u1iy0SKwH2mnVyIMKkvFIR9bn9iIm1Cf/CJlZU= +go.opentelemetry.io/collector/exporter/otlpexporter v0.102.1/go.mod h1:4ya6xaUYvcXq9MQW0TbsR4QWkOJI02d/2Vt8plwdozA= go.opentelemetry.io/collector/extension v0.97.0 h1:LpjZ4KQgnhLG/u3l69QgWkX8qMqeS8IFKWMoDtbPIeE= go.opentelemetry.io/collector/extension v0.97.0/go.mod h1:jWNG0Npi7AxiqwCclToskDfCQuNKHYHlBPJNnIKHp84= +go.opentelemetry.io/collector/extension v0.102.1 h1:gAvE3w15q+Vv0Tj100jzcDpeMTyc8dAiemHRtJbspLg= +go.opentelemetry.io/collector/extension v0.102.1/go.mod h1:XBxUOXjZpwYLZYOK5u3GWlbBTOKmzStY5eU1R/aXkIo= go.opentelemetry.io/collector/extension/auth v0.97.0 h1:2AYGxSbsi1KC2DOOFbAe7valrERb86m7TfRY85X8hSE= go.opentelemetry.io/collector/extension/auth v0.97.0/go.mod h1:uElLYtzMPA48mu9baxGIH6lHpOn76NLe4mVHnmV+hEY= +go.opentelemetry.io/collector/extension/auth v0.102.1 h1:GP6oBmpFJjxuVruPb9X40bdf6PNu9779i8anxa+wW6U= +go.opentelemetry.io/collector/extension/auth v0.102.1/go.mod h1:U2JWz8AW1QXX2Ap3ofzo5Dn2fZU/Lglld97Vbh8BZS0= go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM= +go.opentelemetry.io/collector/featuregate v1.9.0 h1:mC4/HnR5cx/kkG1RKOQAvHxxg5Ktmd9gpFdttPEXQtA= +go.opentelemetry.io/collector/featuregate v1.9.0/go.mod h1:PsOINaGgTiFc+Tzu2K/X2jP+Ngmlp7YKGV1XrnBkH7U= go.opentelemetry.io/collector/otelcol v0.95.0 h1:lEwogX+fvO17SUgXT7/+q1DUXos0SwsAiUkhd0944AU= go.opentelemetry.io/collector/otelcol v0.95.0/go.mod h1:ETOYHHPSN4a43LvdUwajNSjwr30euS74rjfsrLCWh2A= +go.opentelemetry.io/collector/otelcol v0.102.1 h1:JdRG3ven+c5k703QpZG5bxJi4JJOnWaNP/EJvN+oYnI= +go.opentelemetry.io/collector/otelcol v0.102.1/go.mod h1:kHf9KBXOLZXajR1On8XJbBBGcgh2I2+/mVVroPzOLJU= +go.opentelemetry.io/collector/pdata v1.12.0 h1:Xx5VK1p4VO0md8MWm2icwC1MnJ7f8EimKItMWw46BmA= +go.opentelemetry.io/collector/pdata v1.12.0/go.mod h1:MYeB0MmMAxeM0hstCFrCqWLzdyeYySim2dG6pDT6nYI= go.opentelemetry.io/collector/processor v0.97.0 h1:L3R5R7x56LH2inF3sv0ZOsFfulVo8yuIFhO/OgpkCU0= go.opentelemetry.io/collector/processor v0.97.0/go.mod h1:OsxBAPQ2fDytAn+yWLdEQ1yjYfl/OIak1AfKGfI8ALs= +go.opentelemetry.io/collector/processor v0.102.1 h1:79NWs7kTgmgxOIQacuZyDf+mYWuoJZS07SHwZT7sZ4Y= +go.opentelemetry.io/collector/processor v0.102.1/go.mod h1:sNM41tEHgv3YA/Dz9/6F8oCeObrqnKCGOMs7wS6Ldus= go.opentelemetry.io/collector/receiver v0.97.0 h1:ozzE5MhIPtfnYA/UKB/NCcgxSmeLqdwErboi6B/IpLQ= go.opentelemetry.io/collector/receiver v0.97.0/go.mod h1:1TCN9DRuB45+xKqlwv4BMQR6qXgaJeSSNezFTJhmDUo= +go.opentelemetry.io/collector/receiver v0.102.1 h1:353t4U3o0RdU007JcQ4sRRzl72GHCJZwXDr8cCOcEbI= +go.opentelemetry.io/collector/receiver v0.102.1/go.mod h1:pYjMzUkvUlxJ8xt+VbI1to8HMtVlv8AW/K/2GQQOTB0= go.opentelemetry.io/collector/receiver/otlpreceiver v0.97.1-0.20240327165504-2b0decfcebeb h1:gaxwgzaHKnlx6dAjFexd4eiFD3l0ePwdueqdNystJDU= go.opentelemetry.io/collector/receiver/otlpreceiver v0.97.1-0.20240327165504-2b0decfcebeb/go.mod h1:JL1oxtysJT2TN80p/nC9vrWkENh/If7kmMRio7yF9WE= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.102.1 h1:65/8lkVmOu6gwBw99W+QUQBeDC2qVTwlaiqy7/SpauY= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.102.1/go.mod h1:0hmxfFSSqKJjRGvgYjp/XvptbAgLhLguwNgJqMp7zd0= go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY= +go.opentelemetry.io/collector/semconv v0.105.0 h1:8p6dZ3JfxFTjbY38d8xlQGB1TQ3nPUvs+D0RERniZ1g= +go.opentelemetry.io/collector/semconv v0.105.0/go.mod h1:yMVUCNoQPZVq/IPfrHrnntZTWsLf5YGZ7qwKulIl5hw= go.opentelemetry.io/collector/service v0.95.0 h1:t6RUHV7ByFjkjPKGz5n6n4wIoXZLC8HDQLmnrmCYGhg= go.opentelemetry.io/collector/service v0.95.0/go.mod h1:4yappQmDE5UZmLE9wwtj6IPM4W5KGLIYfObEAaejtQc= +go.opentelemetry.io/collector/service v0.102.1 h1:Lg7qrC4Zctd/OAlkpdsaZaUY+jLEGLLnOigfBLP2GW8= +go.opentelemetry.io/collector/service v0.102.1/go.mod h1:L5Sh3461B1Zij7vpMMbi6M/SZicgrLB3UgbG0oUK0pA= +go.opentelemetry.io/contrib/bridges/prometheus v0.53.0 h1:BdkKDtcrHThgjcEia1737OUuFdP6xzBKAMx2sNZCkvE= +go.opentelemetry.io/contrib/bridges/prometheus v0.53.0/go.mod h1:ZkhVxcJgeXlL/lVyT/vxNHVFiSG5qOaDwYaSgD8IfZo= go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs= go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418= +go.opentelemetry.io/contrib/config v0.7.0 h1:b1rK5tGTuhhPirJiMxOcyQfZs76j2VapY6ODn3b2Dbs= +go.opentelemetry.io/contrib/config v0.7.0/go.mod h1:8tdiFd8N5etOi3XzBmAoMxplEzI3TcL8dU5rM5/xcOQ= +go.opentelemetry.io/contrib/exporters/autoexport v0.53.0 h1:13K+tY7E8GJInkrvRiPAhC0gi/7vKjzDNhtmCf+QXG8= +go.opentelemetry.io/contrib/exporters/autoexport v0.53.0/go.mod h1:lyQF6xQ4iDnMg4sccNdFs1zf62xd79YI8vZqKjOTwMs= go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.53.0/go.mod h1:ImRBLMJv177/pwiLZ7tU7HDGNdBv7rS0HQ99eN/zBl8= go.opentelemetry.io/contrib/propagators/b3 v1.23.0 h1:aaIGWc5JdfRGpCafLRxMJbD65MfTa206AwSKkvGS0Hg= go.opentelemetry.io/contrib/propagators/b3 v1.23.0/go.mod h1:Gyz7V7XghvwTq+mIhLFlTgcc03UDroOg8vezs4NLhwU= +go.opentelemetry.io/contrib/propagators/b3 v1.27.0 h1:IjgxbomVrV9za6bRi8fWCNXENs0co37SZedQilP2hm0= +go.opentelemetry.io/contrib/propagators/b3 v1.27.0/go.mod h1:Dv9obQz25lCisDvvs4dy28UPh974CxkahRDUPsY7y9E= go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/bridge/opencensus v1.26.0 h1:DZzxj9QjznMVoehskOJnFP2gsTCWtDTFBDvFhPAY7nc= go.opentelemetry.io/otel/bridge/opencensus v1.26.0/go.mod h1:rJiX0KrF5m8Tm1XE8jLczpAv5zUaDcvhKecFG0ZoFG4= +go.opentelemetry.io/otel/bridge/opencensus v1.27.0 h1:ao9aGGHd+G4YfjBpGs6vbkvt5hoC67STlJA9fCnOAcs= +go.opentelemetry.io/otel/bridge/opencensus v1.27.0/go.mod h1:uRvWtAAXzyVOST0WMPX5JHGBaAvBws+2F8PcC5gMnTk= go.opentelemetry.io/otel/bridge/opentracing v1.26.0 h1:Q/dHj0DOhfLMAs5u5ucAbC7gy66x9xxsZRLpHCJ4XhI= go.opentelemetry.io/otel/bridge/opentracing v1.26.0/go.mod h1:HfypvOw/8rqu4lXDhwaxVK1ibBAi1lTMXBHV9rywOCw= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.23.1 h1:ZqRWZJGHXV/1yCcEEVJ6/Uz2JtM79DNS8OZYa3vVY/A= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.23.1/go.mod h1:D7ynngPWlGJrqyGSDOdscuv7uqttfCE3jcBvffDv9y4= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2guen0GhqH8o/G2un8f/aG/y++OuW6MyCo6hT9prXk= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.23.1 h1:q/Nj5/2TZRIt6PderQ9oU0M00fzoe8UZuINGw6ETGTw= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.23.1/go.mod h1:DTE9yAu6r08jU3xa68GiSeI7oRcSEQ2RpKbbQGO+dWM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0 h1:aLmmtjRke7LPDQ3lvpFz+kNEH43faFhzW7v8BFIEydg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0/go.mod h1:TC1pyCt6G9Sjb4bQpShH+P5R53pO6ZuGnHuuln9xMeE= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= go.opentelemetry.io/otel/exporters/prometheus v0.46.0 h1:I8WIFXR351FoLJYuloU4EgXbtNX2URfU/85pUPheIEQ= go.opentelemetry.io/otel/exporters/prometheus v0.46.0/go.mod h1:ztwVUHe5DTR/1v7PeuGRnU5Bbd4QKYwApWmuutKsJSs= +go.opentelemetry.io/otel/exporters/prometheus v0.50.0 h1:2Ewsda6hejmbhGFyUvWZjUThC98Cf8Zy6g0zkIimOng= +go.opentelemetry.io/otel/exporters/prometheus v0.50.0/go.mod h1:pMm5PkUo5YwbLiuEf7t2xg4wbP0/eSJrMxIMxKosynY= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 h1:0MH3f8lZrflbUWXVxyBg/zviDFdGE062uKh5+fu8Vv0= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0/go.mod h1:Vh68vYiHY5mPdekTr0ox0sALsqjoVy0w3Os278yX5SQ= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.23.1 h1:C8r95vDR125t815KD+b1tI0Fbc1pFnwHTBxkbIZ6Szc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.23.1/go.mod h1:Qr0qomr64jentMtOjWMbtYeJMSuMSlsPEjmnRA2sWZ4= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0/go.mod h1:DIzlHs3DRscCIBU3Y9YSzPfScwnYnzfnCd4g8zA7bZc= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= go.opentelemetry.io/otel/sdk/metric v1.26.0 h1:cWSks5tfriHPdWFnl+qpX3P681aAYqlZHcAyHw5aU9Y= go.opentelemetry.io/otel/sdk/metric v1.26.0/go.mod h1:ClMFFknnThJCksebJwz7KIyEDHO+nTB6gK8obLy8RyE= +go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= +go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= @@ -1159,6 +1313,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc v1.66.1/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= diff --git a/pkg/build/go.mod b/pkg/build/go.mod index 0cbbd3837f4..c474b10c042 100644 --- a/pkg/build/go.mod +++ b/pkg/build/go.mod @@ -108,12 +108,12 @@ require ( github.com/sosodev/duration v1.2.0 // indirect github.com/vektah/gqlparser/v2 v2.5.11 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect - go.opentelemetry.io/otel/log v0.2.0-alpha // indirect - go.opentelemetry.io/otel/sdk/log v0.2.0-alpha // indirect + go.opentelemetry.io/otel/log v0.4.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/pkg/build/go.sum b/pkg/build/go.sum index 4076ffd4b2f..12a1edd5a67 100644 --- a/pkg/build/go.sum +++ b/pkg/build/go.sum @@ -233,22 +233,22 @@ go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha h1:z2s6Zba+OUyayRv5m1AXWNUTGh57K1iMhy6emU5QT5Y= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha/go.mod h1:paOXXyUgPW6jYxYkP0pB47H2zHE1fPvMJ4E4G9LHOi0= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0 h1:zBPZAISA9NOc5cE8zydqDiS0itvg/P/0Hn9m72a5gvM= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0/go.mod h1:gcj2fFjEsqpV3fXuzAA+0Ze1p2/4MJ4T7d77AmkvueQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc= -go.opentelemetry.io/otel/log v0.2.0-alpha h1:ixOPvMzserpqA07SENHvRzkZOsnG0XbPr74hv1AQ+n0= -go.opentelemetry.io/otel/log v0.2.0-alpha/go.mod h1:vbFZc65yq4c4ssvXY43y/nIqkNJLxORrqw0L85P59LA= +go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= +go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= -go.opentelemetry.io/otel/sdk/log v0.2.0-alpha h1:jGTkL/jroJ31jnP6jDl34N/mDOfRGGYZHcHsCM+5kWA= -go.opentelemetry.io/otel/sdk/log v0.2.0-alpha/go.mod h1:Hd8Lw9FPGUM3pfY7iGMRvFaC2Nyau4Ajb5WnQ9OdIho= +go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= +go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= diff --git a/pkg/promlib/go.mod b/pkg/promlib/go.mod index c84a005dfb0..f91275cfa1c 100644 --- a/pkg/promlib/go.mod +++ b/pkg/promlib/go.mod @@ -19,7 +19,7 @@ require ( require ( github.com/BurntSushi/toml v1.4.0 // indirect - github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect + github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect github.com/apache/arrow/go/v15 v15.0.2 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aws/aws-sdk-go v1.55.5 // indirect @@ -57,7 +57,7 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/grafana/otel-profiling-go v0.5.1 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect - github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db // indirect + github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect diff --git a/pkg/promlib/go.sum b/pkg/promlib/go.sum index ef39f876a0f..3450e2f8fcc 100644 --- a/pkg/promlib/go.sum +++ b/pkg/promlib/go.sum @@ -2,8 +2,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 h1:t3eaIm0rUkzbrIewtiFmMK5RXHej2XnoXNhxVsAYUfg= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= @@ -104,8 +104,8 @@ github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= github.com/grafana/pyroscope-go/godeltaprof v0.1.8 h1:iwOtYXeeVSAeYefJNaxDytgjKtUuKQbJqgAIjlnicKg= github.com/grafana/pyroscope-go/godeltaprof v0.1.8/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= -github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db h1:7aN5cccjIqCLTzedH7MZzRZt5/lsAHch6Z3L2ZGn5FA= -github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= @@ -233,7 +233,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= diff --git a/pkg/tsdb/tempo/testData/tempo_proto_response b/pkg/tsdb/tempo/testData/tempo_proto_response deleted file mode 100644 index 9e2841d046793163e58e978f665d588629d1b261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6668 zcmb_hdu$ZP8Nag)+zt@V3x4DPbKYV|58rw3?0all17{oj!o)8cIMSN+?bx^V-QKag zXZuJ=ODhPJ7TktVw+a;TmX+O})Bn|JK%1U9N>DxZLm?I-Gq{hdW?3 z!>e!4RNnBP3NW_RKQ6ENQ(e2&wKU2{W1`gGED3P9UbEkWr{H?1Mq}KS(@CP}@v@XQ zi1?`yh728cFe?rRVVs@=W(lx2-R}UPASS8`omXmc%mcF%qM|_jmz{pXOrLV@{jrI% zzkSHqs@_!k>VMeL=ql=piK!HnJ)2VTBrhl)&2!wDIN38i?A)&DLGLXvLoC|2VY2e6 z58h#Ht55u(?4=hz`Gae@f!L57k_cuu-y4UXwsc$-F}w&B?!xy8ZumlhLJV!CnvRh< z6GImRpkffWMz8r`u895D;|&Gb8b=|RyB){d9ZjYs6`LPvphk*i4c7#0B>-4ngo0b> zr5^<)(PSdUM-hSC-hem22DnhD#?!wevXwfsEhozAX(%l4WHTNE`8ltz8WFzQ>-UFz zLB9bWWLW}!?&QM;53&IR-0-W3{WH`&==E#h^nO#a8wAKASIO;EAoSYXs7HTzkskdJ zHPJhx=+oy-wJ`{ub@XO+Y+Bd3h0W*2*XiUwS4DPjDF*YBaz8JLJ9rf*x!Itgj~{>$ zj=B=esnrrNN2d{82o|Kt`Ee(BiAUKn@+Hdh7(q9QK-tYt7lJ~;I4H))=2_3kA&jl- z^CugIzS^_P$a?W)av+^rC#m>o)n%}c@fmX-(344NnMw}v9@9f?z%e$?y@r0Xb7XVgVvGs$yU9zfVd$0&F@ZG+iTg)ah^L^ri#kCzO5~ogzdW z)hS9S7z&~eI>nAGd(G?frjCEV`0~*H3C0#Eycp<;yjOI$`fU4%XcBI+r%BoJQ^wFF zFuCfp)x19U4t({t{!` z`NwnpFCA*k++%$X{axQ+atktY02OMo!m&Tn!P(seJW@&RJ()9)E&!CGW%}j@l676w z*k5u=Pb;O?h>L34MK&>^Et0)i$nxpYJhMK+=(iY~ZRqle^3k`vuF`B18=YP=^jv6EF;$d7mB5tbbxtzAy0U(}m>%|f|ZhSPSdB|~5?0H=} zFA}28yp>aWF(}fc6*n$dZgP1*?I5o4H0sMun%&J7=7{>)D_xAO;KsARJT!TB*tJA! z7E#lN?nzOoDD}93?1V}xDJhT}Uyvd9vI!p8Xv=GIuotM$80*q_%Q@GL9x_0fSo+gE* zoN8~;wJQd8qKi`|+d~0s6RPe?9VR|I_bJ(je!;WQl{ge%)e*`1%NduC@TYQh!g<3y8i`zy~FTshsWYj+2( z93#^A!xh6{jLq5Ix^npi%j%q5X`0Y|HaSlA$-xx^=-#+8TB)NR|DA4YBenJbnKOyR z{ct5_b~ubY%h(=YFP%94uj}u-N~%yxhEj@})Lwx^C|BXGCd1}&?6;!id^m@HuMJuj zqP&N@H3=nmoLKui+v{o5oeX@mlbk3!cIX#JbMKVTH67|9J8j$j?j3d-n`35_u>oT< z9t&OCQ%}aTZWu-pw3ZdCZyre`K4#)I#vM3)E*5ettV14Di=_g!U=FJ#wpJsXF$F7MWj#Z6jc2! zK6Fx!mG#f>I(vzBE?x zJ1<=T@>m5qRo~zim(2qCth3HBwg1#Iu@F1l2}%g~?T*sFMiIMR;wC^DDAKjN#Xb7x zhz(@j#50izD`h#DlZdOpvaWO@!OIzs7P@v)_o2`ZZV{Xgi>P+J2D#5}fZ?;I#RNV02R*(T&R-o!DD=U6 zvm-loP?@Ig?sjM6x^Ac2iGPde;ZtJIptlEIL*z`4jNkE5BD&JDg&g73yBD=VO9}cZ zgHNR5=!~kF6vU6?$RUb~GSqxyA%*TB2|CYiMbh?|s-`@O%ByLm2j6s%{%5Q$i@;oM z0bLbiNr6T&L#ni#wgQ_rotESDudHCqigM(DScP<}8uV6W>9$4?W%BM&TNkcxeKOqH zup%xdM77q-vg`^?vbG{vcgqu3MRh}k&qtoQ(4ZoS{$wkH^<-X^(eEM6SYicISVma* seLBc;J`76!t$>oC&-;QtpE1p%FJP+Hhb+!Y)aZ8}3941tq#c(314|IfGynhq diff --git a/pkg/tsdb/tempo/testData/trace.json b/pkg/tsdb/tempo/testData/trace.json new file mode 100644 index 00000000000..a0533a5cfd2 --- /dev/null +++ b/pkg/tsdb/tempo/testData/trace.json @@ -0,0 +1,1354 @@ +{ + "resourceSpans": [ + { + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "string_value": "loki-all" + } + }, + { + "key": "opencensus.exporterversion", + "value": { + "string_value": "Jaeger-Go-2.25.0" + } + }, + { + "key": "host.hostname", + "value": { + "string_value": "4d019a031941" + } + }, + { + "key": "ip", + "value": { + "string_value": "172.18.0.6" + } + }, + { + "key": "client-uuid", + "value": { + "string_value": "4b19ace06df8e4de" + } + } + ] + }, + "scope_spans": [ + { + "scope": {}, + "spans": [ + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "JP0sEuuWMZA=", + "parent_span_id": "SZOr96Psndc=", + "name": "store.validateQueryTimeRange", + "start_time_unix_nano": 1616072924071839000, + "end_time_unix_nano": 1616072924071843000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "SZOr96Psndc=", + "parent_span_id": "dOuBi1tLu1M=", + "name": "store.validateQuery", + "start_time_unix_nano": 1616072924071835000, + "end_time_unix_nano": 1616072924071850000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "Q1B5LP41uzY=", + "parent_span_id": "cOnlP9NCUAE=", + "name": "cachingIndexClient.cacheFetch", + "start_time_unix_nano": 1616072924071969000, + "end_time_unix_nano": 1616072924071993000, + "events": [ + { + "time_unix_nano": 1616072924071994000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "hits", + "value": { + "int_value": 0 + } + }, + { + "key": "misses", + "value": { + "int_value": 16 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "ITnbsOAe2uw=", + "parent_span_id": "L75zZkOSUUc=", + "name": "Shipper.Uploads.Query", + "start_time_unix_nano": 1616072924072013000, + "end_time_unix_nano": 1616072924072059000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "FYlM8Cxc58U=", + "parent_span_id": "PqqRHqSc9ss=", + "name": "Shipper.Downloads.Table.MultiQueries", + "start_time_unix_nano": 1616072924072087000, + "end_time_unix_nano": 1616072924072183000, + "events": [ + { + "time_unix_nano": 1616072924072093000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "table-name", + "value": { + "string_value": "index_18704" + } + }, + { + "key": "query-count", + "value": { + "int_value": 16 + } + } + ] + }, + { + "time_unix_nano": 1616072924072122000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "compactor-1616069884.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072141000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616069700.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072162000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616070600.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072183000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616071500.gz" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "PqqRHqSc9ss=", + "parent_span_id": "L75zZkOSUUc=", + "name": "Shipper.Downloads.Query", + "start_time_unix_nano": 1616072924072069000, + "end_time_unix_nano": 1616072924072187000, + "events": [ + { + "time_unix_nano": 1616072924072076000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "table-name", + "value": { + "string_value": "index_18704" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "L75zZkOSUUc=", + "parent_span_id": "cOnlP9NCUAE=", + "name": "QUERY", + "kind": 3, + "start_time_unix_nano": 1616072924072003000, + "end_time_unix_nano": 1616072924072194000, + "attributes": [ + { + "key": "organization", + "value": { + "string_value": "fake" + } + } + ], + "events": [ + { + "time_unix_nano": 1616072924072065000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried", + "value": { + "string_value": "uploads-manager" + } + } + ] + }, + { + "time_unix_nano": 1616072924072192000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried", + "value": { + "string_value": "downloads-manager" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "cOnlP9NCUAE=", + "parent_span_id": "U/9XRHddX4E=", + "name": "store.lookupEntriesByQueries", + "start_time_unix_nano": 1616072924071956000, + "end_time_unix_nano": 1616072924072255000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "U/9XRHddX4E=", + "parent_span_id": "OS0/Er5LB/Q=", + "name": "Store.lookupIdsByMetricNameMatcher", + "start_time_unix_nano": 1616072924071897000, + "end_time_unix_nano": 1616072924072273000, + "events": [ + { + "time_unix_nano": 1616072924071916000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "metricName", + "value": { + "string_value": "logs" + } + }, + { + "key": "matcher", + "value": { + "string_value": "compose_project=\"devenv\"" + } + } + ] + }, + { + "time_unix_nano": 1616072924071948000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "matcher", + "value": { + "string_value": "compose_project=\"devenv\"" + } + }, + { + "key": "queries", + "value": { + "int_value": 16 + } + } + ] + }, + { + "time_unix_nano": 1616072924071955000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "matcher", + "value": { + "string_value": "compose_project=\"devenv\"" + } + }, + { + "key": "filteredQueries", + "value": { + "int_value": 16 + } + } + ] + }, + { + "time_unix_nano": 1616072924072264000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "matcher", + "value": { + "string_value": "compose_project=\"devenv\"" + } + }, + { + "key": "entries", + "value": { + "int_value": 2 + } + } + ] + }, + { + "time_unix_nano": 1616072924072273000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "matcher", + "value": { + "string_value": "compose_project=\"devenv\"" + } + }, + { + "key": "ids", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "OS0/Er5LB/Q=", + "parent_span_id": "dOuBi1tLu1M=", + "name": "SeriesStore.lookupSeriesByMetricNameMatchers", + "start_time_unix_nano": 1616072924071872000, + "end_time_unix_nano": 1616072924072281000, + "events": [ + { + "time_unix_nano": 1616072924071879000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "metricName", + "value": { + "string_value": "logs" + } + }, + { + "key": "matchers", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072280000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "msg", + "value": { + "string_value": "post intersection" + } + }, + { + "key": "ids", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "VVHzoqZ3i+A=", + "parent_span_id": "NhHZNlNa0hU=", + "name": "cachingIndexClient.cacheFetch", + "start_time_unix_nano": 1616072924072309000, + "end_time_unix_nano": 1616072924072317000, + "events": [ + { + "time_unix_nano": 1616072924072317000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "hits", + "value": { + "int_value": 0 + } + }, + { + "key": "misses", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "Ynf7ea0uHkA=", + "parent_span_id": "OVmgSR3nufU=", + "name": "Shipper.Uploads.Query", + "start_time_unix_nano": 1616072924072324000, + "end_time_unix_nano": 1616072924072342000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "fkjZ+Fj1ld0=", + "parent_span_id": "fc7QZ6SUR3k=", + "name": "Shipper.Downloads.Table.MultiQueries", + "start_time_unix_nano": 1616072924072371000, + "end_time_unix_nano": 1616072924072410000, + "events": [ + { + "time_unix_nano": 1616072924072378000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "table-name", + "value": { + "string_value": "index_18704" + } + }, + { + "key": "query-count", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072384000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616069700.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072390000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616070600.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072399000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "4d019a031941-1615912317231558275-1616071500.gz" + } + } + ] + }, + { + "time_unix_nano": 1616072924072410000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried-db", + "value": { + "string_value": "compactor-1616069884.gz" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "fc7QZ6SUR3k=", + "parent_span_id": "OVmgSR3nufU=", + "name": "Shipper.Downloads.Query", + "start_time_unix_nano": 1616072924072352000, + "end_time_unix_nano": 1616072924072413000, + "events": [ + { + "time_unix_nano": 1616072924072361000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "table-name", + "value": { + "string_value": "index_18704" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "OVmgSR3nufU=", + "parent_span_id": "NhHZNlNa0hU=", + "name": "QUERY", + "kind": 3, + "start_time_unix_nano": 1616072924072320000, + "end_time_unix_nano": 1616072924072419000, + "attributes": [ + { + "key": "organization", + "value": { + "string_value": "fake" + } + } + ], + "events": [ + { + "time_unix_nano": 1616072924072348000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried", + "value": { + "string_value": "uploads-manager" + } + } + ] + }, + { + "time_unix_nano": 1616072924072418000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queried", + "value": { + "string_value": "downloads-manager" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "NhHZNlNa0hU=", + "parent_span_id": "W1z0dieCT50=", + "name": "store.lookupEntriesByQueries", + "start_time_unix_nano": 1616072924072303000, + "end_time_unix_nano": 1616072924072470000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "W1z0dieCT50=", + "parent_span_id": "dOuBi1tLu1M=", + "name": "SeriesStore.lookupChunksBySeries", + "start_time_unix_nano": 1616072924072286000, + "end_time_unix_nano": 1616072924072478000, + "events": [ + { + "time_unix_nano": 1616072924072293000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "seriesIDs", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072302000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "queries", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072477000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "entries", + "value": { + "int_value": 3 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "dOuBi1tLu1M=", + "parent_span_id": "CHflqiGYvzE=", + "name": "SeriesStore.GetChunkRefs", + "start_time_unix_nano": 1616072924071827000, + "end_time_unix_nano": 1616072924072494000, + "events": [ + { + "time_unix_nano": 1616072924071870000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "metric", + "value": { + "string_value": "logs" + } + } + ] + }, + { + "time_unix_nano": 1616072924072285000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "series-ids", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072483000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "chunk-ids", + "value": { + "int_value": 2 + } + } + ] + }, + { + "time_unix_nano": 1616072924072493000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "chunks-post-filtering", + "value": { + "int_value": 2 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "WAAinXT7qVM=", + "parent_span_id": "BP6HrpTwyng=", + "name": "Fetcher.processCacheResponse", + "start_time_unix_nano": 1616072924072579000, + "end_time_unix_nano": 1616072924072588000, + "events": [ + { + "time_unix_nano": 1616072924072586000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "chunks", + "value": { + "int_value": 1 + } + }, + { + "key": "decodeRequests", + "value": { + "int_value": 0 + } + }, + { + "key": "missing", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "M7Izi+s/c+U=", + "parent_span_id": "BP6HrpTwyng=", + "name": "GetParallelChunks", + "start_time_unix_nano": 1616072924072591000, + "end_time_unix_nano": 1616072924072754000, + "events": [ + { + "time_unix_nano": 1616072924072594000, + "attributes": [ + { + "key": "chunks requested", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072753000, + "attributes": [ + { + "key": "chunks fetched", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "BP6HrpTwyng=", + "parent_span_id": "NSwuyvY1Y68=", + "name": "ChunkStore.FetchChunks", + "start_time_unix_nano": 1616072924072574000, + "end_time_unix_nano": 1616072924072770000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "NSwuyvY1Y68=", + "parent_span_id": "CHflqiGYvzE=", + "name": "LokiStore.fetchLazyChunks", + "start_time_unix_nano": 1616072924072548000, + "end_time_unix_nano": 1616072924072775000, + "events": [ + { + "time_unix_nano": 1616072924072556000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "msg", + "value": { + "string_value": "loading lazy chunks" + } + }, + { + "key": "chunks", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "Qq+r9GiMkNI=", + "parent_span_id": "PR8RqjKV3Uo=", + "name": "Fetcher.processCacheResponse", + "start_time_unix_nano": 1616072924072837000, + "end_time_unix_nano": 1616072924072849000, + "events": [ + { + "time_unix_nano": 1616072924072846000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "chunks", + "value": { + "int_value": 1 + } + }, + { + "key": "decodeRequests", + "value": { + "int_value": 0 + } + }, + { + "key": "missing", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "cZgwffl0hgY=", + "parent_span_id": "PR8RqjKV3Uo=", + "name": "GetParallelChunks", + "start_time_unix_nano": 1616072924072852000, + "end_time_unix_nano": 1616072924072946000, + "events": [ + { + "time_unix_nano": 1616072924072856000, + "attributes": [ + { + "key": "chunks requested", + "value": { + "int_value": 1 + } + } + ] + }, + { + "time_unix_nano": 1616072924072945000, + "attributes": [ + { + "key": "chunks fetched", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "PR8RqjKV3Uo=", + "parent_span_id": "IFRLJyTYAD4=", + "name": "ChunkStore.FetchChunks", + "start_time_unix_nano": 1616072924072829000, + "end_time_unix_nano": 1616072924072950000, + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "IFRLJyTYAD4=", + "parent_span_id": "CHflqiGYvzE=", + "name": "LokiStore.fetchLazyChunks", + "start_time_unix_nano": 1616072924072783000, + "end_time_unix_nano": 1616072924072953000, + "events": [ + { + "time_unix_nano": 1616072924072808000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "msg", + "value": { + "string_value": "loading lazy chunks" + } + }, + { + "key": "chunks", + "value": { + "int_value": 1 + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "CHflqiGYvzE=", + "parent_span_id": "OkZuqqjv99s=", + "name": "/logproto.Querier/Query", + "kind": 2, + "start_time_unix_nano": 1616072924071166000, + "end_time_unix_nano": 1616072924077652000, + "attributes": [ + { + "key": "component", + "value": { + "string_value": "gRPC" + } + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "OkZuqqjv99s=", + "parent_span_id": "OnJtHqWUrKA=", + "name": "/logproto.Querier/Query", + "kind": 3, + "start_time_unix_nano": 1616072924070909000, + "end_time_unix_nano": 1616072924077852000, + "attributes": [ + { + "key": "component", + "value": { + "string_value": "gRPC" + } + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "OnJtHqWUrKA=", + "parent_span_id": "Yg8DoiU8Xjc=", + "name": "query.Exec", + "start_time_unix_nano": 1616072924070597000, + "end_time_unix_nano": 1616072924078351000, + "events": [ + { + "time_unix_nano": 1616072924077908000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "Ingester.TotalReached", + "value": { + "int_value": 1 + } + }, + { + "key": "Ingester.TotalChunksMatched", + "value": { + "int_value": 1 + } + }, + { + "key": "Ingester.TotalBatches", + "value": { + "int_value": 0 + } + }, + { + "key": "Ingester.TotalLinesSent", + "value": { + "int_value": 0 + } + }, + { + "key": "Ingester.HeadChunkBytes", + "value": { + "string_value": "165 kB" + } + }, + { + "key": "Ingester.HeadChunkLines", + "value": { + "int_value": 1482 + } + }, + { + "key": "Ingester.DecompressedBytes", + "value": { + "string_value": "690 kB" + } + }, + { + "key": "Ingester.DecompressedLines", + "value": { + "int_value": 5293 + } + }, + { + "key": "Ingester.CompressedBytes", + "value": { + "string_value": "65 kB" + } + }, + { + "key": "Ingester.TotalDuplicates", + "value": { + "int_value": 0 + } + }, + { + "key": "Store.TotalChunksRef", + "value": { + "int_value": 0 + } + }, + { + "key": "Store.TotalChunksDownloaded", + "value": { + "int_value": 0 + } + }, + { + "key": "Store.ChunksDownloadTime", + "value": { + "string_value": "0s" + } + }, + { + "key": "Store.HeadChunkBytes", + "value": { + "string_value": "0 B" + } + }, + { + "key": "Store.HeadChunkLines", + "value": { + "int_value": 0 + } + }, + { + "key": "Store.DecompressedBytes", + "value": { + "string_value": "0 B" + } + }, + { + "key": "Store.DecompressedLines", + "value": { + "int_value": 0 + } + }, + { + "key": "Store.CompressedBytes", + "value": { + "string_value": "0 B" + } + }, + { + "key": "Store.TotalDuplicates", + "value": { + "int_value": 0 + } + } + ] + }, + { + "time_unix_nano": 1616072924077920000, + "attributes": [ + { + "key": "level", + "value": { + "string_value": "debug" + } + }, + { + "key": "Summary.BytesProcessedPerSecond", + "value": { + "string_value": "118 MB" + } + }, + { + "key": "Summary.LinesProcessedPerSecond", + "value": { + "int_value": 934542 + } + }, + { + "key": "Summary.TotalBytesProcessed", + "value": { + "string_value": "855 kB" + } + }, + { + "key": "Summary.TotalLinesProcessed", + "value": { + "int_value": 6775 + } + }, + { + "key": "Summary.ExecTime", + "value": { + "string_value": "7.249536ms" + } + } + ] + } + ], + "status": {} + }, + { + "trace_id": "AAAAAAAAAABiDwOiJTxeNw==", + "span_id": "Yg8DoiU8Xjc=", + "parent_span_id": "AAAAAAAAAAA=", + "name": "HTTP GET - loki_api_v1_query_range", + "kind": 2, + "start_time_unix_nano": 1616072924070497000, + "end_time_unix_nano": 1616072924078918000, + "attributes": [ + { + "key": "sampler.type", + "value": { + "string_value": "const" + } + }, + { + "key": "sampler.param", + "value": { + "bool_value": true + } + }, + { + "key": "http.status_code", + "value": { + "int_value": 200 + } + }, + { + "key": "http.method", + "value": { + "string_value": "GET" + } + }, + { + "key": "http.url", + "value": { + "string_value": "/loki/api/v1/query_range?direction=BACKWARD\u0026limit=1000\u0026query=%7Bcompose_project%3D%22devenv%22%7D%20%7C%3D%22trace_id%22\u0026start=1616070921000000000\u0026end=1616072722000000000\u0026step=2" + } + }, + { + "key": "component", + "value": { + "string_value": "net/http" + } + } + ], + "status": {} + } + ] + } + ] + } + ] +} diff --git a/pkg/tsdb/tempo/trace.go b/pkg/tsdb/tempo/trace.go index ed3c43061f3..35fe74c9d27 100644 --- a/pkg/tsdb/tempo/trace.go +++ b/pkg/tsdb/tempo/trace.go @@ -7,11 +7,13 @@ import ( "io" "net/http" + "github.com/gogo/protobuf/proto" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/tracing" "github.com/grafana/grafana-plugin-sdk-go/data" "github.com/grafana/grafana/pkg/tsdb/tempo/kinds/dataquery" - "go.opentelemetry.io/collector/pdata/ptrace" + "github.com/grafana/tempo/pkg/tempopb" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" @@ -48,12 +50,92 @@ func (s *Service) getTrace(ctx context.Context, pCtx backend.PluginContext, quer return result, err } - request, err := s.createRequest(ctx, dsInfo, *model.Query, query.TimeRange.From.Unix(), query.TimeRange.To.Unix()) + var apiVersion = TraceRequestApiVersionV2 + //nolint:bodyclose + resp, traceBody, err := s.performTraceRequest(ctx, dsInfo, apiVersion, model, query, span) + if err != nil { + return result, err + } + + // If the endpoint is not found, try the v1 endpoint, we might be communicating with an older Tempo version + if resp.StatusCode == http.StatusNotFound { + apiVersion = TraceRequestApiVersionV1 + //nolint:bodyclose + resp, traceBody, err = s.performTraceRequest(ctx, dsInfo, apiVersion, model, query, span) + if err != nil { + return result, err + } + } + + if resp.StatusCode != http.StatusOK { + ctxLogger.Error("Failed to get trace", "error", err, "function", logEntrypoint()) + result.Error = fmt.Errorf("failed to get trace with id: %s Status: %s Body: %s", *model.Query, resp.Status, string(traceBody)) + span.RecordError(result.Error) + span.SetStatus(codes.Error, result.Error.Error()) + return result, nil + } + + var frame *data.Frame + + if apiVersion == TraceRequestApiVersionV1 { + var otTrace tempopb.Trace + err = proto.Unmarshal(traceBody, &otTrace) + + if err != nil { + ctxLogger.Error("Failed to convert tempo response to Otlp", "error", err, "function", logEntrypoint()) + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) + return &backend.DataResponse{}, fmt.Errorf("failed to convert tempo response to Otlp: %w", err) + } + + frame, err = TraceToFrame(otTrace.GetResourceSpans()) + if err != nil { + ctxLogger.Error("Failed to transform trace to data frame", "error", err, "function", logEntrypoint()) + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) + return &backend.DataResponse{}, fmt.Errorf("failed to transform trace %v to data frame: %w", model.Query, err) + } + } else { + var tr tempopb.TraceByIDResponse + err = proto.Unmarshal(traceBody, &tr) + + if err != nil { + ctxLogger.Error("Failed to convert tempo response to Otlp", "error", err, "function", logEntrypoint()) + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) + return &backend.DataResponse{}, fmt.Errorf("failed to convert tempo response to Otlp: %w", err) + } + + frame, err = TraceToFrame(tr.Trace.ResourceSpans) + if err != nil { + ctxLogger.Error("Failed to transform trace to data frame", "error", err, "function", logEntrypoint()) + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) + return &backend.DataResponse{}, fmt.Errorf("failed to transform trace %v to data frame: %w", model.Query, err) + } + + frame.Meta.Custom = map[string]interface{}{ + "partial": tr.GetStatus() == tempopb.TraceByIDResponse_PARTIAL, + "message": tr.GetMessage(), + } + } + + frame.RefID = refID + frames := []*data.Frame{frame} + result.Frames = frames + ctxLogger.Debug("Successfully got trace", "function", logEntrypoint()) + return result, nil +} + +func (s *Service) performTraceRequest(ctx context.Context, dsInfo *Datasource, apiVersion TraceRequestApiVersion, model *dataquery.TempoQuery, query backend.DataQuery, span trace.Span) (*http.Response, []byte, error) { + ctxLogger := s.logger.FromContext(ctx) + request, err := s.createRequest(ctx, dsInfo, apiVersion, *model.Query, query.TimeRange.From.Unix(), query.TimeRange.To.Unix()) + if err != nil { ctxLogger.Error("Failed to create request", "error", err, "function", logEntrypoint()) span.RecordError(err) span.SetStatus(codes.Error, err.Error()) - return result, err + return nil, nil, err } resp, err := dsInfo.HTTPClient.Do(request) @@ -61,7 +143,7 @@ func (s *Service) getTrace(ctx context.Context, pCtx backend.PluginContext, quer ctxLogger.Error("Failed to send request to Tempo", "error", err, "function", logEntrypoint()) span.RecordError(err) span.SetStatus(codes.Error, err.Error()) - return result, fmt.Errorf("failed get to tempo: %w", err) + return nil, nil, fmt.Errorf("failed get to tempo: %w", err) } defer func() { @@ -73,50 +155,33 @@ func (s *Service) getTrace(ctx context.Context, pCtx backend.PluginContext, quer body, err := io.ReadAll(resp.Body) if err != nil { ctxLogger.Error("Failed to read response body", "error", err, "function", logEntrypoint()) - return &backend.DataResponse{}, err + return nil, nil, err } - - if resp.StatusCode != http.StatusOK { - ctxLogger.Error("Failed to get trace", "error", err, "function", logEntrypoint()) - result.Error = fmt.Errorf("failed to get trace with id: %s Status: %s Body: %s", *model.Query, resp.Status, string(body)) - span.RecordError(result.Error) - span.SetStatus(codes.Error, result.Error.Error()) - return result, nil - } - - pbUnmarshaler := ptrace.ProtoUnmarshaler{} - otTrace, err := pbUnmarshaler.UnmarshalTraces(body) - - if err != nil { - ctxLogger.Error("Failed to convert tempo response to Otlp", "error", err, "function", logEntrypoint()) - span.RecordError(err) - span.SetStatus(codes.Error, err.Error()) - return &backend.DataResponse{}, fmt.Errorf("failed to convert tempo response to Otlp: %w", err) - } - - frame, err := TraceToFrame(otTrace) - if err != nil { - ctxLogger.Error("Failed to transform trace to data frame", "error", err, "function", logEntrypoint()) - span.RecordError(err) - span.SetStatus(codes.Error, err.Error()) - return &backend.DataResponse{}, fmt.Errorf("failed to transform trace %v to data frame: %w", model.Query, err) - } - - frame.RefID = refID - frames := []*data.Frame{frame} - result.Frames = frames - ctxLogger.Debug("Successfully got trace", "function", logEntrypoint()) - return result, nil + return resp, body, nil } -func (s *Service) createRequest(ctx context.Context, dsInfo *Datasource, traceID string, start int64, end int64) (*http.Request, error) { +type TraceRequestApiVersion int + +const ( + TraceRequestApiVersionV1 TraceRequestApiVersion = iota + TraceRequestApiVersionV2 +) + +func (s *Service) createRequest(ctx context.Context, dsInfo *Datasource, apiVersion TraceRequestApiVersion, traceID string, start int64, end int64) (*http.Request, error) { ctxLogger := s.logger.FromContext(ctx) + var baseUrl string var tempoQuery string - if start == 0 || end == 0 { - tempoQuery = fmt.Sprintf("%s/api/traces/%s", dsInfo.URL, traceID) + if apiVersion == TraceRequestApiVersionV1 { + baseUrl = fmt.Sprintf("%s/api/traces/%s", dsInfo.URL, traceID) } else { - tempoQuery = fmt.Sprintf("%s/api/traces/%s?start=%d&end=%d", dsInfo.URL, traceID, start, end) + baseUrl = fmt.Sprintf("%s/api/v2/traces/%s", dsInfo.URL, traceID) + } + + if start == 0 || end == 0 { + tempoQuery = baseUrl + } else { + tempoQuery = fmt.Sprintf("%s?start=%d&end=%d", baseUrl, start, end) } req, err := http.NewRequestWithContext(ctx, "GET", tempoQuery, nil) diff --git a/pkg/tsdb/tempo/trace_test.go b/pkg/tsdb/tempo/trace_test.go index e58da96f5f1..78983040050 100644 --- a/pkg/tsdb/tempo/trace_test.go +++ b/pkg/tsdb/tempo/trace_test.go @@ -10,18 +10,35 @@ import ( ) func TestTempo(t *testing.T) { - t.Run("createRequest without time range - success", func(t *testing.T) { + t.Run("createRequest v1 without time range - success", func(t *testing.T) { service := &Service{logger: backend.NewLoggerWith("logger", "tempo-test")} - req, err := service.createRequest(context.Background(), &Datasource{}, "traceID", 0, 0) + req, err := service.createRequest(context.Background(), &Datasource{}, TraceRequestApiVersionV1, "traceID", 0, 0) require.NoError(t, err) assert.Equal(t, 1, len(req.Header)) + assert.Equal(t, "/api/traces/traceID", req.URL.String()) }) - t.Run("createRequest with time range - success", func(t *testing.T) { + t.Run("createRequest v1 with time range - success", func(t *testing.T) { service := &Service{logger: backend.NewLoggerWith("logger", "tempo-test")} - req, err := service.createRequest(context.Background(), &Datasource{}, "traceID", 1, 2) + req, err := service.createRequest(context.Background(), &Datasource{}, TraceRequestApiVersionV1, "traceID", 1, 2) require.NoError(t, err) assert.Equal(t, 1, len(req.Header)) assert.Equal(t, "/api/traces/traceID?start=1&end=2", req.URL.String()) }) + + t.Run("createRequest v2 without time range - success", func(t *testing.T) { + service := &Service{logger: backend.NewLoggerWith("logger", "tempo-test")} + req, err := service.createRequest(context.Background(), &Datasource{}, TraceRequestApiVersionV2, "traceID", 0, 0) + require.NoError(t, err) + assert.Equal(t, 1, len(req.Header)) + assert.Equal(t, "/api/v2/traces/traceID", req.URL.String()) + }) + + t.Run("createRequest v2 with time range - success", func(t *testing.T) { + service := &Service{logger: backend.NewLoggerWith("logger", "tempo-test")} + req, err := service.createRequest(context.Background(), &Datasource{}, TraceRequestApiVersionV2, "traceID", 1, 2) + require.NoError(t, err) + assert.Equal(t, 1, len(req.Header)) + assert.Equal(t, "/api/v2/traces/traceID?start=1&end=2", req.URL.String()) + }) } diff --git a/pkg/tsdb/tempo/trace_transform.go b/pkg/tsdb/tempo/trace_transform.go index a7d0f3c2dea..13b5e79fae7 100644 --- a/pkg/tsdb/tempo/trace_transform.go +++ b/pkg/tsdb/tempo/trace_transform.go @@ -7,8 +7,9 @@ import ( "strings" "github.com/grafana/grafana-plugin-sdk-go/data" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" + commonv11 "github.com/grafana/tempo/pkg/tempopb/common/v1" + v1 "github.com/grafana/tempo/pkg/tempopb/resource/v1" + tracev11 "github.com/grafana/tempo/pkg/tempopb/trace/v1" "go.opentelemetry.io/otel/attribute" semconv "go.opentelemetry.io/otel/semconv/v1.17.0" ) @@ -31,13 +32,11 @@ type TraceReference struct { Tags []*KeyValue `json:"tags"` } -func TraceToFrame(td ptrace.Traces) (*data.Frame, error) { +func TraceToFrame(resourceSpans []*tracev11.ResourceSpans) (*data.Frame, error) { // In open telemetry format the spans are grouped first by resource/service they originated in and inside that // resource they are grouped by the instrumentation library which created them. - resourceSpans := td.ResourceSpans() - - if resourceSpans.Len() == 0 { + if len(resourceSpans) == 0 { return nil, nil } @@ -68,8 +67,8 @@ func TraceToFrame(td ptrace.Traces) (*data.Frame, error) { }, } - for i := 0; i < resourceSpans.Len(); i++ { - rs := resourceSpans.At(i) + for i := 0; i < len(resourceSpans); i++ { + rs := resourceSpans[i] rows, err := resourceSpansToRows(rs) if err != nil { return nil, err @@ -84,27 +83,27 @@ func TraceToFrame(td ptrace.Traces) (*data.Frame, error) { } // resourceSpansToRows processes all the spans for a particular resource/service -func resourceSpansToRows(rs ptrace.ResourceSpans) ([][]any, error) { - resource := rs.Resource() - ilss := rs.ScopeSpans() +func resourceSpansToRows(rs *tracev11.ResourceSpans) ([][]any, error) { + resource := rs.Resource + ilss := rs.ScopeSpans - if resource.Attributes().Len() == 0 || ilss.Len() == 0 { + if len(resource.Attributes) == 0 || len(ilss) == 0 { return [][]any{}, nil } // Approximate the number of the spans as the number of the spans in the first // instrumentation library info. - rows := make([][]any, 0, ilss.At(0).Spans().Len()) + rows := make([][]any, 0, len(ilss[0].Spans)) - for i := 0; i < ilss.Len(); i++ { - ils := ilss.At(i) + for i := 0; i < len(ilss); i++ { + ils := ilss[i] // These are finally the actual spans - spans := ils.Spans() + spans := ils.Spans - for j := 0; j < spans.Len(); j++ { - span := spans.At(j) - row, err := spanToSpanRow(span, ils.Scope(), resource) + for j := 0; j < len(spans); j++ { + span := spans[j] + row, err := spanToSpanRow(span, ils.Scope, resource) if err != nil { return nil, err } @@ -117,28 +116,28 @@ func resourceSpansToRows(rs ptrace.ResourceSpans) ([][]any, error) { return rows, nil } -func spanToSpanRow(span ptrace.Span, libraryTags pcommon.InstrumentationScope, resource pcommon.Resource) ([]any, error) { +func spanToSpanRow(span *tracev11.Span, libraryTags *commonv11.InstrumentationScope, resource *v1.Resource) ([]any, error) { // If the id representation changed from hexstring to something else we need to change the transformBase64IDToHexString in the frontend code - traceID := span.TraceID() + traceID := span.TraceId traceIDHex := hex.EncodeToString(traceID[:]) traceIDHex = strings.TrimPrefix(traceIDHex, strings.Repeat("0", 16)) - spanID := span.SpanID() + spanID := span.SpanId spanIDHex := hex.EncodeToString(spanID[:]) - parentSpanID := span.ParentSpanID() + parentSpanID := span.ParentSpanId parentSpanIDHex := hex.EncodeToString(parentSpanID[:]) - startTime := float64(span.StartTimestamp()) / 1_000_000 + startTime := float64(span.StartTimeUnixNano) / 1_000_000 serviceName, serviceTags := resourceToProcess(resource) - status := span.Status() - statusCode := int64(status.Code()) - statusMessage := status.Message() + status := span.Status + statusCode := int64(status.Code) + statusMessage := status.Message - libraryName := libraryTags.Name() - libraryVersion := libraryTags.Version() - traceState := getTraceState(span.TraceState()) + libraryName := libraryTags.Name + libraryVersion := libraryTags.Version + traceState := span.TraceState serviceTagsJson, err := json.Marshal(serviceTags) if err != nil { @@ -150,12 +149,12 @@ func spanToSpanRow(span ptrace.Span, libraryTags pcommon.InstrumentationScope, r return nil, fmt.Errorf("failed to marshal span tags: %w", err) } - logs, err := json.Marshal(spanEventsToLogs(span.Events())) + logs, err := json.Marshal(spanEventsToLogs(span.Events)) if err != nil { return nil, fmt.Errorf("failed to marshal span logs: %w", err) } - references, err := json.Marshal(spanLinksToReferences(span.Links())) + references, err := json.Marshal(spanLinksToReferences(span.Links)) if err != nil { return nil, fmt.Errorf("failed to marshal span links: %w", err) @@ -166,9 +165,9 @@ func spanToSpanRow(span ptrace.Span, libraryTags pcommon.InstrumentationScope, r traceIDHex, spanIDHex, parentSpanIDHex, - span.Name(), + span.Name, serviceName, - getSpanKind(span.Kind()), + getSpanKind(span.Kind), statusCode, statusMessage, libraryName, @@ -176,70 +175,68 @@ func spanToSpanRow(span ptrace.Span, libraryTags pcommon.InstrumentationScope, r traceState, json.RawMessage(serviceTagsJson), startTime, - float64(span.EndTimestamp()-span.StartTimestamp()) / 1_000_000, + float64(span.EndTimeUnixNano-span.StartTimeUnixNano) / 1_000_000, json.RawMessage(logs), json.RawMessage(references), json.RawMessage(spanTags), }, nil } -func resourceToProcess(resource pcommon.Resource) (string, []*KeyValue) { - attrs := resource.Attributes() +func resourceToProcess(resource *v1.Resource) (string, []*KeyValue) { + attrs := resource.Attributes serviceName := ResourceNoServiceName - if attrs.Len() == 0 { + if len(attrs) == 0 { return serviceName, nil } - tags := make([]*KeyValue, 0, attrs.Len()-1) - attrs.Range(func(key string, attr pcommon.Value) bool { - if attribute.Key(key) == semconv.ServiceNameKey { - serviceName = attr.Str() + tags := make([]*KeyValue, 0, len(attrs)-1) + for _, attr := range attrs { + if attribute.Key(attr.Key) == semconv.ServiceNameKey { + serviceName = attr.GetValue().GetStringValue() } - tags = append(tags, &KeyValue{Key: key, Value: getAttributeVal(attr)}) - return true - }) + tags = append(tags, &KeyValue{Key: attr.Key, Value: getAttributeVal(attr.Value)}) + } return serviceName, tags } -func getAttributeVal(attr pcommon.Value) any { - switch attr.Type() { - case pcommon.ValueTypeStr: - return attr.Str() - case pcommon.ValueTypeInt: - return attr.Int() - case pcommon.ValueTypeBool: - return attr.Bool() - case pcommon.ValueTypeDouble: - return attr.Double() - case pcommon.ValueTypeMap, pcommon.ValueTypeSlice: - return attr.AsString() +func getAttributeVal(attr *commonv11.AnyValue) any { + switch attr.GetValue().(type) { + case *commonv11.AnyValue_StringValue: + return attr.GetStringValue() + case *commonv11.AnyValue_IntValue: + return attr.GetIntValue() + case *commonv11.AnyValue_BoolValue: + return attr.GetBoolValue() + case *commonv11.AnyValue_DoubleValue: + return attr.GetDoubleValue() + case *commonv11.AnyValue_KvlistValue, *commonv11.AnyValue_ArrayValue: + return attr.GetStringValue() default: return nil } } -func getSpanTags(span ptrace.Span) []*KeyValue { - var tags []*KeyValue - span.Attributes().Range(func(key string, attr pcommon.Value) bool { - tags = append(tags, &KeyValue{Key: key, Value: getAttributeVal(attr)}) - return true - }) +func getSpanTags(span *tracev11.Span) []*KeyValue { + tags := make([]*KeyValue, len(span.Attributes)) + for i, attr := range span.Attributes { + tags[i] = &KeyValue{Key: attr.Key, Value: getAttributeVal(attr.Value)} + } return tags } -func getSpanKind(spanKind ptrace.SpanKind) string { +func getSpanKind(spanKind tracev11.Span_SpanKind) string { var tagStr string switch spanKind { - case ptrace.SpanKindClient: + case tracev11.Span_SPAN_KIND_CLIENT: tagStr = string(OpenTracingSpanKindClient) - case ptrace.SpanKindServer: + case tracev11.Span_SPAN_KIND_SERVER: tagStr = string(OpenTracingSpanKindServer) - case ptrace.SpanKindProducer: + case tracev11.Span_SPAN_KIND_PRODUCER: tagStr = string(OpenTracingSpanKindProducer) - case ptrace.SpanKindConsumer: + case tracev11.Span_SPAN_KIND_CONSUMER: tagStr = string(OpenTracingSpanKindConsumer) - case ptrace.SpanKindInternal: + case tracev11.Span_SPAN_KIND_INTERNAL: tagStr = string(OpenTracingSpanKindInternal) default: return "" @@ -248,54 +245,48 @@ func getSpanKind(spanKind ptrace.SpanKind) string { return tagStr } -func getTraceState(traceState pcommon.TraceState) string { - return traceState.AsRaw() -} - -func spanEventsToLogs(events ptrace.SpanEventSlice) []*TraceLog { - if events.Len() == 0 { +func spanEventsToLogs(events []*tracev11.Span_Event) []*TraceLog { + if len(events) == 0 { return nil } - logs := make([]*TraceLog, 0, events.Len()) - for i := 0; i < events.Len(); i++ { - event := events.At(i) - fields := make([]*KeyValue, 0, event.Attributes().Len()+1) - event.Attributes().Range(func(key string, attr pcommon.Value) bool { - fields = append(fields, &KeyValue{Key: key, Value: getAttributeVal(attr)}) - return true - }) + logs := make([]*TraceLog, 0, len(events)) + for i := 0; i < len(events); i++ { + event := events[i] + fields := make([]*KeyValue, 0, len(event.Attributes)+1) + for _, attr := range event.Attributes { + fields = append(fields, &KeyValue{Key: attr.Key, Value: getAttributeVal(attr.Value)}) + } logs = append(logs, &TraceLog{ - Timestamp: float64(event.Timestamp()) / 1_000_000, + Timestamp: float64(event.TimeUnixNano) / 1_000_000, Fields: fields, - Name: event.Name(), + Name: event.Name, }) } return logs } -func spanLinksToReferences(links ptrace.SpanLinkSlice) []*TraceReference { - if links.Len() == 0 { +func spanLinksToReferences(links []*tracev11.Span_Link) []*TraceReference { + if len(links) == 0 { return nil } - references := make([]*TraceReference, 0, links.Len()) - for i := 0; i < links.Len(); i++ { - link := links.At(i) + references := make([]*TraceReference, 0, len(links)) + for i := 0; i < len(links); i++ { + link := links[i] - traceID := link.TraceID() + traceID := link.TraceId traceIDHex := hex.EncodeToString(traceID[:]) traceIDHex = strings.TrimLeft(traceIDHex, "0") - spanID := link.SpanID() + spanID := link.SpanId spanIDHex := hex.EncodeToString(spanID[:]) - tags := make([]*KeyValue, 0, link.Attributes().Len()) - link.Attributes().Range(func(key string, attr pcommon.Value) bool { - tags = append(tags, &KeyValue{Key: key, Value: getAttributeVal(attr)}) - return true - }) + tags := make([]*KeyValue, 0, len(link.Attributes)) + for _, attr := range link.Attributes { + tags = append(tags, &KeyValue{Key: attr.Key, Value: getAttributeVal(attr.Value)}) + } references = append(references, &TraceReference{ TraceID: traceIDHex, diff --git a/pkg/tsdb/tempo/trace_transform_test.go b/pkg/tsdb/tempo/trace_transform_test.go index 8253220655a..8fd69f64ca8 100644 --- a/pkg/tsdb/tempo/trace_transform_test.go +++ b/pkg/tsdb/tempo/trace_transform_test.go @@ -1,39 +1,35 @@ package tempo import ( + "encoding/hex" "encoding/json" "os" "testing" - "go.opentelemetry.io/collector/pdata/pcommon" - "go.opentelemetry.io/collector/pdata/ptrace" - + //nolint:all + "github.com/golang/protobuf/jsonpb" "github.com/grafana/grafana-plugin-sdk-go/data" + "github.com/grafana/tempo/pkg/tempopb" + v1 "github.com/grafana/tempo/pkg/tempopb/trace/v1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestTraceToFrame(t *testing.T) { t.Run("should transform tempo protobuf response into dataframe", func(t *testing.T) { - // For what ever reason you cannot easily create ptrace.Traces for the TraceToFrame from something more readable - // like json. You could tediously create the structures manually using all the setters for everything or use - // https://github.com/grafana/tempo/tree/master/pkg/tempopb to create the protobuf structs from something like - // json. At the moment just saving some real tempo proto response into file and loading was the easiest and - // as my patience was diminished trying to figure this out, I say it's good enough. You can also just modify - // the trace afterward as you wish. - proto, err := os.ReadFile("testData/tempo_proto_response") + jsonResponse, err := os.Open("testData/trace.json") require.NoError(t, err) - pbUnmarshaler := ptrace.ProtoUnmarshaler{} - otTrace, err := pbUnmarshaler.UnmarshalTraces(proto) + var otTrace tempopb.Trace + err = jsonpb.Unmarshal(jsonResponse, &otTrace) require.NoError(t, err) // For some reason the trace does not have named events (probably was generated some time ago) so we just set // one here for testing origSpan := findSpan(otTrace, "7198307df9748606") - origSpan.Events().At(0).SetName("test event") + origSpan.GetEvents()[0].Name = "test event" - frame, err := TraceToFrame(otTrace) + frame, err := TraceToFrame(otTrace.GetResourceSpans()) require.NoError(t, err) require.Equal(t, 30, frame.Rows()) @@ -49,7 +45,7 @@ func TestTraceToFrame(t *testing.T) { require.Equal(t, 1616072924070.497, root["startTime"]) require.Equal(t, 8.421, root["duration"]) require.Equal(t, json.RawMessage("null"), root["logs"]) - require.Equal(t, json.RawMessage("[{\"value\":\"const\",\"key\":\"sampler.type\"},{\"value\":true,\"key\":\"sampler.param\"},{\"value\":200,\"key\":\"http.status_code\"},{\"value\":\"GET\",\"key\":\"http.method\"},{\"value\":\"/loki/api/v1/query_range?direction=BACKWARD\\u0026limit=1000\\u0026query=%7Bcompose_project%3D%22devenv%22%7D%20%7C%3D%22traceID%22\\u0026start=1616070921000000000\\u0026end=1616072722000000000\\u0026step=2\",\"key\":\"http.url\"},{\"value\":\"net/http\",\"key\":\"component\"}]"), root["tags"]) + require.Equal(t, json.RawMessage("[{\"value\":\"const\",\"key\":\"sampler.type\"},{\"value\":true,\"key\":\"sampler.param\"},{\"value\":200,\"key\":\"http.status_code\"},{\"value\":\"GET\",\"key\":\"http.method\"},{\"value\":\"/loki/api/v1/query_range?direction=BACKWARD\\u0026limit=1000\\u0026query=%7Bcompose_project%3D%22devenv%22%7D%20%7C%3D%22trace_id%22\\u0026start=1616070921000000000\\u0026end=1616072722000000000\\u0026step=2\",\"key\":\"http.url\"},{\"value\":\"net/http\",\"key\":\"component\"}]"), root["tags"]) span := bFrame.FindRowWithValue("spanID", "7198307df9748606") @@ -85,31 +81,29 @@ func TestTraceToFrame(t *testing.T) { }) t.Run("should transform correct traceID", func(t *testing.T) { - proto, err := os.ReadFile("testData/tempo_proto_response") + jsonResponse, err := os.Open("testData/trace.json") require.NoError(t, err) - pbUnmarshaler := ptrace.ProtoUnmarshaler{} - otTrace, err := pbUnmarshaler.UnmarshalTraces(proto) + var otTrace tempopb.Trace + err = jsonpb.Unmarshal(jsonResponse, &otTrace) require.NoError(t, err) var index int - otTrace.ResourceSpans().RemoveIf(func(rsp ptrace.ResourceSpans) bool { - rsp.ScopeSpans().RemoveIf(func(sp ptrace.ScopeSpans) bool { - sp.Spans().RemoveIf(func(span ptrace.Span) bool { + for _, resourceSpans := range otTrace.GetResourceSpans() { + for _, scopeSpans := range resourceSpans.GetScopeSpans() { + for _, span := range scopeSpans.GetSpans() { if index == 0 { - span.SetTraceID(pcommon.TraceID([16]byte{0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7})) + span.TraceId = []byte{0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7} } if index == 1 { - span.SetTraceID(pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7})) + span.TraceId = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7} } index++ - return false - }) - return false - }) - return false - }) - frame, err := TraceToFrame(otTrace) + } + } + } + + frame, err := TraceToFrame(otTrace.GetResourceSpans()) require.NoError(t, err) bFrame := &BetterFrame{frame} @@ -168,15 +162,14 @@ func fieldNames(frame *data.Frame) []string { return names } -func findSpan(trace ptrace.Traces, spanId string) *ptrace.Span { - for i := 0; i < trace.ResourceSpans().Len(); i++ { - scope := trace.ResourceSpans().At(i).ScopeSpans() - for j := 0; j < scope.Len(); j++ { - spans := scope.At(j).Spans() - for k := 0; k < spans.Len(); k++ { - if spans.At(k).SpanID().String() == spanId { - found := spans.At(k) - return &found +func findSpan(trace tempopb.Trace, spanId string) *v1.Span { + for i := 0; i < len(trace.GetResourceSpans()); i++ { + scope := trace.GetResourceSpans()[i].GetScopeSpans() + for j := 0; j < len(scope); j++ { + spans := scope[j].GetSpans() + for k := 0; k < len(spans); k++ { + if hex.EncodeToString(spans[k].GetSpanId()[:]) == spanId { + return spans[k] } } } diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx index 52c95dedbba..3f44df06a5e 100644 --- a/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx +++ b/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx @@ -138,6 +138,13 @@ export const TracePageHeader = memo((props: TracePageHeaderProps) => {
{timestamp(trace, timeZone)} + {data.meta?.custom?.partial && ( + + + + + + )} {method && method.length > 0 && (