jaegertracing / jaeger

CNCF Jaeger, a Distributed Tracing Platform
https://www.jaegertracing.io/
Apache License 2.0
20.15k stars 2.4k forks source link

[Feature]: gRPC storage plugin for metrics #4413

Closed jacobmarble closed 1 month ago

jacobmarble commented 1 year ago

Requirement

As a Jaeger operator, I want to enable the Jaeger UI "Monitoring" tab for my SREs, DevOps, Engineers.

Problem

Service Performance Monitoring is a feature of Jaeger that is often overlooked.

My team can't use it because our metrics backend is InfluxDB. (InfluxDB is also our tracing backend.) The only Jaeger metrics plugin requires Prometheus.

Proposal

I offer to write a new metricsstore plugin, which backends to a remote (not sidecar) third-party gRPC service.

At the same time, I offer to write a third-party remote gRPC backend for the proposed plugin. This backend would support InfluxDB, and would live here: https://github.com/influxdata/influxdb-observability/tree/main/jaeger-influxdb

Open questions

Several questions have been raised and discussed.

Where should the new plugin live? I propose that plugin/storage/grpc/shared/interface.go change like this (I hope the rest is obvious):

  type StoragePlugin interface {
    SpanReader()       spanstore.Reader
    SpanWriter()       spanstore.Writer
    DependencyReader() dependencystore.Reader
+   MetricsReader()    metricsstore.Reader
  }
...
  type Capabilities struct {
    ArchiveSpanReader   bool
    ArchiveSpanWriter   bool
    StreamingSpanWriter bool
+   MetricsReader       bool
  }
jacobmarble commented 1 year ago

Please assign this issue to me.

yurishkuro commented 1 year ago
  • MetricsReader() metricsstore.Reader

this would be a breaking change - see how other services mentioned in Capabilities are implemented with separate interfaces

jacobmarble commented 1 year ago

Ah. Like this, then:

+  type MetricsReaderPlugin interface {
+    MetricsReader() metricsstore.Reader
+  }
...
  type Capabilities struct {
    ArchiveSpanReader   bool
    ArchiveSpanWriter   bool
    StreamingSpanWriter bool
+   MetricsReader       bool
  }
jacobmarble commented 1 year ago

@yurishkuro please review this implementation: #4414