Skip to content

Commit

Permalink
feat(opentelemetry): upgrade to latest API versions
Browse files Browse the repository at this point in the history
  • Loading branch information
karstenkoehler committed Oct 9, 2023
1 parent 574271d commit 1ca1f56
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 95 deletions.
11 changes: 5 additions & 6 deletions core/cache/httpFrontend.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ import (
"net/http"
"time"

"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/attribute"

"flamingo.me/flamingo/v3/framework/flamingo"
"flamingo.me/flamingo/v3/framework/opentelemetry"
"github.com/golang/groupcache/singleflight"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
)

Expand Down Expand Up @@ -113,14 +112,14 @@ func (hf *HTTPFrontend) Get(ctx context.Context, key string, loader HTTPLoader)
}

func (hf *HTTPFrontend) load(ctx context.Context, key string, loader HTTPLoader, keepExistingEntry bool) (cachedResponse, error) {
oldSpan := trace.FromContext(ctx)
newContext := trace.NewContext(context.Background(), oldSpan)
oldSpan := trace.SpanFromContext(ctx)
newContext := trace.ContextWithSpan(context.Background(), oldSpan)

newContextWithSpan, span := opentelemetry.GetTracer().Start(newContext, "flamingo/cache/httpFrontend/load")
span.AddEvent(key)
defer span.End()

data, err, _ := hf.Do(key, func() (res interface{}, resultErr error) {
data, err := hf.Do(key, func() (res interface{}, resultErr error) {
ctx, fetchRoutineSpan := opentelemetry.GetTracer().Start(newContextWithSpan, "flamingo/cache/httpFrontend/fetchRoutine")
fetchRoutineSpan.AddEvent(key)
defer fetchRoutineSpan.End()
Expand Down
19 changes: 8 additions & 11 deletions core/oauth/interfaces/callback_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ import (
"fmt"
"net/url"

"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/metric/instrument"
"go.opentelemetry.io/otel/metric/instrument/syncint64"
"go.opentelemetry.io/otel/metric/unit"

"flamingo.me/flamingo/v3/core/oauth/application"
"flamingo.me/flamingo/v3/core/oauth/domain"
"flamingo.me/flamingo/v3/framework/flamingo"
"flamingo.me/flamingo/v3/framework/opentelemetry"
"flamingo.me/flamingo/v3/framework/web"
"go.opentelemetry.io/otel/metric"
)

type (
Expand All @@ -35,20 +32,20 @@ type (

var (
// loginFailedCount counts the failed login attempts
loginFailedCount syncint64.Counter
loginFailedCount metric.Int64Counter
// loginSucceededCount counts the successful login attempts
loginSucceededCount syncint64.Counter
loginSucceededCount metric.Int64Counter
)

func init() {
var err error
loginFailedCount, err = opentelemetry.GetMeter().SyncInt64().Counter("flamingo/oauth/login_failed",
instrument.WithDescription("Count of failed login attempts"), instrument.WithUnit(unit.Dimensionless))
loginFailedCount, err = opentelemetry.GetMeter().Int64Counter("flamingo/oauth/login_failed",
metric.WithDescription("Count of failed login attempts"))
if err != nil {
panic(err)
}
loginSucceededCount, err = opentelemetry.GetMeter().SyncInt64().Counter("flamingo/oauth/login_succeeded",
instrument.WithDescription("Count of succeeded login attempts"), instrument.WithUnit(unit.Dimensionless))
loginSucceededCount, err = opentelemetry.GetMeter().Int64Counter("flamingo/oauth/login_succeeded",
metric.WithDescription("Count of succeeded login attempts"))
if err != nil {
panic(err)
}
Expand Down
16 changes: 6 additions & 10 deletions core/zap/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,10 @@ import (

"go.opentelemetry.io/otel/attribute"

"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/metric/instrument"
"go.opentelemetry.io/otel/metric/instrument/syncint64"
"go.opentelemetry.io/otel/metric/unit"

"flamingo.me/flamingo/v3/framework/flamingo"
"flamingo.me/flamingo/v3/framework/opentelemetry"
"flamingo.me/flamingo/v3/framework/web"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
Expand All @@ -21,14 +18,14 @@ import (
type Option func(*Logger)

var (
logCount syncint64.Counter
logCount metric.Int64Counter
keyLevel attribute.Key = "level"
)

func init() {
var err error
logCount, err = opentelemetry.GetMeter().SyncInt64().Counter("flamingo/zap/logs",
instrument.WithDescription("Count of logs"), instrument.WithUnit(unit.Dimensionless))
logCount, err = opentelemetry.GetMeter().Int64Counter("flamingo/zap/logs",
metric.WithDescription("Count of logs"))
if err != nil {
panic(err)
}
Expand Down Expand Up @@ -95,8 +92,7 @@ func (l *Logger) record(level string) {
return
}

logCount.Add(context.Background(), 1, attribute.String(opentelemetry.KeyArea.Key(), l.configArea),
keyLevel.String(level))
logCount.Add(context.Background(), 1, metric.WithAttributes(attribute.String(opentelemetry.KeyArea.Key(), l.configArea), keyLevel.String(level)))
}

// Debug logs a message at debug level
Expand Down
38 changes: 12 additions & 26 deletions framework/opentelemetry/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@ import (
"go.opentelemetry.io/otel/baggage"

runtimemetrics "go.opentelemetry.io/contrib/instrumentation/runtime"
"go.opentelemetry.io/otel/sdk/metric/aggregator/histogram"
"go.opentelemetry.io/otel/sdk/metric/export/aggregation"

"go.opentelemetry.io/otel/metric"
sdkMetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/trace"

"flamingo.me/dingo"
Expand All @@ -24,11 +22,7 @@ import (
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/exporters/prometheus"
"go.opentelemetry.io/otel/exporters/zipkin"
"go.opentelemetry.io/otel/metric/global"
"go.opentelemetry.io/otel/propagation"
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"
tracesdk "go.opentelemetry.io/otel/sdk/trace"
)
Expand Down Expand Up @@ -111,27 +105,19 @@ func (m *Module) Configure(injector *dingo.Injector) {
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))

// metrics
config := prometheus.Config{
DefaultHistogramBoundaries: []float64{1, 2, 5, 10, 20, 50},
}
c := controller.New(
processor.NewFactory(
selector.NewWithHistogramDistribution(
histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries),
),
aggregation.CumulativeTemporalitySelector(),
processor.WithMemory(true),
),
controller.WithResource(resource.NewWithAttributes(
schemaURL,
attribute.String("service.name", m.serviceName),
)),
)
exp, err := prometheus.New(config, c)

// DefaultHistogramBoundaries: []float64{1, 2, 5, 10, 20, 50},
// aggregation.CumulativeTemporalitySelector(),
// processor.WithMemory(true),
// controller.WithResource(resource.NewWithAttributes(schemaURL, attribute.String("service.name", m.serviceName))),

exp, err := prometheus.New()
if err != nil {
log.Fatalf("Failed to initialize Prometheus exporter: %v", err)
}
global.SetMeterProvider(exp.MeterProvider())

meterProvider := sdkMetric.NewMeterProvider(sdkMetric.WithReader(exp))
otel.SetMeterProvider(meterProvider)
if err := runtimemetrics.Start(); err != nil {
log.Fatal(err)
}
Expand Down Expand Up @@ -172,7 +158,7 @@ func GetTracer() trace.Tracer {

func GetMeter() metric.Meter {
createMeterOnce.Do(func() {
mp := global.MeterProvider()
mp := otel.GetMeterProvider()
meter = mp.Meter(name, metric.WithInstrumentationVersion(SemVersion()))
})
return meter
Expand Down
10 changes: 4 additions & 6 deletions framework/prefixrouter/front_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,15 @@ import (

"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/baggage"
"go.opentelemetry.io/otel/metric/instrument"
"go.opentelemetry.io/otel/metric/instrument/syncint64"
"go.opentelemetry.io/otel/metric/unit"
"go.opentelemetry.io/otel/metric"
)

var rtHistogram syncint64.Histogram
var rtHistogram metric.Int64Histogram

func init() {
var err error
rtHistogram, err = opentelemetry.GetMeter().SyncInt64().Histogram("flamingo/prefixrouter/requesttimes",
instrument.WithDescription("prefixrouter request times"), instrument.WithUnit(unit.Milliseconds))
rtHistogram, err = opentelemetry.GetMeter().Int64Histogram("flamingo/prefixrouter/requesttimes",
metric.WithDescription("prefixrouter request times"), metric.WithUnit("ms"))
if err != nil {
panic(err)
}
Expand Down
21 changes: 9 additions & 12 deletions framework/web/filter/request_metrics_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import (
"go.opentelemetry.io/otel/attribute"

"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/metric/instrument"
"go.opentelemetry.io/otel/metric/instrument/syncint64"
"go.opentelemetry.io/otel/metric/unit"
"go.opentelemetry.io/otel/metric"

"flamingo.me/flamingo/v3/framework/web"
)
Expand All @@ -32,23 +30,22 @@ type (

var (
// responseBytesCount counts the total number of bytes served by the application
responseBytesCount syncint64.Counter

responseBytesCount metric.Int64Counter
// responseCount count the number of responses served by the application
responsesCount syncint64.Counter
responsesCount metric.Int64Counter
// keyHTTPStatus defines response http status code
keyHTTPStatus attribute.Key = "status_code"
)

func init() {
var err error
responseBytesCount, err = opentelemetry.GetMeter().SyncInt64().Counter("flamingo/response/bytes_count",
instrument.WithDescription("Count of responses number of bytes"), instrument.WithUnit(unit.Bytes))
responseBytesCount, err = opentelemetry.GetMeter().Int64Counter("flamingo/response/bytes_count",
metric.WithDescription("Count of responses number of bytes"), metric.WithUnit("By"))
if err != nil {
panic(err)
}
responsesCount, err = opentelemetry.GetMeter().SyncInt64().Counter("flamingo/response/count",
instrument.WithDescription("Count of number of responses"), instrument.WithUnit(unit.Dimensionless))
responsesCount, err = opentelemetry.GetMeter().Int64Counter("flamingo/response/count",
metric.WithDescription("Count of number of responses"))
if err != nil {
panic(err)
}
Expand Down Expand Up @@ -84,8 +81,8 @@ func (r responseMetrics) Apply(ctx context.Context, rw http.ResponseWriter) erro
}

statusAttribute := keyHTTPStatus.String(strconv.Itoa(responseWriter.status/100) + "xx")
responseBytesCount.Add(ctx, responseWriter.bytes, statusAttribute)
responsesCount.Add(ctx, 1, statusAttribute)
responseBytesCount.Add(ctx, responseWriter.bytes, metric.WithAttributes(statusAttribute))
responsesCount.Add(ctx, 1, metric.WithAttributes(statusAttribute))

return err
}
Expand Down
10 changes: 4 additions & 6 deletions framework/web/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ import (
"flamingo.me/flamingo/v3/framework/opentelemetry"
"go.opentelemetry.io/otel/baggage"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/metric/instrument"
"go.opentelemetry.io/otel/metric/instrument/syncint64"
"go.opentelemetry.io/otel/metric/unit"
"go.opentelemetry.io/otel/metric"

"flamingo.me/flamingo/v3/framework/flamingo"
"github.com/gorilla/securecookie"
Expand Down Expand Up @@ -47,13 +45,13 @@ var (

// RouterError defines error value for issues appearing during routing process
RouterError contextKeyType = "error"
rtHistogram syncint64.Histogram
rtHistogram metric.Int64Histogram
)

func init() {
var err error
rtHistogram, err = opentelemetry.GetMeter().SyncInt64().Histogram("flamingo/router/controller",
instrument.WithDescription("controller request times"), instrument.WithUnit(unit.Milliseconds))
rtHistogram, err = opentelemetry.GetMeter().Int64Histogram("flamingo/router/controller",
metric.WithDescription("controller request times"), metric.WithUnit("ms"))
if err != nil {
panic(err)
}
Expand Down
28 changes: 21 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require (
github.com/ghodss/yaml v1.0.0
github.com/gofrs/uuid v4.3.1+incompatible
github.com/golang-jwt/jwt/v4 v4.5.0
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
github.com/google/go-cmp v0.5.9
github.com/gorilla/securecookie v1.1.1
github.com/gorilla/sessions v1.2.1
Expand All @@ -27,6 +28,17 @@ require (
github.com/stretchr/testify v1.8.4
github.com/zemirco/memorystore v0.0.0-20160308183530-ecd57e5134f6
go.opencensus.io v0.24.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0
go.opentelemetry.io/contrib/instrumentation/runtime v0.45.0
go.opentelemetry.io/otel v1.19.0
go.opentelemetry.io/otel/bridge/opencensus v0.42.0
go.opentelemetry.io/otel/exporters/jaeger v1.17.0
go.opentelemetry.io/otel/exporters/prometheus v0.42.0
go.opentelemetry.io/otel/exporters/zipkin 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.opentelemetry.io/otel/trace v1.19.0
go.uber.org/automaxprocs v1.5.3
go.uber.org/zap v1.25.0
golang.org/x/oauth2 v0.11.0
Expand All @@ -40,31 +52,33 @@ require (
github.com/cockroachdb/apd/v2 v2.0.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/go-jose/go-jose/v3 v3.0.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.13.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.44.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/prometheus/statsd_exporter v0.22.7 // indirect
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/uber/jaeger-client-go v2.25.0+incompatible // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
google.golang.org/api v0.84.0 // indirect
Expand Down
Loading

0 comments on commit 1ca1f56

Please sign in to comment.