Skip to content

Commit

Permalink
Update otel packages to v1.10.0+v0.32.1 (jaegertracing#2084)
Browse files Browse the repository at this point in the history
* Update otel packages to v1.10.0

Signed-off-by: Vicente Olmedo <[email protected]>

* Properly use OTEL_EXPORTER_OTLP_ENDPOINT environment variable

Signed-off-by: Vicente Olmedo <[email protected]>

Signed-off-by: Vicente Olmedo <[email protected]>
  • Loading branch information
volmedo authored Dec 7, 2022
1 parent 32445ea commit ed03536
Show file tree
Hide file tree
Showing 8 changed files with 217 additions and 183 deletions.
30 changes: 17 additions & 13 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -60,14 +59,15 @@ 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
github.com/josharian/intern v1.0.0 // indirect
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
Expand All @@ -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
Expand Down
56 changes: 56 additions & 0 deletions go.sum

Large diffs are not rendered by default.

34 changes: 8 additions & 26 deletions pkg/metrics/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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)
}
61 changes: 38 additions & 23 deletions pkg/metrics/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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() {
Expand All @@ -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...)
}
}

Expand All @@ -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",
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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()
Expand All @@ -193,6 +208,6 @@ func (i *instancesMetric) callback(ctx context.Context, result metric.BatchObser
}
}
}
i.report(result)
i.report(ctx)
}
}
Loading

0 comments on commit ed03536

Please sign in to comment.