Skip to content

Commit 3173a1f

Browse files
committed
Introduce metrics library
1 parent 97cb2c2 commit 3173a1f

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ Install CSI Driver:
8585

8686
* `--leader-election-namespace <namespace>`: The namespace where the leader election resource exists. Defaults to the pod namespace if not set.
8787

88+
* `--metrics-address`: The TCP network address address where the prometheus metrics endpoint will run (example: `:8080` which corresponds to port 8080 on local host). The default is empty string, which means metrics endpoint is disabled.
89+
90+
* `--metrics-path`: The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.
91+
8892
#### Other recognized arguments
8993
* `--kubeconfig <path>`: Path to Kubernetes client configuration that the snapshot controller uses to connect to Kubernetes API server. When omitted, default token provided by Kubernetes will be used. This option is useful only when the snapshot controller does not run as a Kubernetes pod, e.g. for debugging.
9094

cmd/csi-snapshotter/main.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"github.com/container-storage-interface/spec/lib/go/csi"
3737
"github.com/kubernetes-csi/csi-lib-utils/connection"
3838
"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
39+
"github.com/kubernetes-csi/csi-lib-utils/metrics"
3940
csirpc "github.com/kubernetes-csi/csi-lib-utils/rpc"
4041
controller "github.com/kubernetes-csi/external-snapshotter/pkg/sidecar-controller"
4142
"github.com/kubernetes-csi/external-snapshotter/pkg/snapshotter"
@@ -66,6 +67,9 @@ var (
6667

6768
leaderElection = flag.Bool("leader-election", false, "Enables leader election.")
6869
leaderElectionNamespace = flag.String("leader-election-namespace", "", "The namespace where the leader election resource exists. Defaults to the pod namespace if not set.")
70+
71+
metricsAddress = flag.String("metrics-address", "", "The TCP network address address where the prometheus metrics endpoint will listen (example: `:8080`). The default is empty string, which means metrics endpoint is disabled.")
72+
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")
6973
)
7074

7175
var (
@@ -110,7 +114,11 @@ func main() {
110114
snapshotscheme.AddToScheme(scheme.Scheme)
111115

112116
// Connect to CSI.
113-
csiConn, err := connection.Connect(*csiAddress, connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
117+
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
118+
csiConn, err := connection.Connect(
119+
*csiAddress,
120+
metricsManager,
121+
connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
114122
if err != nil {
115123
klog.Errorf("error connecting to CSI driver: %v", err)
116124
os.Exit(1)
@@ -128,6 +136,8 @@ func main() {
128136
}
129137

130138
klog.V(2).Infof("CSI driver name: %q", driverName)
139+
metricsManager.SetDriverName(driverName)
140+
metricsManager.StartMetricsEndpoint(*metricsAddress, *metricsPath)
131141

132142
// Check it's ready
133143
if err = csirpc.ProbeForever(csiConn, *csiTimeout); err != nil {

cmd/csi-snapshotter/main_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/container-storage-interface/spec/lib/go/csi"
2525
"github.com/golang/mock/gomock"
2626
"github.com/kubernetes-csi/csi-lib-utils/connection"
27+
"github.com/kubernetes-csi/csi-lib-utils/metrics"
2728
"github.com/kubernetes-csi/csi-test/driver"
2829

2930
"google.golang.org/grpc"
@@ -144,6 +145,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
144145
mockController := gomock.NewController(t)
145146
identityServer := driver.NewMockIdentityServer(mockController)
146147
controllerServer := driver.NewMockControllerServer(mockController)
148+
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
147149
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
148150
Identity: identityServer,
149151
Controller: controllerServer,
@@ -152,7 +154,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
152154

153155
// Create a client connection to it
154156
addr := drv.Address()
155-
csiConn, err := connection.Connect(addr)
157+
csiConn, err := connection.Connect(addr, metricsManager)
156158
if err != nil {
157159
return nil, nil, nil, nil, nil, err
158160
}

pkg/snapshotter/snapshotter_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@ import (
2727
"github.com/golang/mock/gomock"
2828
"github.com/golang/protobuf/ptypes"
2929
"github.com/kubernetes-csi/csi-lib-utils/connection"
30+
"github.com/kubernetes-csi/csi-lib-utils/metrics"
3031
"github.com/kubernetes-csi/csi-test/driver"
3132

3233
"google.golang.org/grpc"
3334
"google.golang.org/grpc/codes"
3435
"google.golang.org/grpc/status"
3536

36-
"k8s.io/api/core/v1"
37+
v1 "k8s.io/api/core/v1"
3738
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3839
"k8s.io/apimachinery/pkg/types"
3940
)
@@ -47,6 +48,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
4748
mockController := gomock.NewController(t)
4849
identityServer := driver.NewMockIdentityServer(mockController)
4950
controllerServer := driver.NewMockControllerServer(mockController)
51+
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
5052
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
5153
Identity: identityServer,
5254
Controller: controllerServer,
@@ -55,7 +57,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
5557

5658
// Create a client connection to it
5759
addr := drv.Address()
58-
csiConn, err := connection.Connect(addr)
60+
csiConn, err := connection.Connect(addr, metricsManager)
5961
if err != nil {
6062
return nil, nil, nil, nil, nil, err
6163
}

0 commit comments

Comments
 (0)