From 86ce2a15b092eb4f58759d71fb833d965ae1fa9d Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Tue, 17 Oct 2023 11:15:06 +0000 Subject: [PATCH] feat: add node metrics --- .../latest/azurefile-csi-driver-v1.29.0.tgz | Bin 13342 -> 13365 bytes ...si-azurefile-node-windows-hostprocess.yaml | 1 + .../templates/csi-azurefile-node-windows.yaml | 1 + .../templates/csi-azurefile-node.yaml | 1 + .../latest/azurefile-csi-driver/values.yaml | 1 + ...si-azurefile-node-windows-hostprocess.yaml | 1 + deploy/csi-azurefile-node-windows.yaml | 1 + deploy/csi-azurefile-node.yaml | 1 + pkg/azurefile/nodeserver.go | 23 ++++++++++++++++++ 9 files changed, 30 insertions(+) diff --git a/charts/latest/azurefile-csi-driver-v1.29.0.tgz b/charts/latest/azurefile-csi-driver-v1.29.0.tgz index f8a9ece26226b856e77fe8f145b5028c1ce2f86a..7ee7a8fd29958f5739a292c86ae79d7986f28efb 100644 GIT binary patch delta 13195 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 delta 13179 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 diff --git a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows-hostprocess.yaml b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows-hostprocess.yaml index 0e2e6b9639..644eef5cec 100644 --- a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows-hostprocess.yaml +++ b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows-hostprocess.yaml @@ -124,6 +124,7 @@ spec: - "--allow-empty-cloud-config={{ .Values.node.allowEmptyCloudConfig }}" - "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}" - "--enable-windows-host-process=true" + - "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}" env: - name: AZURE_CREDENTIAL_FILE valueFrom: diff --git a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml index d7cf19b25e..f171603d73 100644 --- a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml +++ b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml @@ -137,6 +137,7 @@ spec: - "--allow-empty-cloud-config={{ .Values.node.allowEmptyCloudConfig }}" - "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}" - "--allow-inline-volume-key-access-with-identity={{ .Values.node.allowInlineVolumeKeyAccessWithIdentity }}" + - "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}" ports: - containerPort: {{ .Values.node.livenessProbe.healthPort }} name: healthz diff --git a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node.yaml b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node.yaml index 1998b824cb..57b04d149c 100644 --- a/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node.yaml +++ b/charts/latest/azurefile-csi-driver/templates/csi-azurefile-node.yaml @@ -135,6 +135,7 @@ spec: - "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}" - "--mount-permissions={{ .Values.linux.mountPermissions }}" - "--allow-inline-volume-key-access-with-identity={{ .Values.node.allowInlineVolumeKeyAccessWithIdentity }}" + - "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}" ports: - containerPort: {{ .Values.node.livenessProbe.healthPort }} name: healthz diff --git a/charts/latest/azurefile-csi-driver/values.yaml b/charts/latest/azurefile-csi-driver/values.yaml index cbe58a2a83..b8bd4cb990 100644 --- a/charts/latest/azurefile-csi-driver/values.yaml +++ b/charts/latest/azurefile-csi-driver/values.yaml @@ -124,6 +124,7 @@ node: cloudConfigSecretNamespace: kube-system allowEmptyCloudConfig: true allowInlineVolumeKeyAccessWithIdentity: false + metricsPort: 29615 livenessProbe: healthPort: 29613 logLevel: 5 diff --git a/deploy/csi-azurefile-node-windows-hostprocess.yaml b/deploy/csi-azurefile-node-windows-hostprocess.yaml index 08fe04b94b..3ee7e5e381 100644 --- a/deploy/csi-azurefile-node-windows-hostprocess.yaml +++ b/deploy/csi-azurefile-node-windows-hostprocess.yaml @@ -87,6 +87,7 @@ spec: - --endpoint=$(CSI_ENDPOINT) - --nodeid=$(KUBE_NODE_NAME) - --enable-windows-host-process=true + - --metrics-address="0.0.0.0:29615" env: - name: AZURE_CREDENTIAL_FILE valueFrom: diff --git a/deploy/csi-azurefile-node-windows.yaml b/deploy/csi-azurefile-node-windows.yaml index 8db3f612f0..e09a03c66f 100644 --- a/deploy/csi-azurefile-node-windows.yaml +++ b/deploy/csi-azurefile-node-windows.yaml @@ -100,6 +100,7 @@ spec: - --v=5 - --endpoint=$(CSI_ENDPOINT) - --nodeid=$(KUBE_NODE_NAME) + - --metrics-address="0.0.0.0:29615" ports: - containerPort: 29613 name: healthz diff --git a/deploy/csi-azurefile-node.yaml b/deploy/csi-azurefile-node.yaml index bd6bf671b3..749d39f95e 100644 --- a/deploy/csi-azurefile-node.yaml +++ b/deploy/csi-azurefile-node.yaml @@ -91,6 +91,7 @@ spec: - "--v=5" - "--endpoint=$(CSI_ENDPOINT)" - "--nodeid=$(KUBE_NODE_NAME)" + - "--metrics-address=0.0.0.0:29615" ports: - containerPort: 29613 name: healthz diff --git a/pkg/azurefile/nodeserver.go b/pkg/azurefile/nodeserver.go index 17404fe0ae..38a175aad5 100644 --- a/pkg/azurefile/nodeserver.go +++ b/pkg/azurefile/nodeserver.go @@ -37,6 +37,7 @@ import ( "golang.org/x/net/context" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/metrics" ) // NodePublishVolume mount the volume from staging to target path @@ -158,6 +159,12 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe volumeMountGroup := req.GetVolumeCapability().GetMount().GetVolumeMountGroup() gidPresent := checkGidPresentInMountFlags(mountFlags) + mc := metrics.NewMetricContext(azureFileCSIDriverName, "node_stage_volume", d.cloud.ResourceGroup, "", d.Name) + isOperationSucceeded := false + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded, VolumeID, volumeID) + }() + _, accountName, accountKey, fileShareName, diskName, _, err := d.GetAccountInfo(ctx, volumeID, req.GetSecrets(), context) if err != nil { return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("GetAccountInfo(%s) failed with error: %v", volumeID, err)) @@ -369,6 +376,8 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe } } } + + isOperationSucceeded = true return &csi.NodeStageVolumeResponse{}, nil } @@ -388,6 +397,12 @@ func (d *Driver) NodeUnstageVolume(ctx context.Context, req *csi.NodeUnstageVolu } defer d.volumeLocks.Release(volumeID) + mc := metrics.NewMetricContext(azureFileCSIDriverName, "node_unstage_volume", d.cloud.ResourceGroup, "", d.Name) + isOperationSucceeded := false + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded, VolumeID, volumeID) + }() + klog.V(2).Infof("NodeUnstageVolume: CleanupMountPoint volume %s on %s", volumeID, stagingTargetPath) if err := CleanupMountPoint(d.mounter, stagingTargetPath, true /*extensiveMountPointCheck*/); err != nil { return nil, status.Errorf(codes.Internal, "failed to unmount staging target %s: %v", stagingTargetPath, err) @@ -400,6 +415,7 @@ func (d *Driver) NodeUnstageVolume(ctx context.Context, req *csi.NodeUnstageVolu } klog.V(2).Infof("NodeUnstageVolume: unmount volume %s on %s successfully", volumeID, stagingTargetPath) + isOperationSucceeded = true return &csi.NodeUnstageVolumeResponse{}, nil } @@ -472,6 +488,12 @@ func (d *Driver) NodeGetVolumeStats(ctx context.Context, req *csi.NodeGetVolumeS klog.V(6).Infof("NodeGetVolumeStats: begin to get VolumeStats on volume %s path %s", req.VolumeId, req.VolumePath) } + mc := metrics.NewMetricContext(azureFileCSIDriverName, "node_get_volume_stats", d.cloud.ResourceGroup, "", d.Name) + isOperationSucceeded := false + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded, VolumeID, req.VolumeId) + }() + resp, err := GetVolumeStats(req.VolumePath, d.enableWindowsHostProcess) if err == nil && resp != nil { if d.printVolumeStatsCallLogs { @@ -485,6 +507,7 @@ func (d *Driver) NodeGetVolumeStats(ctx context.Context, req *csi.NodeGetVolumeS d.volStatsCache.Set(newVolID, *resp) } } + isOperationSucceeded = true return resp, err }