Skip to content

Commit e787525

Browse files
committed
Add metrics for VMSS and VMSS clients
1 parent 4a00e26 commit e787525

File tree

7 files changed

+74
-6
lines changed

7 files changed

+74
-6
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/BUILD

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ go_library(
2424
"azure_instances.go",
2525
"azure_loadbalancer.go",
2626
"azure_managedDiskController.go",
27-
"azure_metrics.go",
2827
"azure_ratelimit.go",
2928
"azure_routes.go",
3029
"azure_standard.go",
@@ -65,12 +64,11 @@ go_library(
6564
"//staging/src/k8s.io/cloud-provider/volume/errors:go_default_library",
6665
"//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library",
6766
"//staging/src/k8s.io/component-base/featuregate:go_default_library",
68-
"//staging/src/k8s.io/component-base/metrics:go_default_library",
69-
"//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
7067
"//staging/src/k8s.io/legacy-cloud-providers/azure/auth:go_default_library",
7168
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
7269
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient:go_default_library",
7370
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient:go_default_library",
71+
"//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library",
7472
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
7573
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library",
7674
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library",
@@ -95,7 +93,6 @@ go_test(
9593
"azure_controller_standard_test.go",
9694
"azure_instances_test.go",
9795
"azure_loadbalancer_test.go",
98-
"azure_metrics_test.go",
9996
"azure_ratelimit_test.go",
10097
"azure_routes_test.go",
10198
"azure_standard_test.go",
@@ -145,6 +142,7 @@ filegroup(
145142
":package-srcs",
146143
"//staging/src/k8s.io/legacy-cloud-providers/azure/auth:all-srcs",
147144
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:all-srcs",
145+
"//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:all-srcs",
148146
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:all-srcs",
149147
],
150148
tags = ["automanaged"],

staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ go_library(
1414
"//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library",
1515
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
1616
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library",
17+
"//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library",
1718
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
1819
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library",
1920
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",

staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient/azure_vmssclient.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ import (
3333
"k8s.io/klog"
3434
azclients "k8s.io/legacy-cloud-providers/azure/clients"
3535
"k8s.io/legacy-cloud-providers/azure/clients/armclient"
36+
"k8s.io/legacy-cloud-providers/azure/metrics"
3637
"k8s.io/legacy-cloud-providers/azure/retry"
3738
)
3839

3940
var _ Interface = &Client{}
4041

4142
// Client implements VMSS client Interface.
42-
// TODO(feiskyer): export prometheus metrics for each API call.
4343
type Client struct {
4444
armClient armclient.Interface
4545
subscriptionID string
@@ -79,18 +79,23 @@ func New(config *azclients.ClientConfig) *Client {
7979

8080
// Get gets a VirtualMachineScaleSet.
8181
func (c *Client) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (compute.VirtualMachineScaleSet, *retry.Error) {
82+
mc := metrics.NewMetricContext("vmss", "get", resourceGroupName, c.subscriptionID, "")
83+
8284
// Report errors if the client is rate limited.
8385
if !c.rateLimiterReader.TryAccept() {
86+
mc.RateLimitedCount()
8487
return compute.VirtualMachineScaleSet{}, retry.GetRateLimitError(false, "VMSSGet")
8588
}
8689

8790
// Report errors if the client is throttled.
8891
if c.RetryAfterReader.After(time.Now()) {
92+
mc.ThrottledCount()
8993
rerr := retry.GetThrottlingError("VMSSGet", "client throttled", c.RetryAfterReader)
9094
return compute.VirtualMachineScaleSet{}, rerr
9195
}
9296

9397
result, rerr := c.getVMSS(ctx, resourceGroupName, VMScaleSetName)
98+
mc.Observe(rerr.Error())
9499
if rerr != nil {
95100
if rerr.IsThrottled() {
96101
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
@@ -135,18 +140,23 @@ func (c *Client) getVMSS(ctx context.Context, resourceGroupName string, VMScaleS
135140

136141
// List gets a list of VirtualMachineScaleSets in the resource group.
137142
func (c *Client) List(ctx context.Context, resourceGroupName string) ([]compute.VirtualMachineScaleSet, *retry.Error) {
143+
mc := metrics.NewMetricContext("vmss", "list", resourceGroupName, c.subscriptionID, "")
144+
138145
// Report errors if the client is rate limited.
139146
if !c.rateLimiterReader.TryAccept() {
147+
mc.RateLimitedCount()
140148
return nil, retry.GetRateLimitError(false, "VMSSList")
141149
}
142150

143151
// Report errors if the client is throttled.
144152
if c.RetryAfterReader.After(time.Now()) {
153+
mc.ThrottledCount()
145154
rerr := retry.GetThrottlingError("VMSSList", "client throttled", c.RetryAfterReader)
146155
return nil, rerr
147156
}
148157

149158
result, rerr := c.listVMSS(ctx, resourceGroupName)
159+
mc.Observe(rerr.Error())
150160
if rerr != nil {
151161
if rerr.IsThrottled() {
152162
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
@@ -195,18 +205,23 @@ func (c *Client) listVMSS(ctx context.Context, resourceGroupName string) ([]comp
195205

196206
// CreateOrUpdate creates or updates a VirtualMachineScaleSet.
197207
func (c *Client) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet) *retry.Error {
208+
mc := metrics.NewMetricContext("vmss", "create_or_update", resourceGroupName, c.subscriptionID, "")
209+
198210
// Report errors if the client is rate limited.
199211
if !c.rateLimiterWriter.TryAccept() {
212+
mc.RateLimitedCount()
200213
return retry.GetRateLimitError(true, "VMSSCreateOrUpdate")
201214
}
202215

203216
// Report errors if the client is throttled.
204217
if c.RetryAfterWriter.After(time.Now()) {
218+
mc.ThrottledCount()
205219
rerr := retry.GetThrottlingError("VMSSCreateOrUpdate", "client throttled", c.RetryAfterWriter)
206220
return rerr
207221
}
208222

209223
rerr := c.createOrUpdateVMSS(ctx, resourceGroupName, VMScaleSetName, parameters)
224+
mc.Observe(rerr.Error())
210225
if rerr != nil {
211226
if rerr.IsThrottled() {
212227
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.

staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ go_library(
1414
"//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library",
1515
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
1616
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library",
17+
"//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library",
1718
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
1819
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library",
1920
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",

staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient/azure_vmssclientvm.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ import (
3333
"k8s.io/klog"
3434
azclients "k8s.io/legacy-cloud-providers/azure/clients"
3535
"k8s.io/legacy-cloud-providers/azure/clients/armclient"
36+
"k8s.io/legacy-cloud-providers/azure/metrics"
3637
"k8s.io/legacy-cloud-providers/azure/retry"
3738
)
3839

3940
var _ Interface = &Client{}
4041

4142
// Client implements VMSS client Interface.
42-
// TODO(feiskyer): export prometheus metrics for each API call.
4343
type Client struct {
4444
armClient armclient.Interface
4545
subscriptionID string
@@ -79,18 +79,23 @@ func New(config *azclients.ClientConfig) *Client {
7979

8080
// Get gets a VirtualMachineScaleSetVM.
8181
func (c *Client) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand compute.InstanceViewTypes) (compute.VirtualMachineScaleSetVM, *retry.Error) {
82+
mc := metrics.NewMetricContext("vmssvm", "get", resourceGroupName, c.subscriptionID, "")
83+
8284
// Report errors if the client is rate limited.
8385
if !c.rateLimiterReader.TryAccept() {
86+
mc.RateLimitedCount()
8487
return compute.VirtualMachineScaleSetVM{}, retry.GetRateLimitError(false, "VMSSVMGet")
8588
}
8689

8790
// Report errors if the client is throttled.
8891
if c.RetryAfterReader.After(time.Now()) {
92+
mc.ThrottledCount()
8993
rerr := retry.GetThrottlingError("VMSSVMGet", "client throttled", c.RetryAfterReader)
9094
return compute.VirtualMachineScaleSetVM{}, rerr
9195
}
9296

9397
result, rerr := c.getVMSSVM(ctx, resourceGroupName, VMScaleSetName, instanceID, expand)
98+
mc.Observe(rerr.Error())
9499
if rerr != nil {
95100
if rerr.IsThrottled() {
96101
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
@@ -137,18 +142,23 @@ func (c *Client) getVMSSVM(ctx context.Context, resourceGroupName string, VMScal
137142

138143
// List gets a list of VirtualMachineScaleSetVMs in the virtualMachineScaleSet.
139144
func (c *Client) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, expand string) ([]compute.VirtualMachineScaleSetVM, *retry.Error) {
145+
mc := metrics.NewMetricContext("vmssvm", "list", resourceGroupName, c.subscriptionID, "")
146+
140147
// Report errors if the client is rate limited.
141148
if !c.rateLimiterReader.TryAccept() {
149+
mc.RateLimitedCount()
142150
return nil, retry.GetRateLimitError(false, "VMSSVMList")
143151
}
144152

145153
// Report errors if the client is throttled.
146154
if c.RetryAfterReader.After(time.Now()) {
155+
mc.ThrottledCount()
147156
rerr := retry.GetThrottlingError("VMSSVMList", "client throttled", c.RetryAfterReader)
148157
return nil, rerr
149158
}
150159

151160
result, rerr := c.listVMSSVM(ctx, resourceGroupName, virtualMachineScaleSetName, expand)
161+
mc.Observe(rerr.Error())
152162
if rerr != nil {
153163
if rerr.IsThrottled() {
154164
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
@@ -200,18 +210,23 @@ func (c *Client) listVMSSVM(ctx context.Context, resourceGroupName string, virtu
200210

201211
// Update updates a VirtualMachineScaleSetVM.
202212
func (c *Client) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters compute.VirtualMachineScaleSetVM, source string) *retry.Error {
213+
mc := metrics.NewMetricContext("vmssvm", "update", resourceGroupName, c.subscriptionID, source)
214+
203215
// Report errors if the client is rate limited.
204216
if !c.rateLimiterWriter.TryAccept() {
217+
mc.RateLimitedCount()
205218
return retry.GetRateLimitError(true, "VMSSVMUpdate")
206219
}
207220

208221
// Report errors if the client is throttled.
209222
if c.RetryAfterWriter.After(time.Now()) {
223+
mc.ThrottledCount()
210224
rerr := retry.GetThrottlingError("VMSSVMUpdate", "client throttled", c.RetryAfterWriter)
211225
return rerr
212226
}
213227

214228
rerr := c.updateVMSSVM(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters)
229+
mc.Observe(rerr.Error())
215230
if rerr != nil {
216231
if rerr.IsThrottled() {
217232
// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = [
6+
"azure_metrics.go",
7+
"doc.go",
8+
],
9+
importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/metrics",
10+
importpath = "k8s.io/legacy-cloud-providers/azure/metrics",
11+
visibility = ["//visibility:public"],
12+
deps = [
13+
"//staging/src/k8s.io/component-base/metrics:go_default_library",
14+
"//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
15+
],
16+
)
17+
18+
go_test(
19+
name = "go_default_test",
20+
srcs = ["azure_metrics_test.go"],
21+
embed = [":go_default_library"],
22+
deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"],
23+
)
24+
25+
filegroup(
26+
name = "package-srcs",
27+
srcs = glob(["**"]),
28+
tags = ["automanaged"],
29+
visibility = ["//visibility:private"],
30+
)
31+
32+
filegroup(
33+
name = "all-srcs",
34+
srcs = [":package-srcs"],
35+
tags = ["automanaged"],
36+
visibility = ["//visibility:public"],
37+
)

vendor/modules.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,7 @@ k8s.io/legacy-cloud-providers/azure/clients
18421842
k8s.io/legacy-cloud-providers/azure/clients/armclient
18431843
k8s.io/legacy-cloud-providers/azure/clients/vmssclient
18441844
k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient
1845+
k8s.io/legacy-cloud-providers/azure/metrics
18451846
k8s.io/legacy-cloud-providers/azure/retry
18461847
k8s.io/legacy-cloud-providers/gce
18471848
k8s.io/legacy-cloud-providers/openstack

0 commit comments

Comments
 (0)