Skip to content

Commit d0d9e9d

Browse files
author
Martin Schneppenheim
committed
Make E2E service accept a prometheus registerer
I was informed about a usecase that uses KMinions end to end service as a library. In order to provide more control about the exported metrics the E2E service now accepts a Prometheus Gatherer that is used to register all exposed metrics
1 parent 2b50411 commit d0d9e9d

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

e2e/service.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/cloudhut/kminion/v2/kafka"
99
"github.com/google/uuid"
1010
"github.com/prometheus/client_golang/prometheus"
11-
"github.com/prometheus/client_golang/prometheus/promauto"
1211
"github.com/twmb/franz-go/pkg/kgo"
1312
"go.uber.org/zap"
1413
)
@@ -44,7 +43,7 @@ type Service struct {
4443
}
4544

4645
// NewService creates a new instance of the e2e moinitoring service (wow)
47-
func NewService(ctx context.Context, cfg Config, logger *zap.Logger, kafkaSvc *kafka.Service, metricNamespace string) (*Service, error) {
46+
func NewService(ctx context.Context, cfg Config, logger *zap.Logger, kafkaSvc *kafka.Service, promRegisterer prometheus.Registerer) (*Service, error) {
4847
minionID := uuid.NewString()
4948
groupID := fmt.Sprintf("%v-%v", cfg.Consumer.GroupIdPrefix, minionID)
5049

@@ -94,29 +93,32 @@ func NewService(ctx context.Context, cfg Config, logger *zap.Logger, kafkaSvc *k
9493
svc.messageTracker = newMessageTracker(svc)
9594

9695
makeCounterVec := func(name string, labelNames []string, help string) *prometheus.CounterVec {
97-
return promauto.NewCounterVec(prometheus.CounterOpts{
98-
Namespace: metricNamespace,
96+
cv := prometheus.NewCounterVec(prometheus.CounterOpts{
9997
Subsystem: "end_to_end",
10098
Name: name,
10199
Help: help,
102100
}, labelNames)
101+
promRegisterer.MustRegister(cv)
102+
return cv
103103
}
104104
makeGaugeVec := func(name string, labelNames []string, help string) *prometheus.GaugeVec {
105-
return promauto.NewGaugeVec(prometheus.GaugeOpts{
106-
Namespace: metricNamespace,
105+
gv := prometheus.NewGaugeVec(prometheus.GaugeOpts{
107106
Subsystem: "end_to_end",
108107
Name: name,
109108
Help: help,
110109
}, labelNames)
110+
promRegisterer.MustRegister(gv)
111+
return gv
111112
}
112113
makeHistogramVec := func(name string, maxLatency time.Duration, labelNames []string, help string) *prometheus.HistogramVec {
113-
return promauto.NewHistogramVec(prometheus.HistogramOpts{
114-
Namespace: metricNamespace,
114+
hv := prometheus.NewHistogramVec(prometheus.HistogramOpts{
115115
Subsystem: "end_to_end",
116116
Name: name,
117117
Help: help,
118118
Buckets: createHistogramBuckets(maxLatency),
119119
}, labelNames)
120+
promRegisterer.MustRegister(hv)
121+
return hv
120122
}
121123

122124
// Low-level info
@@ -178,7 +180,6 @@ func (s *Service) Start(ctx context.Context) error {
178180
case <-initCh:
179181
isInitialized = true
180182
s.logger.Info("consumer has been successfully initialized")
181-
break
182183
case <-ctx.Done():
183184
return nil
184185
}

main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ func main() {
5454
}
5555
}()
5656

57+
wrappedRegisterer := promclient.WrapRegistererWithPrefix(cfg.Exporter.Namespace+"_", promclient.DefaultRegisterer)
58+
5759
// Create kafka service
5860
kafkaSvc := kafka.NewService(cfg.Kafka, logger)
5961

@@ -77,7 +79,7 @@ func main() {
7779
cfg.Minion.EndToEnd,
7880
logger,
7981
kafkaSvc,
80-
cfg.Exporter.Namespace,
82+
wrappedRegisterer,
8183
)
8284
if err != nil {
8385
logger.Fatal("failed to create end-to-end monitoring service: %w", zap.Error(err))

0 commit comments

Comments
 (0)