Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

Commit de0b73a

Browse files
author
Hector Fernandez
committed
metrics: register times for the reconcile loops
1 parent 1f79230 commit de0b73a

File tree

10 files changed

+26
-9
lines changed

10 files changed

+26
-9
lines changed

docs/keps/20200302-kubefed-metrics.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ and consumed from Kubefed to create dashboards and better understand this engine
4444
## Motivation
4545

4646
We aim to define a generic strategy on how to identify, consume and expose
47-
metrics from our core components in Kommander.
47+
custom Kubefed metrics.
4848

4949

5050
### Goals
@@ -115,7 +115,7 @@ of the different propagated resources. The label `action` will hold the `create`
115115

116116
Regarding cluster join/unjoin operations, these metrics are also convenient to register:
117117

118-
* `joinedcluster_total`: a gauge metric that holds the number joined clusters.
118+
* `joined_cluster_total`: a gauge metric that holds the number joined clusters.
119119

120120
* `join_cluster_duration_seconds`: this `histogram` metric holds the duration in seconds of the join cluster action.
121121

pkg/controller/federatedtypeconfig/controller.go

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package federatedtypeconfig
1919
import (
2020
"context"
2121
"sync"
22+
"time"
2223

2324
"github.com/pkg/errors"
2425

@@ -36,6 +37,7 @@ import (
3637
statuscontroller "sigs.k8s.io/kubefed/pkg/controller/status"
3738
synccontroller "sigs.k8s.io/kubefed/pkg/controller/sync"
3839
"sigs.k8s.io/kubefed/pkg/controller/util"
40+
"sigs.k8s.io/kubefed/pkg/metrics"
3941
)
4042

4143
const finalizer string = "core.kubefed.io/federated-type-config"
@@ -128,6 +130,7 @@ func (c *Controller) Run(stopChan <-chan struct{}) {
128130

129131
func (c *Controller) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
130132
key := qualifiedName.String()
133+
defer metrics.UpdateControllerReconcileDurationFromStart("federatedtypeconfigcontroller", time.Now())
131134

132135
klog.V(3).Infof("Running reconcile FederatedTypeConfig for %q", key)
133136

pkg/controller/ingressdns/controller.go

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
dnsv1a1 "sigs.k8s.io/kubefed/pkg/apis/multiclusterdns/v1alpha1"
3939
genericclient "sigs.k8s.io/kubefed/pkg/client/generic"
4040
"sigs.k8s.io/kubefed/pkg/controller/util"
41+
"sigs.k8s.io/kubefed/pkg/metrics"
4142
)
4243

4344
const (
@@ -201,6 +202,8 @@ func (c *Controller) reconcileOnClusterChange() {
201202
}
202203

203204
func (c *Controller) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
205+
defer metrics.UpdateControllerReconcileDurationFromStart("ingressdnscontroller", time.Now())
206+
204207
if !c.isSynced() {
205208
return util.StatusNotSynced
206209
}

pkg/controller/kubefedcluster/controller.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,10 @@ func (cc *ClusterController) updateClusterStatus() error {
241241

242242
func (cc *ClusterController) updateIndividualClusterStatus(cluster *fedv1b1.KubeFedCluster,
243243
storedData *ClusterData, wg *sync.WaitGroup) {
244+
defer metrics.ClusterHealthStatusDurationFromStart(time.Now())
245+
244246
clusterClient := storedData.clusterKubeClient
245247

246-
clusterHealthStatusStart := time.Now()
247248
currentClusterStatus, err := clusterClient.GetClusterHealthStatus()
248249
if err != nil {
249250
cc.RecordError(cluster, "RetrievingClusterHealthFailed", errors.Wrap(err, "Failed to retrieve health of the cluster"))
@@ -261,8 +262,6 @@ func (cc *ClusterController) updateIndividualClusterStatus(cluster *fedv1b1.Kube
261262
klog.Warningf("Failed to update the status of cluster %q: %v", cluster.Name, err)
262263
}
263264

264-
metrics.ClusterHealthStatusDurationFromStart(clusterHealthStatusStart)
265-
266265
wg.Done()
267266
}
268267

pkg/controller/schedulingmanager/controller.go

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package schedulingmanager
1818

1919
import (
20+
"time"
21+
2022
"github.com/pkg/errors"
2123

2224
"k8s.io/apimachinery/pkg/util/runtime"
@@ -27,6 +29,7 @@ import (
2729
corev1b1 "sigs.k8s.io/kubefed/pkg/apis/core/v1beta1"
2830
"sigs.k8s.io/kubefed/pkg/controller/schedulingpreference"
2931
"sigs.k8s.io/kubefed/pkg/controller/util"
32+
"sigs.k8s.io/kubefed/pkg/metrics"
3033
"sigs.k8s.io/kubefed/pkg/schedulingtypes"
3134
)
3235

@@ -141,6 +144,8 @@ func (c *SchedulingManager) shutdown() {
141144
}
142145

143146
func (c *SchedulingManager) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
147+
defer metrics.UpdateControllerReconcileDurationFromStart("schedulingmanagercontroller", time.Now())
148+
144149
key := qualifiedName.String()
145150

146151
klog.V(3).Infof("Running reconcile FederatedTypeConfig %q in scheduling manager", key)

pkg/controller/schedulingpreference/controller.go

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535

3636
fedv1b1 "sigs.k8s.io/kubefed/pkg/apis/core/v1beta1"
3737
"sigs.k8s.io/kubefed/pkg/controller/util"
38+
"sigs.k8s.io/kubefed/pkg/metrics"
3839
"sigs.k8s.io/kubefed/pkg/schedulingtypes"
3940
)
4041

@@ -191,6 +192,8 @@ func (s *SchedulingPreferenceController) reconcileOnClusterChange() {
191192
}
192193

193194
func (s *SchedulingPreferenceController) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
195+
defer metrics.UpdateControllerReconcileDurationFromStart("schedulingpreferencecontroller", time.Now())
196+
194197
if !s.isSynced() {
195198
return util.StatusNotSynced
196199
}

pkg/controller/servicedns/controller.go

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
dnsv1a1 "sigs.k8s.io/kubefed/pkg/apis/multiclusterdns/v1alpha1"
3838
genericclient "sigs.k8s.io/kubefed/pkg/client/generic"
3939
"sigs.k8s.io/kubefed/pkg/controller/util"
40+
"sigs.k8s.io/kubefed/pkg/metrics"
4041
)
4142

4243
const (
@@ -257,6 +258,8 @@ func (c *Controller) reconcileOnClusterChange() {
257258
}
258259

259260
func (c *Controller) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
261+
defer metrics.UpdateControllerReconcileDurationFromStart("servicednscontroller", time.Now())
262+
260263
if !c.isSynced() {
261264
return util.StatusNotSynced
262265
}

pkg/controller/status/controller.go

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
fedv1b1 "sigs.k8s.io/kubefed/pkg/apis/core/v1beta1"
3838
genericclient "sigs.k8s.io/kubefed/pkg/client/generic"
3939
"sigs.k8s.io/kubefed/pkg/controller/util"
40+
"sigs.k8s.io/kubefed/pkg/metrics"
4041
)
4142

4243
const (
@@ -231,6 +232,8 @@ func (s *KubeFedStatusController) reconcileOnClusterChange() {
231232
}
232233

233234
func (s *KubeFedStatusController) reconcile(qualifiedName util.QualifiedName) util.ReconciliationStatus {
235+
defer metrics.UpdateControllerReconcileDurationFromStart("statuscontroller", time.Now())
236+
234237
if !s.isSynced() {
235238
return util.StatusNotSynced
236239
}

pkg/controller/util/federated_informer.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,10 @@ func (f *federatedInformerImpl) Start() {
322322

323323
// GetClientForCluster returns a client for the cluster, if present.
324324
func (f *federatedInformerImpl) GetClientForCluster(clusterName string) (generic.Client, error) {
325+
defer metrics.ClusterClientConnectionDurationFromStart(time.Now())
325326
f.Lock()
326327
defer f.Unlock()
327328

328-
clientConnectionStart := time.Now()
329-
330329
// return cached client if one exists (to prevent frequent secret retrieval and rest discovery)
331330
if client, ok := f.clusterClients[clusterName]; ok {
332331
return client, nil
@@ -341,7 +340,6 @@ func (f *federatedInformerImpl) GetClientForCluster(clusterName string) (generic
341340
}
342341
f.clusterClients[clusterName] = client
343342

344-
metrics.ClusterClientConnectionDurationFromStart(clientConnectionStart)
345343
return client, nil
346344
}
347345

pkg/metrics/metrics.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var (
3434

3535
joinedClusterTotal = prometheus.NewGauge(
3636
prometheus.GaugeOpts{
37-
Name: "joinedcluster_total",
37+
Name: "joined_cluster_total",
3838
Help: "Number of total joined clusters.",
3939
},
4040
)

0 commit comments

Comments
 (0)