Skip to content

Commit

Permalink
feat: upgrade opentelemetry package (#150)
Browse files Browse the repository at this point in the history
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Leonidas Vrachnis <leo.al.vra@gmail.com>
  • Loading branch information
3 people committed Oct 26, 2023
1 parent be0f632 commit e2b933c
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 119 deletions.
23 changes: 11 additions & 12 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ require (
github.com/stretchr/testify v1.8.4
github.com/throttled/throttled/v2 v2.12.0
github.com/zenizh/go-capturer v0.0.0-20211219060012-52ea6c8fed04
go.opentelemetry.io/otel v1.16.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.39.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0
go.opentelemetry.io/otel/metric v1.16.0
go.opentelemetry.io/otel/sdk v1.16.0
go.opentelemetry.io/otel/sdk/metric v0.39.0
go.opentelemetry.io/otel v1.19.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.42.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0
go.opentelemetry.io/otel/metric v1.19.0
go.opentelemetry.io/otel/sdk v1.19.0
go.opentelemetry.io/otel/sdk/metric v1.19.0
go.uber.org/zap v1.26.0
golang.org/x/exp v0.0.0-20230905200255-921286631fa9
golang.org/x/oauth2 v0.13.0
Expand Down Expand Up @@ -81,7 +81,7 @@ require (
github.com/google/uuid v1.3.1 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/imdario/mergo v0.3.12 // indirect
Expand Down Expand Up @@ -118,11 +118,10 @@ require (
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.39.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
go.opentelemetry.io/otel/trace v1.16.0 // indirect
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
go.opentelemetry.io/otel/trace v1.19.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/mod v0.12.0 // indirect
Expand Down
72 changes: 22 additions & 50 deletions go.sum

Large diffs are not rendered by default.

25 changes: 10 additions & 15 deletions stats/internal/otel/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/instrumentation"
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregation"
)

type (
Expand Down Expand Up @@ -106,20 +105,16 @@ func WithPrometheusExporter(registerer prometheus.Registerer) MeterProviderOptio
// WithDefaultHistogramBucketBoundaries lets you overwrite the default buckets for all histograms.
func WithDefaultHistogramBucketBoundaries(boundaries []float64) MeterProviderOption {
return func(c *meterProviderConfig) {
c.defaultAggregationSelector = func(ik sdkmetric.InstrumentKind) aggregation.Aggregation {
switch ik {
case sdkmetric.InstrumentKindCounter, sdkmetric.InstrumentKindUpDownCounter,
sdkmetric.InstrumentKindObservableCounter, sdkmetric.InstrumentKindObservableUpDownCounter:
return aggregation.Sum{}
case sdkmetric.InstrumentKindObservableGauge:
return aggregation.LastValue{}
case sdkmetric.InstrumentKindHistogram:
return aggregation.ExplicitBucketHistogram{
c.defaultHistogramBuckets = sdkmetric.NewView(
sdkmetric.Instrument{
Kind: sdkmetric.InstrumentKindHistogram,
},
sdkmetric.Stream{
Aggregation: sdkmetric.AggregationExplicitBucketHistogram{
Boundaries: boundaries,
}
}
panic("unknown instrument kind")
}
},
},
)
}
}

Expand All @@ -137,7 +132,7 @@ func WithHistogramBucketBoundaries(instrumentName, meterName string, boundaries
Kind: sdkmetric.InstrumentKindHistogram,
},
sdkmetric.Stream{
Aggregation: aggregation.ExplicitBucketHistogram{
Aggregation: sdkmetric.AggregationExplicitBucketHistogram{
Boundaries: boundaries,
},
},
Expand Down
78 changes: 43 additions & 35 deletions stats/internal/otel/otel.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
"golang.org/x/sync/errgroup"

"github.com/rudderlabs/rudder-go-kit/stats/internal/otel/prometheus"
Expand Down Expand Up @@ -123,26 +123,18 @@ func (m *Manager) buildPrometheusMeterProvider(c config, res *resource.Resource)
prometheus.WithRegisterer(c.meterProviderConfig.prometheusRegisterer),
prometheus.WithLogger(c.logger),
}
if c.meterProviderConfig.defaultAggregationSelector != nil {
exporterOptions = append(exporterOptions,
prometheus.WithAggregationSelector(c.meterProviderConfig.defaultAggregationSelector),
)
}
exp, err := prometheus.New(exporterOptions...)
if err != nil {
return nil, fmt.Errorf("prometheus: failed to create metric exporter: %w", err)
}
return sdkmetric.NewMeterProvider(
sdkmetric.WithResource(res),
sdkmetric.WithReader(exp),
sdkmetric.WithView(c.meterProviderConfig.views...),
), nil

return sdkmetric.NewMeterProvider(m.getMeterProviderOptions(c, res, exp)...), nil
}

func (m *Manager) buildOTLPMeterProvider(
ctx context.Context, c config, res *resource.Resource,
) (*sdkmetric.MeterProvider, error) {
meterProviderOptions := []otlpmetricgrpc.Option{
opts := []otlpmetricgrpc.Option{
otlpmetricgrpc.WithEndpoint(*c.meterProviderConfig.grpcEndpoint),
otlpmetricgrpc.WithRetry(otlpmetricgrpc.RetryConfig{
Enabled: c.retryConfig.Enabled,
Expand All @@ -152,29 +144,40 @@ func (m *Manager) buildOTLPMeterProvider(
}),
}
if c.withInsecure {
meterProviderOptions = append(meterProviderOptions, otlpmetricgrpc.WithInsecure())
opts = append(opts, otlpmetricgrpc.WithInsecure())
}
if len(c.meterProviderConfig.otlpMetricGRPCOptions) > 0 {
meterProviderOptions = append(meterProviderOptions, c.meterProviderConfig.otlpMetricGRPCOptions...)
opts = append(opts, c.meterProviderConfig.otlpMetricGRPCOptions...)
}
if c.meterProviderConfig.defaultAggregationSelector != nil {
meterProviderOptions = append(meterProviderOptions,
otlpmetricgrpc.WithAggregationSelector(c.meterProviderConfig.defaultAggregationSelector),
)
}
exp, err := otlpmetricgrpc.New(ctx, meterProviderOptions...)
exp, err := otlpmetricgrpc.New(ctx, opts...)
if err != nil {
return nil, fmt.Errorf("otlp: failed to create metric exporter: %w", err)
}

return sdkmetric.NewMeterProvider(
reader := sdkmetric.NewPeriodicReader(
exp,
sdkmetric.WithInterval(c.meterProviderConfig.exportsInterval),
)

return sdkmetric.NewMeterProvider(m.getMeterProviderOptions(c, res, reader)...), nil
}

func (m *Manager) getMeterProviderOptions(c config, res *resource.Resource, r sdkmetric.Reader) []sdkmetric.Option {
opts := []sdkmetric.Option{
sdkmetric.WithResource(res),
sdkmetric.WithReader(sdkmetric.NewPeriodicReader(
exp,
sdkmetric.WithInterval(c.meterProviderConfig.exportsInterval),
)),
sdkmetric.WithView(c.meterProviderConfig.views...),
), nil
sdkmetric.WithReader(r),
}
var views []sdkmetric.View
if len(c.meterProviderConfig.views) > 0 {
views = append(views, c.meterProviderConfig.views...)
}
if c.meterProviderConfig.defaultHistogramBuckets != nil {
views = append(views, c.meterProviderConfig.defaultHistogramBuckets)
}
if len(views) > 0 {
opts = append(opts, sdkmetric.WithView(views...))
}
return opts
}

// Shutdown allows you to gracefully clean up after the OTel manager (e.g. close underlying gRPC connection)
Expand Down Expand Up @@ -260,14 +263,19 @@ type tracerProviderConfig struct {
}

type meterProviderConfig struct {
enabled bool
global bool
exportsInterval time.Duration
views []sdkmetric.View
grpcEndpoint *string
prometheusRegisterer promClient.Registerer
defaultAggregationSelector sdkmetric.AggregationSelector
otlpMetricGRPCOptions []otlpmetricgrpc.Option
enabled bool
global bool
exportsInterval time.Duration
views []sdkmetric.View
// defaultHistogramBuckets is not part of the above "views" because the order
// by which we add views matter. We have to add the default view last because the
// views criteria are applied in order and the default one is the more generic.
// Thus, if we put it first it will be applied to all histogram instruments removing
// the ability to customize the buckets of specific histograms.
defaultHistogramBuckets sdkmetric.View
grpcEndpoint *string
prometheusRegisterer promClient.Registerer
otlpMetricGRPCOptions []otlpmetricgrpc.Option
}

type logger interface {
Expand Down
7 changes: 5 additions & 2 deletions stats/internal/otel/otel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ var (
{Name: ptr("service_version"), Value: ptr("v1.2.3")},
{Name: ptr("telemetry_sdk_language"), Value: ptr("go")},
{Name: ptr("telemetry_sdk_name"), Value: ptr("opentelemetry")},
{Name: ptr("telemetry_sdk_version"), Value: ptr("1.16.0")},
{Name: ptr("telemetry_sdk_version"), Value: ptr("1.19.0")},
{Name: ptr("instanceName"), Value: ptr("my-instance-id")},
}
globalGRPCDefaultAttrs = append(globalDefaultAttrs,
Expand Down Expand Up @@ -452,7 +452,10 @@ func TestNonBlockingConnection(t *testing.T) {
)
_, mp, err := om.Setup(ctx, res,
WithInsecure(),
WithMeterProvider(WithGRPCMeterProvider(endpoint), WithMeterProviderExportsInterval(100*time.Millisecond)),
WithMeterProvider(
WithGRPCMeterProvider(endpoint),
WithMeterProviderExportsInterval(100*time.Millisecond),
),
WithRetryConfig(RetryConfig{
Enabled: true,
InitialInterval: time.Second,
Expand Down
2 changes: 1 addition & 1 deletion stats/internal/otel/prometheus/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (

"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
"google.golang.org/protobuf/proto"

"go.opentelemetry.io/otel"
Expand Down
13 changes: 9 additions & 4 deletions stats/otel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/metricdata"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"

"github.com/rudderlabs/rudder-go-kit/config"
"github.com/rudderlabs/rudder-go-kit/httputil"
Expand All @@ -44,7 +44,7 @@ var globalDefaultAttrs = []*promClient.LabelPair{
{Name: ptr("service_version"), Value: ptr("v1.2.3")},
{Name: ptr("telemetry_sdk_language"), Value: ptr("go")},
{Name: ptr("telemetry_sdk_name"), Value: ptr("opentelemetry")},
{Name: ptr("telemetry_sdk_version"), Value: ptr("1.16.0")},
{Name: ptr("telemetry_sdk_version"), Value: ptr("1.19.0")},
}

func TestOTelMeasurementInvalidOperations(t *testing.T) {
Expand Down Expand Up @@ -316,7 +316,10 @@ func TestOTelPeriodicStats(t *testing.T) {
prepareFunc(c, m)

l := logger.NewFactory(c)
s := NewStats(c, l, m, WithServiceName("TestOTelPeriodicStats"), WithServiceVersion("v1.2.3"))
s := NewStats(c, l, m,
WithServiceName("TestOTelPeriodicStats"),
WithServiceVersion("v1.2.3"),
)

// start stats
ctx, cancel := context.WithCancel(context.Background())
Expand Down Expand Up @@ -449,7 +452,9 @@ func TestOTelPeriodicStats(t *testing.T) {
c.Set("RuntimeStats.enableCPUStats", false)
c.Set("RuntimeStats.enabledMemStats", false)
c.Set("RuntimeStats.enableGCStats", false)
m.GetRegistry(metric.PublishedMetrics).MustGetGauge(TestMeasurement{tablePrefix: "table", workspace: "workspace", destType: "destType"}).Set(1.0)
m.GetRegistry(metric.PublishedMetrics).MustGetGauge(
TestMeasurement{tablePrefix: "table", workspace: "workspace", destType: "destType"},
).Set(1.0)
}, []expectation{
{name: "test_measurement_table", tags: []*promClient.LabelPair{
{Name: ptr("destType"), Value: ptr("destType")},
Expand Down

0 comments on commit e2b933c

Please sign in to comment.