diff --git a/pkg/scheduler/framework/runtime/framework.go b/pkg/scheduler/framework/runtime/framework.go index 4bddf193760..0303a72db5f 100644 --- a/pkg/scheduler/framework/runtime/framework.go +++ b/pkg/scheduler/framework/runtime/framework.go @@ -617,6 +617,7 @@ func (f *frameworkImpl) RunPreFilterPlugins(ctx context.Context, state *framewor skipPlugins.Insert(pl.Name()) continue } + metrics.PluginEvaluationTotal.WithLabelValues(pl.Name(), preFilter, f.profileName).Inc() if !s.IsSuccess() { s.SetFailedPlugin(pl.Name()) if s.IsUnschedulable() { @@ -734,6 +735,7 @@ func (f *frameworkImpl) RunFilterPlugins( if state.SkipFilterPlugins.Has(pl.Name()) { continue } + metrics.PluginEvaluationTotal.WithLabelValues(pl.Name(), Filter, f.profileName).Inc() if status := f.runFilterPlugin(ctx, pl, state, pod, nodeInfo); !status.IsSuccess() { if !status.IsUnschedulable() { // Filter plugins are not supposed to return any status other than diff --git a/pkg/scheduler/metrics/metrics.go b/pkg/scheduler/metrics/metrics.go index 335cba29396..414d0d4d779 100644 --- a/pkg/scheduler/metrics/metrics.go +++ b/pkg/scheduler/metrics/metrics.go @@ -189,6 +189,14 @@ var ( StabilityLevel: metrics.ALPHA, }, []string{"plugin", "profile"}) + PluginEvaluationTotal = metrics.NewCounterVec( + &metrics.CounterOpts{ + Subsystem: SchedulerSubsystem, + Name: "plugin_evaluation_total", + Help: "Number of attempts to schedule pods by each plugin and the extension point (available only in PreFilter and Filter.).", + StabilityLevel: metrics.ALPHA, + }, []string{"plugin", "extension_point", "profile"}) + metricsList = []metrics.Registerable{ scheduleAttempts, e2eSchedulingLatency, @@ -207,6 +215,7 @@ var ( PermitWaitDuration, CacheSize, unschedulableReasons, + PluginEvaluationTotal, } )