From 5ad7fce0ac227495709297ed5ff5a8f18fd43984 Mon Sep 17 00:00:00 2001 From: xuu Date: Wed, 26 Jul 2023 16:51:35 -0600 Subject: [PATCH] fix: metrics handling --- gql/common.graphqls | 8 ++--- lg/metric.go | 83 ++++++++++++++++++++++++--------------------- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/gql/common.graphqls b/gql/common.graphqls index 8334319..e5c3fa9 100644 --- a/gql/common.graphqls +++ b/gql/common.graphqls @@ -1,23 +1,23 @@ scalar Time scalar Map -type Connection @goModel(model: "go.sour.is/ev/pkg/gql.Connection") { +type Connection @goModel(model: "go.sour.is/pkg/gql.Connection") { paging: PageInfo! edges: [Edge!]! } -input PageInput @goModel(model: "go.sour.is/ev/pkg/gql.PageInput") { +input PageInput @goModel(model: "go.sour.is/pkg/gql.PageInput") { after: Int = 0 before: Int count: Int = 30 } -type PageInfo @goModel(model: "go.sour.is/ev/pkg/gql.PageInfo") { +type PageInfo @goModel(model: "go.sour.is/pkg/gql.PageInfo") { next: Boolean! prev: Boolean! begin: Int! end: Int! } -interface Edge @goModel(model: "go.sour.is/ev/pkg/gql.Edge"){ +interface Edge @goModel(model: "go.sour.is/pkg/gql.Edge"){ id: ID! } diff --git a/lg/metric.go b/lg/metric.go index f28af8f..3b1833c 100644 --- a/lg/metric.go +++ b/lg/metric.go @@ -4,25 +4,30 @@ import ( "context" "log" "net/http" + "os" + "runtime/debug" "time" "github.com/prometheus/client_golang/prometheus/promhttp" "go.opentelemetry.io/contrib/instrumentation/runtime" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/exporters/prometheus" api "go.opentelemetry.io/otel/metric" sdk "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/aggregation" + "go.opentelemetry.io/otel/sdk/resource" ) var meterKey = contextKey{"meter"} var promHTTPKey = contextKey{"promHTTP"} func Meter(ctx context.Context) api.Meter { - if t := fromContext[contextKey, api.Meter](ctx, tracerKey); t != nil { + if t := fromContext[contextKey, api.Meter](ctx, meterKey); t != nil { return t } - + log.Printf("default meter") return otel.Meter("") } func NewHTTP(ctx context.Context) *httpHandle { @@ -31,50 +36,50 @@ func NewHTTP(ctx context.Context) *httpHandle { } func initMetrics(ctx context.Context, name string) (context.Context, func() error) { - // goversion := "" - // pkg := "" - // host := "" - // if info, ok := debug.ReadBuildInfo(); ok { - // goversion = info.GoVersion - // pkg = info.Path - // } - // if h, err := os.Hostname(); err == nil { - // host = h - // } + goversion := "" + pkg := "" + host := "" + if info, ok := debug.ReadBuildInfo(); ok { + goversion = info.GoVersion + pkg = info.Path + } + if h, err := os.Hostname(); err == nil { + host = h + } - // config := prometheus.Config{ - // DefaultHistogramBoundaries: []float64{ - // 2 << 6, 2 << 8, 2 << 10, 2 << 12, 2 << 14, 2 << 16, 2 << 18, 2 << 20, 2 << 22, 2 << 24, 2 << 26, 2 << 28, - // }, - // } - // cont := controller.New( - // processor.NewFactory( - // selector.NewWithHistogramDistribution( - // histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries), - // ), - // aggregation.CumulativeTemporalitySelector(), - // processor.WithMemory(true), - // ), - // controller.WithResource( - // resource.NewWithAttributes( - // semconv.SchemaURL, - // attribute.String("app", name), - // attribute.String("host", host), - // attribute.String("go_version", goversion), - // attribute.String("pkg", pkg), - // ), - // ), - // ) ex, err := prometheus.New() if err != nil { + log.Println(err) return ctx, nil } - provider := sdk.NewMeterProvider(sdk.WithReader(ex)) - meter := provider.Meter(name) - - ctx = toContext(ctx, promHTTPKey, ex) + + provider := sdk.NewMeterProvider( + sdk.WithResource(resource.Default()), + sdk.WithView(sdk.NewView( + sdk.Instrument{Name: "histogram_*"}, + sdk.Stream{ + Aggregation: aggregation.ExplicitBucketHistogram{ + Boundaries: []float64{ + 2 << 6, 2 << 8, 2 << 10, 2 << 12, 2 << 14, 2 << 16, 2 << 18, 2 << 20, 2 << 22, 2 << 24, 2 << 26, 2 << 28, + }, + }, + }, + )), + sdk.WithReader(ex), + ) + + meter := provider.Meter(name, + api.WithInstrumentationVersion("0.0.1"), + api.WithInstrumentationAttributes( + attribute.String("app", name), + attribute.String("host", host), + attribute.String("go_version", goversion), + attribute.String("pkg", pkg), + ), + ) ctx = toContext(ctx, meterKey, meter) + runtime.Start() return ctx, func() error {