diff --git a/go.mod b/go.mod index 702e0b75f..f356d2b6d 100644 --- a/go.mod +++ b/go.mod @@ -20,16 +20,13 @@ require ( github.com/spf13/viper v1.14.0 github.com/stretchr/testify v1.8.1 github.com/uber/jaeger-client-go v2.30.0+incompatible - go.opentelemetry.io/otel v0.20.0 - go.opentelemetry.io/otel/exporters/metric/prometheus v0.20.0 - go.opentelemetry.io/otel/exporters/otlp v0.20.0 - go.opentelemetry.io/otel/exporters/trace/jaeger v0.20.0 - go.opentelemetry.io/otel/metric v0.20.0 - go.opentelemetry.io/otel/oteltest v0.20.0 - go.opentelemetry.io/otel/sdk v0.20.0 - go.opentelemetry.io/otel/sdk/export/metric v0.20.0 - go.opentelemetry.io/otel/sdk/metric v0.20.0 - go.opentelemetry.io/otel/trace v0.20.0 + go.opentelemetry.io/otel v1.10.0 + go.opentelemetry.io/otel/exporters/jaeger v1.10.0 + go.opentelemetry.io/otel/exporters/prometheus v0.32.1 + go.opentelemetry.io/otel/metric v0.32.1 + go.opentelemetry.io/otel/sdk v1.10.0 + go.opentelemetry.io/otel/sdk/metric v0.32.1 + go.opentelemetry.io/otel/trace v1.10.0 go.uber.org/zap v1.24.0 gomodules.xyz/jsonpatch/v2 v2.2.0 google.golang.org/grpc v1.51.0 @@ -44,12 +41,14 @@ require ( github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect @@ -60,6 +59,7 @@ require ( github.com/google/gofuzz v1.1.0 // indirect github.com/google/uuid v1.1.2 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect @@ -67,7 +67,7 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mailru/easyjson v0.7.6 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -83,12 +83,16 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.1 // indirect github.com/uber/jaeger-lib v2.2.0+incompatible // indirect - go.opentelemetry.io/proto/otlp v0.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect golang.org/x/net v0.0.0-20221014081412-f15817d10f9b // indirect golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect - golang.org/x/sys v0.0.0-20220908164124-27713097b956 // indirect + golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect diff --git a/go.sum b/go.sum index 036ae2bcb..c0f729fb7 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZw github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -77,8 +79,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -91,7 +97,11 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= @@ -130,6 +140,7 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= @@ -165,6 +176,8 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -185,6 +198,7 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -230,6 +244,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -270,6 +285,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -350,6 +367,8 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= +github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -562,26 +581,58 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.6.0/go.mod h1:bfJD2DZVw0LBxghOTlgnlI0CV3hLDu9XF/QKOUXMTQQ= +go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4= +go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= +go.opentelemetry.io/otel/exporters/jaeger v1.10.0 h1:7W3aVVjEYayu/GOqOVF4mbTvnCuxF1wWu3eRxFGQXvw= +go.opentelemetry.io/otel/exporters/jaeger v1.10.0/go.mod h1:n9IGyx0fgyXXZ/i0foLHNxtET9CzXHzZeKCucvRBFgA= go.opentelemetry.io/otel/exporters/metric/prometheus v0.20.0 h1:mJ577SMWSG1jLplCakscznQK7hK03YayX1fQkDPKoVw= go.opentelemetry.io/otel/exporters/metric/prometheus v0.20.0/go.mod h1:XG78/f5fT5o2W4Fto/hrYzn3mbuzGQIFnb0P2AKe+s0= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 h1:TaB+1rQhddO1sF71MpZOZAuSPW1klK2M8XxfrBMfK7Y= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 h1:pDDYmo0QadUPal5fwXoY1pmMpFcdyhXOmL5drCrI3vU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 h1:KtiUEhQmj/Pa874bVYKGNVdq8NPKiacPbaRRtgXi+t4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0 h1:S8DedULB3gp93Rh+9Z+7NTEv+6Id/KYS7LDyipZ9iCE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0/go.mod h1:5WV40MLWwvWlGP7Xm8g3pMcg0pKOUY609qxJn8y7LmM= +go.opentelemetry.io/otel/exporters/prometheus v0.32.1 h1:1+iSNGGCYoDAMuFDN2M+sYTwa5/wApb7yO/GpW5Vtzg= +go.opentelemetry.io/otel/exporters/prometheus v0.32.1/go.mod h1:t1ZclNSxaC2ztzbHxGU71mg3pkkaHyHcMUIK2Yvft0E= go.opentelemetry.io/otel/exporters/trace/jaeger v0.20.0 h1:FoclOadJNul1vUiKnZU0sKFWOZtZQq3jUzSbrX2jwNM= go.opentelemetry.io/otel/exporters/trace/jaeger v0.20.0/go.mod h1:10qwvAmKpvwRO5lL3KQ8EWznPp89uGfhcbK152LFWsQ= go.opentelemetry.io/otel/metric v0.20.0 h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.28.0/go.mod h1:TrzsfQAmQaB1PDcdhBauLMk7nyyg9hm+GoQq/ekE9Iw= +go.opentelemetry.io/otel/metric v0.32.1 h1:ftff5LSBCIDwL0UkhBuDg8j9NNxx2IusvJ18q9h6RC4= +go.opentelemetry.io/otel/metric v0.32.1/go.mod h1:iLPP7FaKMAD5BIxJ2VX7f2KTuz//0QK2hEUyti5psqQ= go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0 h1:JsxtGXd06J8jrnya7fdI/U/MR6yXA5DtbZy+qoHQlr8= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.6.0/go.mod h1:PjLRUfDsoPy0zl7yrDGSUqjj43tL7rEtFdCEiGlxXRM= +go.opentelemetry.io/otel/sdk v1.10.0 h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY= +go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE= go.opentelemetry.io/otel/sdk/export/metric v0.20.0 h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/export/metric v0.28.0 h1:Ob5e5X1BsFPs8kfEuonHjGUu0Gt8rO/rH4KqyvIS2ns= +go.opentelemetry.io/otel/sdk/export/metric v0.28.0/go.mod h1:2HTuv+l3ia7NquArnWavCoKhXi9yBJPpKqMHr1trKa0= go.opentelemetry.io/otel/sdk/metric v0.20.0 h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/sdk/metric v0.28.0 h1:+1ndwHSiknwZtC8VmXM3xtMsd6kbFxtqti4qevn2J+o= +go.opentelemetry.io/otel/sdk/metric v0.28.0/go.mod h1:DqJmT0ovBgoW6TJ8CAQyTnwxZPIp3KWtCiDDZ1uHAzU= +go.opentelemetry.io/otel/sdk/metric v0.32.1 h1:S6AqzulzGQl+sTpYeAoVLw1SJbc2LYuKCMUmfEKG+zM= +go.opentelemetry.io/otel/sdk/metric v0.32.1/go.mod h1:Nn+Nt/7cKzm5ISmvLzNO5RLf0Xuv8/Qo8fkpr0JDOzs= go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.6.0/go.mod h1:qs7BrU5cZ8dXQHBGxHMOxwME/27YH2qEp4/+tZLLwJE= +go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E= +go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM= go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -704,6 +755,7 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= @@ -783,6 +835,8 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956 h1:XeJjHH1KiLpKGb6lvMiksZ9l0fVUh+AmGcm0nOMEBOY= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -937,6 +991,7 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= @@ -965,6 +1020,7 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/pkg/metrics/bootstrap.go b/pkg/metrics/bootstrap.go index 1797a0d05..6c1a7562f 100644 --- a/pkg/metrics/bootstrap.go +++ b/pkg/metrics/bootstrap.go @@ -3,17 +3,10 @@ package metrics import ( "context" - prometheusclient "github.com/prometheus/client_golang/prometheus" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/exporters/metric/prometheus" + "go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/metric/global" - export "go.opentelemetry.io/otel/sdk/export/metric" - "go.opentelemetry.io/otel/sdk/metric/aggregator/histogram" - controller "go.opentelemetry.io/otel/sdk/metric/controller/basic" - processor "go.opentelemetry.io/otel/sdk/metric/processor/basic" - selector "go.opentelemetry.io/otel/sdk/metric/selector/simple" - "go.opentelemetry.io/otel/sdk/resource" + "go.opentelemetry.io/otel/sdk/metric" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/metrics" @@ -30,28 +23,17 @@ func Bootstrap(ctx context.Context, namespace string, client client.Client) erro defer span.End() tracing.SetInstanceID(ctx, namespace) - config := prometheus.Config{ - Registry: metrics.Registry.(*prometheusclient.Registry), - } - c := controller.New( - processor.New( - selector.NewWithHistogramDistribution( - histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries), - ), - export.CumulativeExportKindSelector(), - processor.WithMemory(true), - ), - controller.WithResource(resource.NewWithAttributes([]attribute.KeyValue{}...)), - ) - exporter, err := prometheus.NewExporter(config, c) - if err != nil { + exporter := prometheus.New() + if err := metrics.Registry.Register(exporter.Collector); err != nil { return tracing.HandleError(err, span) } - global.SetMeterProvider(exporter.MeterProvider()) + provider := metric.NewMeterProvider(metric.WithReader(exporter)) + + global.SetMeterProvider(provider) // Create metrics instancesObservedValue := newInstancesMetric(client) - err = instancesObservedValue.Setup(ctx) + err := instancesObservedValue.Setup(ctx) return tracing.HandleError(err, span) } diff --git a/pkg/metrics/instances.go b/pkg/metrics/instances.go index 42bfe379e..a5ed6cf72 100644 --- a/pkg/metrics/instances.go +++ b/pkg/metrics/instances.go @@ -9,6 +9,8 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/global" + "go.opentelemetry.io/otel/metric/instrument" + "go.opentelemetry.io/otel/metric/instrument/asyncint64" "sigs.k8s.io/controller-runtime/pkg/client" v1 "github.com/jaegertracing/jaeger-operator/apis/v1" @@ -26,11 +28,11 @@ const ( // This structure contains the labels associated with the instances and a counter of the number of instances type instancesView struct { - Name string - Label string - Count map[string]int - Observer *metric.Int64ValueObserver - KeyFn func(jaeger v1.Jaeger) string + Name string + Label string + Count map[string]int + Gauge asyncint64.Gauge + KeyFn func(jaeger v1.Jaeger) string } func (i *instancesView) reset() { @@ -46,11 +48,12 @@ func (i *instancesView) Record(jaeger v1.Jaeger) { } } -func (i *instancesView) Report(result metric.BatchObserverResult) { +func (i *instancesView) Report(ctx context.Context) { for key, count := range i.Count { - result.Observe([]attribute.KeyValue{ + attrs := []attribute.KeyValue{ attribute.String(i.Label, key), - }, i.Observer.Observation(int64(count))) + } + i.Gauge.Observe(ctx, int64(count), attrs...) } } @@ -69,28 +72,30 @@ func newInstancesMetric(client client.Client) *instancesMetric { } } -func newObservation(batch metric.BatchObserver, name, desc, label string, keyFn func(jaeger v1.Jaeger) string) (instancesView, error) { +func newObservation(meter metric.Meter, name, desc, label string, keyFn func(jaeger v1.Jaeger) string) (instancesView, error) { observation := instancesView{ Name: name, Count: make(map[string]int), KeyFn: keyFn, Label: label, } - obs, err := batch.NewInt64ValueObserver(instanceMetricName(name), metric.WithDescription(desc)) + + g, err := meter.AsyncInt64().Gauge(instanceMetricName(name), instrument.WithDescription(desc)) if err != nil { return instancesView{}, err } - observation.Observer = &obs + + observation.Gauge = g return observation, nil } func (i *instancesMetric) Setup(ctx context.Context) error { tracer := otel.GetTracerProvider().Tracer(v1.BootstrapTracer) - ctx, span := tracer.Start(ctx, "setup-jaeger-instances-metrics") // nolint:ineffassign,staticcheck + _, span := tracer.Start(ctx, "setup-jaeger-instances-metrics") // nolint:ineffassign,staticcheck defer span.End() meter := global.Meter(meterName) - batch := meter.NewBatchObserver(i.callback) - obs, err := newObservation(batch, + + obs, err := newObservation(meter, agentStrategiesMetric, "Number of instances per agent strategy", "type", @@ -101,7 +106,9 @@ func (i *instancesMetric) Setup(ctx context.Context) error { return err } i.observations = append(i.observations, obs) - obs, err = newObservation(batch, storageMetric, + + obs, err = newObservation(meter, + storageMetric, "Number of instances per storage type", "type", func(jaeger v1.Jaeger) string { @@ -112,7 +119,8 @@ func (i *instancesMetric) Setup(ctx context.Context) error { } i.observations = append(i.observations, obs) - obs, err = newObservation(batch, strategiesMetric, + obs, err = newObservation(meter, + strategiesMetric, "Number of instances per strategy type", "type", func(jaeger v1.Jaeger) string { @@ -123,7 +131,8 @@ func (i *instancesMetric) Setup(ctx context.Context) error { } i.observations = append(i.observations, obs) - obs, err = newObservation(batch, autoprovisioningMetric, + obs, err = newObservation(meter, + autoprovisioningMetric, "Number of instances using autoprovisioning", "type", func(jaeger v1.Jaeger) string { @@ -137,7 +146,8 @@ func (i *instancesMetric) Setup(ctx context.Context) error { } i.observations = append(i.observations, obs) - obs, err = newObservation(batch, managedMetric, + obs, err = newObservation(meter, + managedMetric, "Instances managed by other tool", "tool", func(jaeger v1.Jaeger) string { @@ -152,7 +162,12 @@ func (i *instancesMetric) Setup(ctx context.Context) error { } i.observations = append(i.observations, obs) - return nil + instruments := make([]instrument.Asynchronous, 0, len(i.observations)) + for _, o := range i.observations { + instruments = append(instruments, o.Gauge) + } + + return meter.RegisterCallback(instruments, i.callback) } func isInstanceNormalized(jaeger v1.Jaeger) bool { @@ -171,13 +186,13 @@ func (i *instancesMetric) reset() { } } -func (i *instancesMetric) report(result metric.BatchObserverResult) { +func (i *instancesMetric) report(ctx context.Context) { for _, o := range i.observations { - o.Report(result) + o.Report(ctx) } } -func (i *instancesMetric) callback(ctx context.Context, result metric.BatchObserverResult) { +func (i *instancesMetric) callback(ctx context.Context) { instances := &v1.JaegerList{} if err := i.client.List(ctx, instances); err == nil { i.reset() @@ -193,6 +208,6 @@ func (i *instancesMetric) callback(ctx context.Context, result metric.BatchObser } } } - i.report(result) + i.report(ctx) } } diff --git a/pkg/metrics/instances_test.go b/pkg/metrics/instances_test.go index 9f6001fc3..4e080d375 100644 --- a/pkg/metrics/instances_test.go +++ b/pkg/metrics/instances_test.go @@ -2,15 +2,14 @@ package metrics import ( "context" - "reflect" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric/global" - "go.opentelemetry.io/otel/metric/number" - "go.opentelemetry.io/otel/oteltest" + "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/metricdata" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -31,22 +30,40 @@ type expectedMetric struct { value int64 } -func assertLabelAndValues(t *testing.T, name string, batches []oteltest.Batch, expectedLabels []attribute.KeyValue, expectedValue int64) { - var measurement oteltest.Measurement +func assertLabelAndValues(t *testing.T, name string, metrics metricdata.ResourceMetrics, expectedAttrs []attribute.KeyValue, expectedValue int64) { + var matchingMetric metricdata.Metrics found := false - for _, b := range batches { - for _, m := range b.Measurements { - if m.Instrument.Descriptor().Name() == name && reflect.DeepEqual(expectedLabels, b.Labels) { - measurement = m + for _, sm := range metrics.ScopeMetrics { + for _, m := range sm.Metrics { + if m.Name == name { + matchingMetric = m found = true break } } } - assert.True(t, found, "Metric %s with labels %v not found", name, expectedLabels) - v := oteltest.ResolveNumberByKind(t, number.Int64Kind, float64(expectedValue)) - assert.Equal(t, 0, measurement.Number.CompareNumber(number.Int64Kind, v), - "Metric %s doesn't have expected value %d", name, expectedValue) + + assert.True(t, found, "Metric %s not found", name) + + gauge, ok := matchingMetric.Data.(metricdata.Gauge[int64]) + assert.True(t, ok, + "Metric %s doesn't have expected type %T, got %T", metricdata.Gauge[int64]{}, matchingMetric.Data, + ) + + expectedAttrSet := attribute.NewSet(expectedAttrs...) + var matchingDP metricdata.DataPoint[int64] + found = false + for _, dp := range gauge.DataPoints { + if expectedAttrSet.Equals(&dp.Attributes) { + matchingDP = dp + found = true + break + } + } + + assert.True(t, found, "Metric %s doesn't have expected attributes %v", expectedAttrs) + assert.Equal(t, expectedValue, matchingDP.Value, + "Metric %s doesn't have expected value %d, got %d", name, expectedValue, matchingDP.Value) } func newJaegerInstance(nsn types.NamespacedName, strategy v1.DeploymentStrategy, @@ -124,16 +141,19 @@ func TestValueObservedMetrics(t *testing.T) { cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).Build() - meter, provider := oteltest.NewMeterProvider() + reader := metric.NewManualReader() + provider := metric.NewMeterProvider(metric.WithReader(reader)) global.SetMeterProvider(provider) instancesObservedValue := newInstancesMetric(cl) err := instancesObservedValue.Setup(context.Background()) require.NoError(t, err) - meter.RunAsyncInstruments() + + metrics, err := reader.Collect(context.Background()) + require.NoError(t, err) for _, e := range expected { - assertLabelAndValues(t, e.name, meter.MeasurementBatches, e.labels, e.value) + assertLabelAndValues(t, e.name, metrics, e.labels, e.value) } // Test deleting allinone @@ -141,8 +161,9 @@ func TestValueObservedMetrics(t *testing.T) { require.NoError(t, err) // Reset measurement batches - meter.MeasurementBatches = []oteltest.Batch{} - meter.RunAsyncInstruments() + reader.ForceFlush(context.Background()) + metrics, err = reader.Collect(context.Background()) + require.NoError(t, err) // Set new numbers expected = []expectedMetric{ @@ -155,7 +176,7 @@ func TestValueObservedMetrics(t *testing.T) { newExpectedMetric(agentStrategiesMetric, attribute.String("type", "daemonset"), 1), } for _, e := range expected { - assertLabelAndValues(t, e.name, meter.MeasurementBatches, e.labels, e.value) + assertLabelAndValues(t, e.name, metrics, e.labels, e.value) } } @@ -204,34 +225,42 @@ func TestAutoProvisioningESObservedMetric(t *testing.T) { } cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).Build() - meter, provider := oteltest.NewMeterProvider() + + reader := metric.NewManualReader() + provider := metric.NewMeterProvider(metric.WithReader(reader)) global.SetMeterProvider(provider) instancesObservedValue := newInstancesMetric(cl) err := instancesObservedValue.Setup(context.Background()) require.NoError(t, err) - meter.RunAsyncInstruments() + + metrics, err := reader.Collect(context.Background()) + require.NoError(t, err) expectedMetric := newExpectedMetric(autoprovisioningMetric, attribute.String("type", "elasticsearch"), 1) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) // Test deleting autoprovisioning err = cl.Delete(context.Background(), &autoprovisioningInstance) require.NoError(t, err) // Reset measurement batches - meter.MeasurementBatches = []oteltest.Batch{} - meter.RunAsyncInstruments() + reader.ForceFlush(context.Background()) + metrics, err = reader.Collect(context.Background()) + require.NoError(t, err) expectedMetric = newExpectedMetric(autoprovisioningMetric, attribute.String("type", "elasticsearch"), 0) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) // Create no autoprovisioned instance _ = cl.Delete(context.Background(), &noAutoProvisioningInstance) - meter.MeasurementBatches = []oteltest.Batch{} - meter.RunAsyncInstruments() + + reader.ForceFlush(context.Background()) + metrics, err = reader.Collect(context.Background()) + require.NoError(t, err) + expectedMetric = newExpectedMetric(autoprovisioningMetric, attribute.String("type", "elasticsearch"), 0) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) } func TestManagerByMetric(t *testing.T) { @@ -273,28 +302,33 @@ func TestManagerByMetric(t *testing.T) { } cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).Build() - meter, provider := oteltest.NewMeterProvider() + + reader := metric.NewManualReader() + provider := metric.NewMeterProvider(metric.WithReader(reader)) global.SetMeterProvider(provider) instancesObservedValue := newInstancesMetric(cl) err := instancesObservedValue.Setup(context.Background()) require.NoError(t, err) - meter.RunAsyncInstruments() + + metrics, err := reader.Collect(context.Background()) + require.NoError(t, err) expectedMetric := newExpectedMetric(managedMetric, attribute.String("tool", "maistra-istio-operator"), 1) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) expectedMetric = newExpectedMetric(managedMetric, attribute.String("tool", "none"), 1) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) // Test deleting managed err = cl.Delete(context.Background(), &managed) require.NoError(t, err) // Reset measurement batches - meter.MeasurementBatches = []oteltest.Batch{} - meter.RunAsyncInstruments() + reader.ForceFlush(context.Background()) + metrics, err = reader.Collect(context.Background()) + require.NoError(t, err) expectedMetric = newExpectedMetric(managedMetric, attribute.String("tool", "maistra-istio-operator"), 0) - assertLabelAndValues(t, expectedMetric.name, meter.MeasurementBatches, expectedMetric.labels, expectedMetric.value) + assertLabelAndValues(t, expectedMetric.name, metrics, expectedMetric.labels, expectedMetric.value) } diff --git a/pkg/tracing/bootstrap.go b/pkg/tracing/bootstrap.go index 7466988cc..92cfcc0ef 100644 --- a/pkg/tracing/bootstrap.go +++ b/pkg/tracing/bootstrap.go @@ -7,10 +7,10 @@ import ( "github.com/spf13/viper" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/exporters/trace/jaeger" + "go.opentelemetry.io/otel/exporters/jaeger" "go.opentelemetry.io/otel/sdk/resource" tracesdk "go.opentelemetry.io/otel/sdk/trace" - "go.opentelemetry.io/otel/semconv" + semconv "go.opentelemetry.io/otel/semconv/v1.12.0" "sigs.k8s.io/controller-runtime/pkg/log" v1 "github.com/jaegertracing/jaeger-operator/apis/v1" @@ -55,7 +55,7 @@ func buildSpanProcessor() error { ) } - jexporter, err := jaeger.NewRawExporter(endpoint) + jexporter, err := jaeger.New(endpoint) if err != nil { return err } @@ -65,21 +65,21 @@ func buildSpanProcessor() error { func buildJaegerExporter(ctx context.Context, namespace string, instanceID string) { tracer := otel.GetTracerProvider().Tracer(v1.BootstrapTracer) - ctx, span := tracer.Start(ctx, "buildJaegerExporter") // nolint:ineffassign,staticcheck + _, span := tracer.Start(ctx, "buildJaegerExporter") // nolint:ineffassign,staticcheck defer span.End() + attr := []attribute.KeyValue{ semconv.ServiceNameKey.String("jaeger-operator"), semconv.ServiceVersionKey.String(version.Get().Operator), semconv.ServiceNamespaceKey.String(namespace), } - if instanceID != "" { attr = append(attr, semconv.ServiceInstanceIDKey.String(instanceID)) } if processor != nil { traceProvider := tracesdk.NewTracerProvider( tracesdk.WithSpanProcessor(processor), - tracesdk.WithResource(resource.NewWithAttributes(attr...)), + tracesdk.WithResource(resource.NewWithAttributes(semconv.SchemaURL, attr...)), ) otel.SetTracerProvider(traceProvider) } diff --git a/tests/assert-jobs/reporter-otlp/main.go b/tests/assert-jobs/reporter-otlp/main.go index c9cad12d2..f95e139ac 100644 --- a/tests/assert-jobs/reporter-otlp/main.go +++ b/tests/assert-jobs/reporter-otlp/main.go @@ -16,16 +16,13 @@ import ( "github.com/spf13/viper" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/exporters/otlp" - "go.opentelemetry.io/otel/exporters/otlp/otlpgrpc" - "go.opentelemetry.io/otel/exporters/otlp/otlphttp" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" "go.opentelemetry.io/otel/propagation" - controller "go.opentelemetry.io/otel/sdk/metric/controller/basic" - processor "go.opentelemetry.io/otel/sdk/metric/processor/basic" - "go.opentelemetry.io/otel/sdk/metric/selector/simple" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - "go.opentelemetry.io/otel/semconv" + semconv "go.opentelemetry.io/otel/semconv/v1.12.0" ) const ( @@ -64,102 +61,44 @@ func initCmd() error { return err } -// Get the endpoint where the collector is listening -func getCollector() string { - reportingProtocol := viper.GetString(flagReportingProtocol) - jaegerEndpoint := viper.GetString(otlpExporterEndpoint) - - var endpoint string - switch reportingProtocol { - case "grpc": - endpoint = fmt.Sprintf("%s:4317", jaegerEndpoint) - case "http": - endpoint = fmt.Sprintf("%s:4318", jaegerEndpoint) - default: - logrus.Fatalln("Reporting protocol", reportingProtocol, "not recognized") - } - return endpoint -} - // Initializes an OTLP exporter and configure the traces provider func initProvider(serviceName string) func() { logrus.Debugln("Initializing the OTLP exporter") ctx := context.Background() - collector := getCollector() - reportingProtocol := viper.GetString(flagReportingProtocol) logrus.Debugln("Using", reportingProtocol, "to report the traces") - var driver otlp.ProtocolDriver - + var exp *otlptrace.Exporter + var err error switch reportingProtocol { case "grpc": - driver = otlpgrpc.NewDriver( - otlpgrpc.WithInsecure(), - otlpgrpc.WithEndpoint(collector), - otlpgrpc.WithDialOption(grpc.WithBlock()), - ) + exp, err = otlptracegrpc.New(ctx, otlptracegrpc.WithDialOption(grpc.WithBlock())) case "http": - driver = otlphttp.NewDriver( - otlphttp.WithInsecure(), - otlphttp.WithEndpoint(collector), - ) + exp, err = otlptracehttp.New(ctx) default: logrus.Fatalln("Reporting protocol", reportingProtocol, "not recognized") } - exp, err := otlp.NewExporter(ctx, driver) if err != nil { - logrus.Fatalln("error creating the exporter", err) + logrus.Fatalln("error creating", reportingProtocol, "exporter", err) } - res, err := resource.New(ctx, - resource.WithAttributes( - semconv.ServiceNameKey.String(serviceName), - ), - ) - if err != nil { - logrus.Fatalln("error creating the resource", err) - } - - bsp := sdktrace.NewBatchSpanProcessor(exp) tracerProvider := sdktrace.NewTracerProvider( sdktrace.WithSampler(sdktrace.AlwaysSample()), - sdktrace.WithResource(res), - sdktrace.WithSpanProcessor(bsp), - ) - - cont := controller.New( - processor.New( - simple.NewWithExactDistribution(), - exp, - ), - controller.WithExporter(exp), - controller.WithCollectPeriod(2*time.Second), + sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL, semconv.ServiceNameKey.String(serviceName))), + sdktrace.WithSpanProcessor(sdktrace.NewBatchSpanProcessor(exp)), ) otel.SetTextMapPropagator(propagation.TraceContext{}) otel.SetTracerProvider(tracerProvider) - err = cont.Start(context.Background()) - if err != nil { - logrus.Fatalln("error while starting the controller", err) - } - // This function should be called when the tracing features will not be // used anymore return func() { - err1 := cont.Stop(context.Background()) - err2 := tracerProvider.Shutdown(ctx) - - // The errors are checked later to try to run all the "closing" tasks - if err1 != nil { - logrus.Fatalln("failed while stopping the controller", err1) - } - if err2 != nil { - logrus.Fatalln("failed to shutting down the tracer provider", err2) + if err := tracerProvider.Shutdown(ctx); err != nil { + logrus.Fatalln("failed to shutting down the tracer provider", err) } } } @@ -180,10 +119,9 @@ func generateSubSpans(ctx context.Context, depth int) { } // Generate some traces -// jaegerEnpoint: where Jaeger endpoint is located // serviceName: service to use for the span // operationName: operation described in the span -func generateTraces(jaegerEndpoint string, serviceName string, operationName string) { +func generateTraces(serviceName string, operationName string) { logrus.Debugln("Trying to generate traces") shutdown := initProvider(serviceName) defer shutdown() @@ -221,8 +159,8 @@ func main() { // To avoid creating all the files for gRPC, we just wait some time time.Sleep(time.Second * 5) case "http": - err = utils.WaitUntilRestAPIAvailable(fmt.Sprintf("http://%s", getCollector())) - if err != nil { + jaegerEndpoint := viper.GetString(otlpExporterEndpoint) + if err := utils.WaitUntilRestAPIAvailable(jaegerEndpoint); err != nil { logrus.Fatalln(err) } default: @@ -230,7 +168,6 @@ func main() { } generateTraces( - viper.GetString(otlpExporterEndpoint), viper.GetString(flagJaegerServiceName), viper.GetString(flagJaegerOperationName), ) diff --git a/tests/e2e/render-utils.sh b/tests/e2e/render-utils.sh index 0d2c3e216..417012cda 100644 --- a/tests/e2e/render-utils.sh +++ b/tests/e2e/render-utils.sh @@ -90,8 +90,14 @@ function render_otlp_smoke_test() { template="$TEMPLATES_DIR/otlp-smoke-test.yaml.template" fi + if [ "$reporting_protocol" = "grpc" ]; then + reporting_port=":4317" + else + reporting_port=":4318" + fi + export JAEGER_QUERY_ENDPOINT="$protocol$jaeger-query$query_port" - export OTEL_EXPORTER_OTLP_ENDPOINT="$jaeger-collector-headless" + export OTEL_EXPORTER_OTLP_ENDPOINT="$protocol$jaeger-collector-headless$reporting_port" export JAEGER_NAME=$jaeger REPORTING_PROTOCOL=$reporting_protocol $GOMPLATE -f $template -o ./$test_step-smoke-test.yaml