@@ -119,6 +119,8 @@ type Distributor struct {
119
119
ingesterQueryFailures * prometheus.CounterVec
120
120
replicationFactor prometheus.Gauge
121
121
latestSeenSampleTimestampPerUser * prometheus.GaugeVec
122
+
123
+ validateMetrics * validation.ValidateMetrics
122
124
}
123
125
124
126
// Config contains the configuration required to
@@ -345,6 +347,8 @@ func New(cfg Config, clientConfig ingester_client.Config, limits *validation.Ove
345
347
Name : "cortex_distributor_latest_seen_sample_timestamp_seconds" ,
346
348
Help : "Unix timestamp of latest received sample per user." ,
347
349
}, []string {"user" }),
350
+
351
+ validateMetrics : validation .NewValidateMetrics (reg ),
348
352
}
349
353
350
354
promauto .With (reg ).NewGauge (prometheus.GaugeOpts {
@@ -437,7 +441,7 @@ func (d *Distributor) cleanupInactiveUser(userID string) {
437
441
level .Warn (d .log ).Log ("msg" , "failed to remove cortex_distributor_deduped_samples_total metric for user" , "user" , userID , "err" , err )
438
442
}
439
443
440
- validation .DeletePerUserValidationMetrics (userID , d .log )
444
+ validation .DeletePerUserValidationMetrics (d . validateMetrics , userID , d .log )
441
445
}
442
446
443
447
// Called after distributor is asked to stop via StopAsync.
@@ -534,7 +538,7 @@ func (d *Distributor) checkSample(ctx context.Context, userID, cluster, replica
534
538
func (d * Distributor ) validateSeries (ts cortexpb.PreallocTimeseries , userID string , skipLabelNameValidation bool , limits * validation.Limits ) (cortexpb.PreallocTimeseries , validation.ValidationError ) {
535
539
d .labelsHistogram .Observe (float64 (len (ts .Labels )))
536
540
537
- if err := validation .ValidateLabels (limits , userID , ts .Labels , skipLabelNameValidation ); err != nil {
541
+ if err := validation .ValidateLabels (d . validateMetrics , limits , userID , ts .Labels , skipLabelNameValidation ); err != nil {
538
542
return emptyPreallocSeries , err
539
543
}
540
544
@@ -543,7 +547,7 @@ func (d *Distributor) validateSeries(ts cortexpb.PreallocTimeseries, userID stri
543
547
// Only alloc when data present
544
548
samples = make ([]cortexpb.Sample , 0 , len (ts .Samples ))
545
549
for _ , s := range ts .Samples {
546
- if err := validation .ValidateSample (limits , userID , ts .Labels , s ); err != nil {
550
+ if err := validation .ValidateSample (d . validateMetrics , limits , userID , ts .Labels , s ); err != nil {
547
551
return emptyPreallocSeries , err
548
552
}
549
553
samples = append (samples , s )
@@ -555,7 +559,7 @@ func (d *Distributor) validateSeries(ts cortexpb.PreallocTimeseries, userID stri
555
559
// Only alloc when data present
556
560
exemplars = make ([]cortexpb.Exemplar , 0 , len (ts .Exemplars ))
557
561
for _ , e := range ts .Exemplars {
558
- if err := validation .ValidateExemplar (userID , ts .Labels , e ); err != nil {
562
+ if err := validation .ValidateExemplar (d . validateMetrics , userID , ts .Labels , e ); err != nil {
559
563
// An exemplar validation error prevents ingesting samples
560
564
// in the same series object. However, because the current Prometheus
561
565
// remote write implementation only populates one or the other,
@@ -643,7 +647,7 @@ func (d *Distributor) Push(ctx context.Context, req *cortexpb.WriteRequest) (*co
643
647
}
644
648
645
649
if errors .Is (err , ha.TooManyReplicaGroupsError {}) {
646
- validation .DiscardedSamples .WithLabelValues (validation .TooManyHAClusters , userID ).Add (float64 (numSamples ))
650
+ d . validateMetrics .DiscardedSamples .WithLabelValues (validation .TooManyHAClusters , userID ).Add (float64 (numSamples ))
647
651
return nil , httpgrpc .Errorf (http .StatusBadRequest , err .Error ())
648
652
}
649
653
@@ -678,9 +682,9 @@ func (d *Distributor) Push(ctx context.Context, req *cortexpb.WriteRequest) (*co
678
682
// Ensure the request slice is reused if the request is rate limited.
679
683
cortexpb .ReuseSlice (req .Timeseries )
680
684
681
- validation .DiscardedSamples .WithLabelValues (validation .RateLimited , userID ).Add (float64 (validatedSamples ))
682
- validation .DiscardedExemplars .WithLabelValues (validation .RateLimited , userID ).Add (float64 (validatedExemplars ))
683
- validation .DiscardedMetadata .WithLabelValues (validation .RateLimited , userID ).Add (float64 (len (validatedMetadata )))
685
+ d . validateMetrics .DiscardedSamples .WithLabelValues (validation .RateLimited , userID ).Add (float64 (validatedSamples ))
686
+ d . validateMetrics .DiscardedExemplars .WithLabelValues (validation .RateLimited , userID ).Add (float64 (validatedExemplars ))
687
+ d . validateMetrics .DiscardedMetadata .WithLabelValues (validation .RateLimited , userID ).Add (float64 (len (validatedMetadata )))
684
688
// Return a 429 here to tell the client it is going too fast.
685
689
// Client may discard the data or slow down and re-send.
686
690
// Prometheus v2.26 added a remote-write option 'retry_on_http_429'.
@@ -790,7 +794,7 @@ func (d *Distributor) prepareMetadataKeys(req *cortexpb.WriteRequest, limits *va
790
794
metadataKeys := make ([]uint32 , 0 , len (req .Metadata ))
791
795
792
796
for _ , m := range req .Metadata {
793
- err := validation .ValidateMetadata (limits , userID , m )
797
+ err := validation .ValidateMetadata (d . validateMetrics , limits , userID , m )
794
798
795
799
if err != nil {
796
800
if firstPartialErr == nil {
@@ -841,7 +845,7 @@ func (d *Distributor) prepareSeriesKeys(ctx context.Context, req *cortexpb.Write
841
845
l , _ := relabel .Process (cortexpb .FromLabelAdaptersToLabels (ts .Labels ), mrc ... )
842
846
if len (l ) == 0 {
843
847
// all labels are gone, samples will be discarded
844
- validation .DiscardedSamples .WithLabelValues (
848
+ d . validateMetrics .DiscardedSamples .WithLabelValues (
845
849
validation .DroppedByRelabelConfiguration ,
846
850
userID ,
847
851
).Add (float64 (len (ts .Samples )))
@@ -862,7 +866,7 @@ func (d *Distributor) prepareSeriesKeys(ctx context.Context, req *cortexpb.Write
862
866
}
863
867
864
868
if len (ts .Labels ) == 0 {
865
- validation .DiscardedExemplars .WithLabelValues (
869
+ d . validateMetrics .DiscardedExemplars .WithLabelValues (
866
870
validation .DroppedByUserConfigurationOverride ,
867
871
userID ,
868
872
).Add (float64 (len (ts .Samples )))
0 commit comments