From 23bdbff9a4777dffaf5bfd2b1f7aa08de23a01f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Vila=C3=A7a?= Date: Mon, 18 Mar 2024 20:53:14 +0000 Subject: [PATCH] Refactor kubevirt_vmi_number_of_outdated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: João Vilaça --- .../metrics/virt-controller/BUILD.bazel | 1 + .../metrics/virt-controller/metrics.go | 1 + .../metrics/virt-controller/vmi_metrics.go | 40 +++++++++++++++++++ .../watch/workload-updater/BUILD.bazel | 2 +- .../workload-updater/workload-updater.go | 17 +------- 5 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 pkg/monitoring/metrics/virt-controller/vmi_metrics.go diff --git a/pkg/monitoring/metrics/virt-controller/BUILD.bazel b/pkg/monitoring/metrics/virt-controller/BUILD.bazel index 8938417b0769..cdce6e103620 100644 --- a/pkg/monitoring/metrics/virt-controller/BUILD.bazel +++ b/pkg/monitoring/metrics/virt-controller/BUILD.bazel @@ -8,6 +8,7 @@ go_library( "migration_metrics.go", "migrationstats_collector.go", "perfscale_metrics.go", + "vmi_metrics.go", "vmistats_collector.go", "vmstats_collector.go", ], diff --git a/pkg/monitoring/metrics/virt-controller/metrics.go b/pkg/monitoring/metrics/virt-controller/metrics.go index a3e9e59217b0..bfbacec117cb 100644 --- a/pkg/monitoring/metrics/virt-controller/metrics.go +++ b/pkg/monitoring/metrics/virt-controller/metrics.go @@ -35,6 +35,7 @@ var ( componentMetrics, migrationMetrics, perfscaleMetrics, + vmiMetrics, } vmInformer cache.SharedIndexInformer diff --git a/pkg/monitoring/metrics/virt-controller/vmi_metrics.go b/pkg/monitoring/metrics/virt-controller/vmi_metrics.go new file mode 100644 index 000000000000..3f7d8dc0f5cb --- /dev/null +++ b/pkg/monitoring/metrics/virt-controller/vmi_metrics.go @@ -0,0 +1,40 @@ +/* + * This file is part of the KubeVirt project + * + * 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. + * + * Copyright the KubeVirt Authors. + */ + +package virt_controller + +import ( + "github.com/machadovilaca/operator-observability/pkg/operatormetrics" +) + +var ( + vmiMetrics = []operatormetrics.Metric{ + outdatedVirtualMachineInstanceWorkloads, + } + + outdatedVirtualMachineInstanceWorkloads = operatormetrics.NewGauge( + operatormetrics.MetricOpts{ + Name: "kubevirt_vmi_number_of_outdated", + Help: "Indication for the total number of VirtualMachineInstance workloads that are not running within the most up-to-date version of the virt-launcher environment.", + }, + ) +) + +func SetOutdatedVirtualMachineInstanceWorkloads(value int) { + outdatedVirtualMachineInstanceWorkloads.Set(float64(value)) +} diff --git a/pkg/virt-controller/watch/workload-updater/BUILD.bazel b/pkg/virt-controller/watch/workload-updater/BUILD.bazel index fb673232f663..63c65d317f46 100644 --- a/pkg/virt-controller/watch/workload-updater/BUILD.bazel +++ b/pkg/virt-controller/watch/workload-updater/BUILD.bazel @@ -7,13 +7,13 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/controller:go_default_library", + "//pkg/monitoring/metrics/virt-controller:go_default_library", "//pkg/util/migrations:go_default_library", "//pkg/util/status:go_default_library", "//pkg/virt-config:go_default_library", "//staging/src/kubevirt.io/api/core/v1:go_default_library", "//staging/src/kubevirt.io/client-go/kubecli:go_default_library", "//staging/src/kubevirt.io/client-go/log:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/golang.org/x/time/rate:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/policy/v1beta1:go_default_library", diff --git a/pkg/virt-controller/watch/workload-updater/workload-updater.go b/pkg/virt-controller/watch/workload-updater/workload-updater.go index bcb08a336022..6303624ed8e4 100644 --- a/pkg/virt-controller/watch/workload-updater/workload-updater.go +++ b/pkg/virt-controller/watch/workload-updater/workload-updater.go @@ -10,7 +10,6 @@ import ( "golang.org/x/time/rate" - "github.com/prometheus/client_golang/prometheus" k8sv1 "k8s.io/api/core/v1" policy "k8s.io/api/policy/v1beta1" "k8s.io/apimachinery/pkg/api/errors" @@ -31,6 +30,7 @@ import ( "kubevirt.io/client-go/log" "kubevirt.io/kubevirt/pkg/controller" + metrics "kubevirt.io/kubevirt/pkg/monitoring/metrics/virt-controller" "kubevirt.io/kubevirt/pkg/util/status" ) @@ -45,15 +45,6 @@ const ( SuccessfulEvictVirtualMachineInstanceReason = "SuccessfulEvict" ) -var ( - outdatedVirtualMachineInstanceWorkloads = prometheus.NewGauge( - prometheus.GaugeOpts{ - Name: "kubevirt_vmi_number_of_outdated", - Help: "Indication for the total number of VirtualMachineInstance workloads that are not running within the most up-to-date version of the virt-launcher environment.", - }, - ) -) - // time to wait before re-enqueing when outdated VMIs are still detected const periodicReEnqueueIntervalSeconds = 30 @@ -63,10 +54,6 @@ const defaultThrottleInterval = 5 * time.Second const defaultBatchDeletionIntervalSeconds = 60 const defaultBatchDeletionCount = 10 -func init() { - prometheus.MustRegister(outdatedVirtualMachineInstanceWorkloads) -} - type WorkloadUpdateController struct { clientset kubecli.KubevirtClient queue workqueue.RateLimitingInterface @@ -429,7 +416,7 @@ func (c *WorkloadUpdateController) sync(kv *virtv1.KubeVirt) error { return err } - outdatedVirtualMachineInstanceWorkloads.Set(float64(len(data.allOutdatedVMIs))) + metrics.SetOutdatedVirtualMachineInstanceWorkloads(len(data.allOutdatedVMIs)) // update outdated workload count on kv if kv.Status.OutdatedVirtualMachineInstanceWorkloads == nil || *kv.Status.OutdatedVirtualMachineInstanceWorkloads != len(data.allOutdatedVMIs) {