diff --git a/pkg/scheduler/metrics/metrics.go b/pkg/scheduler/metrics/metrics.go index 2d709cb27c8..f8a0ed39989 100644 --- a/pkg/scheduler/metrics/metrics.go +++ b/pkg/scheduler/metrics/metrics.go @@ -195,11 +195,13 @@ var ( StabilityLevel: metrics.ALPHA, }, ) - PreemptionVictims = metrics.NewGauge( - &metrics.GaugeOpts{ - Subsystem: SchedulerSubsystem, - Name: "pod_preemption_victims", - Help: "Number of selected preemption victims", + PreemptionVictims = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "pod_preemption_victims", + Help: "Number of selected preemption victims", + // we think #victims>50 is pretty rare, therefore [50, +Inf) is considered a single bucket. + Buckets: metrics.LinearBuckets(5, 5, 10), StabilityLevel: metrics.ALPHA, }) PreemptionAttempts = metrics.NewCounter( diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 209bd2518e9..df8fa1dcf89 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -473,7 +473,7 @@ func (sched *Scheduler) preempt(state *framework.CycleState, fwk framework.Frame sched.Recorder.Eventf(victim, preemptor, v1.EventTypeNormal, "Preempted", "Preempting", "Preempted by %v/%v on node %v", preemptor.Namespace, preemptor.Name, nodeName) } - metrics.PreemptionVictims.Set(float64(len(victims))) + metrics.PreemptionVictims.Observe(float64(len(victims))) } // Clearing nominated pods should happen outside of "if node != nil". Node could // be nil when a pod with nominated node name is eligible to preempt again,