zero/telemetry: collect limited core metrics (#5142)

This commit is contained in:
Denis Mishin 2024-06-18 19:15:11 -04:00 committed by GitHub
parent 71cda4628d
commit 8d206e0087
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 102 additions and 14 deletions

View file

@ -13,6 +13,7 @@ import (
"github.com/pomerium/pomerium/internal/telemetry/prometheus"
sdk "github.com/pomerium/pomerium/internal/zero/api"
connect_mux "github.com/pomerium/pomerium/internal/zero/connect-mux"
"github.com/pomerium/pomerium/internal/zero/telemetry/opencensus"
"github.com/pomerium/pomerium/internal/zero/telemetry/reporter"
"github.com/pomerium/pomerium/internal/zero/telemetry/sessions"
"github.com/pomerium/pomerium/pkg/grpc/databroker"
@ -26,6 +27,7 @@ type Telemetry struct {
envoyMetrics *metricsProducer[*prometheus.Producer]
sessionMetrics *metricsProducer[*sessions.Producer]
coreMetrics *metricsProducer[*opencensus.Producer]
hasSessionMetricsLease func() bool
}
@ -40,10 +42,12 @@ func New(
sessionMetricProducer := newMetricsProducer("sessions", buildSessionMetricsProducer(clientProvider))
envoyMetricProducer := newMetricsProducer("envoy", buildEnvoyMetricsProducer(envoyScrapeURL, startTime))
coreMetricsProducer := newMetricsProducer("core", opencensus.New())
r, err := reporter.New(ctx, api.GetTelemetryConn(),
reporter.WithProducer(sessionMetricProducer),
reporter.WithProducer(envoyMetricProducer),
reporter.WithProducer(coreMetricsProducer),
)
if err != nil {
return nil, fmt.Errorf("error creating telemetry metrics reporter: %w", err)
@ -54,6 +58,7 @@ func New(
reporter: r,
sessionMetrics: sessionMetricProducer,
envoyMetrics: envoyMetricProducer,
coreMetrics: coreMetricsProducer,
hasSessionMetricsLease: hasSessionMetricsLease,
}, nil
}
@ -108,6 +113,7 @@ func (srv *Telemetry) handleRequests(ctx context.Context) error {
func (srv *Telemetry) handleRequest(ctx context.Context, req *connect.TelemetryRequest) {
srv.configureEnvoyMetricsProducer(req.GetEnvoyMetrics())
srv.configureSessionMetricsProducer(req.GetSessionAnalytics())
srv.configureCoreMetricsProducer(req.GetPomeriumMetrics())
err := srv.reporter.CollectAndExportMetrics(ctx)
if err != nil {
@ -144,3 +150,12 @@ func (srv *Telemetry) configureEnvoyMetricsProducer(req *connect.EnvoyMetricsReq
)
srv.envoyMetrics.SetEnabled(true)
}
func (srv *Telemetry) configureCoreMetricsProducer(req *connect.PomeriumMetricsRequest) {
if req == nil {
srv.coreMetrics.SetEnabled(false)
return
}
srv.coreMetrics.Producer().SetFilter(req.Metrics)
srv.coreMetrics.SetEnabled(true)
}