Skip to content

Commit

Permalink
Copy Prometheus metrics implementation from jaeger-lib
Browse files Browse the repository at this point in the history
Signed-off-by: Yuri Shkuro <github@ysh.us>
  • Loading branch information
yurishkuro committed Jun 21, 2022
1 parent 3d67ac8 commit c63da1a
Show file tree
Hide file tree
Showing 17 changed files with 1,120 additions and 119 deletions.
6 changes: 3 additions & 3 deletions cmd/agent/app/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ import (
"go.uber.org/zap"

"github.com/jaegertracing/jaeger/internal/metrics/fork"
"github.com/jaegertracing/jaeger/internal/metrics/metricsbuilder"
"github.com/jaegertracing/jaeger/pkg/metrics"
jmetrics "github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/pkg/testutils"
)

Expand Down Expand Up @@ -100,7 +100,7 @@ func withRunningAgent(t *testing.T, testcase func(string, chan error)) {
},
}
logger, logBuf := testutils.NewLogger()
mBldr := &jmetrics.Builder{HTTPRoute: "/metrics", Backend: "prometheus"}
mBldr := &metricsbuilder.Builder{HTTPRoute: "/metrics", Backend: "prometheus"}
metricsFactory, err := mBldr.CreateMetricsFactory("jaeger")
mFactory := fork.New("internal", metrics.NullFactory, metricsFactory)
require.NoError(t, err)
Expand Down Expand Up @@ -155,7 +155,7 @@ func TestStartStopRace(t *testing.T) {
},
}
logger, logBuf := testutils.NewEchoLogger(t)
mBldr := &jmetrics.Builder{HTTPRoute: "/metrics", Backend: "prometheus"}
mBldr := &metricsbuilder.Builder{HTTPRoute: "/metrics", Backend: "prometheus"}
metricsFactory, err := mBldr.CreateMetricsFactory("jaeger")
mFactory := fork.New("internal", metrics.NullFactory, metricsFactory)
require.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions cmd/agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (

"github.com/spf13/cobra"
"github.com/spf13/viper"
jexpvar "github.com/uber/jaeger-lib/metrics/expvar"
_ "go.uber.org/automaxprocs"
"go.uber.org/zap"

Expand All @@ -31,6 +30,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/docs"
"github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/internal/metrics/expvar"
"github.com/jaegertracing/jaeger/internal/metrics/fork"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/metrics"
Expand All @@ -56,7 +56,7 @@ func main() {
Namespace(metrics.NSOptions{Name: "jaeger"}).
Namespace(metrics.NSOptions{Name: "agent"})
mFactory := fork.New("internal",
metrics.NewJLibAdapter(jexpvar.NewFactory(10)), // backend for internal opts
expvar.NewFactory(10), // backend for internal opts
baseFactory)
version.NewInfoMetrics(mFactory)

Expand Down
18 changes: 9 additions & 9 deletions cmd/all-in-one/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ import (
"github.com/spf13/viper"
jaegerClientConfig "github.com/uber/jaeger-client-go/config"
jaegerClientZapLog "github.com/uber/jaeger-client-go/log/zap"
jlibmetrics "github.com/uber/jaeger-lib/metrics"
jexpvar "github.com/uber/jaeger-lib/metrics/expvar"
_ "go.uber.org/automaxprocs"
"go.uber.org/zap"

Expand All @@ -43,7 +41,9 @@ import (
queryApp "github.com/jaegertracing/jaeger/cmd/query/app"
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/internal/metrics/expvar"
"github.com/jaegertracing/jaeger/internal/metrics/fork"
"github.com/jaegertracing/jaeger/internal/metrics/jlibadapter"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/pkg/version"
Expand Down Expand Up @@ -95,14 +95,13 @@ by default uses only in-memory database.`,
if err := svc.Start(v); err != nil {
return err
}
logger := svc.Logger // shortcut
rootMetricsFactory := svc.MetricsFactory // shortcut
logger := svc.Logger // shortcut
metricsFactory := fork.New("internal",
metrics.NewJLibAdapter(jexpvar.NewFactory(10)), // backend for internal opts
rootMetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}))
expvar.NewFactory(10), // backend for internal opts
svc.MetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"}))
version.NewInfoMetrics(metricsFactory)

tracerCloser := initTracer(svc.JLibMetricsFactory, svc.Logger)
tracerCloser := initTracer(svc)

storageFactory.InitFromViper(v, logger)
if err := storageFactory.Initialize(metricsFactory, logger); err != nil {
Expand Down Expand Up @@ -284,7 +283,8 @@ func startQuery(
return server
}

func initTracer(metricsFactory jlibmetrics.Factory, logger *zap.Logger) io.Closer {
func initTracer(svc *flags.Service) io.Closer {
logger := svc.Logger
traceCfg := &jaegerClientConfig.Configuration{
ServiceName: "jaeger-query",
Sampler: &jaegerClientConfig.SamplerConfig{
Expand All @@ -298,7 +298,7 @@ func initTracer(metricsFactory jlibmetrics.Factory, logger *zap.Logger) io.Close
logger.Fatal("Failed to read tracer configuration", zap.Error(err))
}
tracer, closer, err := traceCfg.NewTracer(
jaegerClientConfig.Metrics(metricsFactory),
jaegerClientConfig.Metrics(jlibadapter.NewAdapter(svc.MetricsFactory)),
jaegerClientConfig.Logger(jaegerClientZapLog.NewLogger(logger)),
)
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions cmd/collector/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (

"github.com/spf13/cobra"
"github.com/spf13/viper"
jexpvar "github.com/uber/jaeger-lib/metrics/expvar"
_ "go.uber.org/automaxprocs"
"go.uber.org/zap"

Expand All @@ -33,6 +32,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/env"
cmdFlags "github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/internal/metrics/expvar"
"github.com/jaegertracing/jaeger/internal/metrics/fork"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/metrics"
Expand Down Expand Up @@ -72,7 +72,7 @@ func main() {
logger := svc.Logger // shortcut
baseFactory := svc.MetricsFactory.Namespace(metrics.NSOptions{Name: "jaeger"})
metricsFactory := fork.New("internal",
metrics.NewJLibAdapter(jexpvar.NewFactory(10)), // backend for internal opts
expvar.NewFactory(10), // backend for internal opts
baseFactory.Namespace(metrics.NSOptions{Name: "collector"}))
version.NewInfoMetrics(metricsFactory)

Expand Down
13 changes: 3 additions & 10 deletions cmd/flags/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import (

grpcZap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap"
"github.com/spf13/viper"
jlibmetrics "github.com/uber/jaeger-lib/metrics"
"go.uber.org/zap"

"github.com/jaegertracing/jaeger/internal/metrics/metricsbuilder"
"github.com/jaegertracing/jaeger/pkg/healthcheck"
"github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/ports"
Expand All @@ -49,8 +49,6 @@ type Service struct {
// MetricsFactory is the root factory without a namespace.
MetricsFactory metrics.Factory

JLibMetricsFactory jlibmetrics.Factory

signalsChannel chan os.Signal

hcStatusChannel chan healthcheck.Status
Expand All @@ -77,7 +75,7 @@ func (s *Service) AddFlags(flagSet *flag.FlagSet) {
} else {
AddFlags(flagSet)
}
metrics.AddFlags(flagSet)
metricsbuilder.AddFlags(flagSet)
s.Admin.AddFlags(flagSet)
}

Expand Down Expand Up @@ -106,17 +104,12 @@ func (s *Service) Start(v *viper.Viper) error {
return fmt.Errorf("cannot create logger: %w", err)
}

metricsBuilder := new(metrics.Builder).InitFromViper(v)
metricsBuilder := new(metricsbuilder.Builder).InitFromViper(v)
metricsFactory, err := metricsBuilder.CreateMetricsFactory("")
if err != nil {
return fmt.Errorf("cannot create metrics factory: %w", err)
}
s.MetricsFactory = metricsFactory
if jlib, ok := metricsFactory.(*metrics.JLibAdapter); ok {
s.JLibMetricsFactory = jlib.Unwrap()
} else {
s.JLibMetricsFactory = jlibmetrics.NullFactory
}

if err = s.Admin.initFromViper(v, s.Logger); err != nil {
return fmt.Errorf("cannot initialize admin server: %w", err)
Expand Down
14 changes: 0 additions & 14 deletions cmd/flags/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ import (

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
jlibmetrics "github.com/uber/jaeger-lib/metrics"
"go.uber.org/atomic"

"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/healthcheck"
"github.com/jaegertracing/jaeger/pkg/metrics"
)

func TestAddFlags(t *testing.T) {
Expand Down Expand Up @@ -114,15 +112,3 @@ func waitForEqual(t *testing.T, expected interface{}, getter func() interface{})
}
assert.Equal(t, expected, getter())
}

func TestNullMetricsFactory(t *testing.T) {
v, cmd := config.Viperize(metrics.AddFlags)
err := cmd.ParseFlags([]string{
"--metrics-backend=none",
})
require.NoError(t, err)

s := NewService(0)
s.Start(v)
assert.IsType(t, jlibmetrics.NullFactory, s.JLibMetricsFactory)
}
3 changes: 2 additions & 1 deletion cmd/query/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/query/app"
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/internal/metrics/jlibadapter"
"github.com/jaegertracing/jaeger/pkg/bearertoken"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/metrics"
Expand Down Expand Up @@ -86,7 +87,7 @@ func main() {
logger.Fatal("Failed to read tracer configuration", zap.Error(err))
}
tracer, closer, err := traceCfg.NewTracer(
jaegerClientConfig.Metrics(svc.JLibMetricsFactory),
jaegerClientConfig.Metrics(jlibadapter.NewAdapter(svc.MetricsFactory)),
jaegerClientConfig.Logger(jaegerClientZapLog.NewLogger(logger)),
)
if err != nil {
Expand Down
84 changes: 84 additions & 0 deletions internal/metrics/expvar/adapter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// Copyright (c) 2022 The Jaeger Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package expvar

import (
jlibmetrics "github.com/uber/jaeger-lib/metrics"

"github.com/jaegertracing/jaeger/pkg/metrics"
)

// adapter is temporary type used to bridge metrics API in this package
// with that of jaeger-lib.
type adapter struct {
f jlibmetrics.Factory
}

var _ metrics.Factory = (*adapter)(nil)

func newAdapter(f jlibmetrics.Factory) *adapter {
return &adapter{f: f}
}

// Counter creates a Counter.
func (a *adapter) Counter(opts metrics.Options) metrics.Counter {
return a.f.Counter(jlibmetrics.Options{
Name: opts.Name,
Tags: opts.Tags,
Help: opts.Help,
})
}

// Timer creates a Timer.
func (a *adapter) Timer(opts metrics.TimerOptions) metrics.Timer {
return a.f.Timer(jlibmetrics.TimerOptions{
Name: opts.Name,
Tags: opts.Tags,
Help: opts.Help,
Buckets: opts.Buckets,
})
}

// Gauge creates a Gauge.
func (a *adapter) Gauge(opts metrics.Options) metrics.Gauge {
return a.f.Gauge(jlibmetrics.Options{
Name: opts.Name,
Tags: opts.Tags,
Help: opts.Help,
})
}

// Histogram creates a Histogram.
func (a *adapter) Histogram(opts metrics.HistogramOptions) metrics.Histogram {
return a.f.Histogram(jlibmetrics.HistogramOptions{
Name: opts.Name,
Tags: opts.Tags,
Help: opts.Help,
Buckets: opts.Buckets,
})
}

// Namespace creates a Namespace.
func (a *adapter) Namespace(opts metrics.NSOptions) metrics.Factory {
return &adapter{f: a.f.Namespace(jlibmetrics.NSOptions{
Name: opts.Name,
Tags: opts.Tags,
})}
}

// Unwrap returns underlying jaeger-lib factory.
func (a *adapter) Unwrap() jlibmetrics.Factory {
return a.f
}
33 changes: 33 additions & 0 deletions internal/metrics/expvar/adapter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (c) 2022 The Jaeger Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package expvar

import (
"testing"

jlibmetrics "github.com/uber/jaeger-lib/metrics"

"github.com/jaegertracing/jaeger/pkg/metrics"
)

func TestAdapter(t *testing.T) {
f := newAdapter(jlibmetrics.NullFactory)
f.Counter(metrics.Options{})
f.Timer(metrics.TimerOptions{})
f.Gauge(metrics.Options{})
f.Histogram(metrics.HistogramOptions{})
f.Namespace(metrics.NSOptions{})
f.Unwrap()
}
26 changes: 26 additions & 0 deletions internal/metrics/expvar/factory.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (c) 2022 The Jaeger Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package expvar

import (
"github.com/uber/jaeger-lib/metrics/expvar"

"github.com/jaegertracing/jaeger/pkg/metrics"
)

// NewFactory creates metrics.Factory for expvar.
func NewFactory(buckets int) metrics.Factory {
return newAdapter(expvar.NewFactory(buckets))
}
Loading

0 comments on commit c63da1a

Please sign in to comment.