From 08bc827e664a93f03d05d6352c8ee590fcf04dcf Mon Sep 17 00:00:00 2001 From: Alay Patel Date: Mon, 1 Mar 2021 13:44:07 -0500 Subject: [PATCH] cronjob_controller: add metrics for job creation skew duration --- .../cronjob/cronjob_controllerv2.go | 4 ++ pkg/controller/cronjob/metrics/metrics.go | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 pkg/controller/cronjob/metrics/metrics.go diff --git a/pkg/controller/cronjob/cronjob_controllerv2.go b/pkg/controller/cronjob/cronjob_controllerv2.go index 765d7a445c1..c9b379aefd6 100644 --- a/pkg/controller/cronjob/cronjob_controllerv2.go +++ b/pkg/controller/cronjob/cronjob_controllerv2.go @@ -46,6 +46,7 @@ import ( "k8s.io/component-base/metrics/prometheus/ratelimiter" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/controller" + "k8s.io/kubernetes/pkg/controller/cronjob/metrics" ) var ( @@ -114,6 +115,8 @@ func NewControllerV2(jobInformer batchv1informers.JobInformer, cronJobsInformer }, }) + metrics.Register() + return jm, nil } @@ -570,6 +573,7 @@ func (jm *ControllerV2) syncCronJob( return cj, nil, err } + metrics.CronJobCreationSkew.Observe(jobResp.ObjectMeta.GetCreationTimestamp().Sub(*scheduledTime).Seconds()) klog.V(4).InfoS("Created Job", "job", klog.KRef(jobResp.GetNamespace(), jobResp.GetName()), "cronjob", klog.KRef(cj.GetNamespace(), cj.GetName())) jm.recorder.Eventf(cj, corev1.EventTypeNormal, "SuccessfulCreate", "Created job %v", jobResp.Name) diff --git a/pkg/controller/cronjob/metrics/metrics.go b/pkg/controller/cronjob/metrics/metrics.go new file mode 100644 index 00000000000..ca62808e90e --- /dev/null +++ b/pkg/controller/cronjob/metrics/metrics.go @@ -0,0 +1,47 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "sync" + + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" +) + +const CronJobControllerSubsystem = "cronjob_controller" + +var ( + CronJobCreationSkew = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: CronJobControllerSubsystem, + Name: "cronjob_job_creation_skew_duration_seconds", + Help: "Time between when a cronjob is scheduled to be run, and when the corresponding job is created", + StabilityLevel: metrics.ALPHA, + Buckets: metrics.ExponentialBuckets(1, 2, 10), + }, + ) +) + +var registerMetrics sync.Once + +// Register registers CronjobController metrics. +func Register() { + registerMetrics.Do(func() { + legacyregistry.MustRegister(CronJobCreationSkew) + }) +}