Introduce metrics library
This commit is contained in:
@@ -85,6 +85,10 @@ Install CSI Driver:
|
|||||||
|
|
||||||
* `--leader-election-namespace <namespace>`: The namespace where the leader election resource exists. Defaults to the pod namespace if not set.
|
* `--leader-election-namespace <namespace>`: The namespace where the leader election resource exists. Defaults to the pod namespace if not set.
|
||||||
|
|
||||||
|
* `--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.
|
||||||
|
|
||||||
|
* `--metrics-path`: The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.
|
||||||
|
|
||||||
#### Other recognized arguments
|
#### Other recognized arguments
|
||||||
* `--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.
|
* `--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.
|
||||||
|
|
||||||
|
@@ -36,6 +36,7 @@ import (
|
|||||||
"github.com/container-storage-interface/spec/lib/go/csi"
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
||||||
"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
|
"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
|
||||||
|
"github.com/kubernetes-csi/csi-lib-utils/metrics"
|
||||||
csirpc "github.com/kubernetes-csi/csi-lib-utils/rpc"
|
csirpc "github.com/kubernetes-csi/csi-lib-utils/rpc"
|
||||||
controller "github.com/kubernetes-csi/external-snapshotter/pkg/sidecar-controller"
|
controller "github.com/kubernetes-csi/external-snapshotter/pkg/sidecar-controller"
|
||||||
"github.com/kubernetes-csi/external-snapshotter/pkg/snapshotter"
|
"github.com/kubernetes-csi/external-snapshotter/pkg/snapshotter"
|
||||||
@@ -66,6 +67,9 @@ var (
|
|||||||
|
|
||||||
leaderElection = flag.Bool("leader-election", false, "Enables leader election.")
|
leaderElection = flag.Bool("leader-election", false, "Enables leader election.")
|
||||||
leaderElectionNamespace = flag.String("leader-election-namespace", "", "The namespace where the leader election resource exists. Defaults to the pod namespace if not set.")
|
leaderElectionNamespace = flag.String("leader-election-namespace", "", "The namespace where the leader election resource exists. Defaults to the pod namespace if not set.")
|
||||||
|
|
||||||
|
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.")
|
||||||
|
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -110,7 +114,11 @@ func main() {
|
|||||||
snapshotscheme.AddToScheme(scheme.Scheme)
|
snapshotscheme.AddToScheme(scheme.Scheme)
|
||||||
|
|
||||||
// Connect to CSI.
|
// Connect to CSI.
|
||||||
csiConn, err := connection.Connect(*csiAddress, connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
|
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
|
||||||
|
csiConn, err := connection.Connect(
|
||||||
|
*csiAddress,
|
||||||
|
metricsManager,
|
||||||
|
connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("error connecting to CSI driver: %v", err)
|
klog.Errorf("error connecting to CSI driver: %v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -128,6 +136,8 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
klog.V(2).Infof("CSI driver name: %q", driverName)
|
klog.V(2).Infof("CSI driver name: %q", driverName)
|
||||||
|
metricsManager.SetDriverName(driverName)
|
||||||
|
metricsManager.StartMetricsEndpoint(*metricsAddress, *metricsPath)
|
||||||
|
|
||||||
// Check it's ready
|
// Check it's ready
|
||||||
if err = csirpc.ProbeForever(csiConn, *csiTimeout); err != nil {
|
if err = csirpc.ProbeForever(csiConn, *csiTimeout); err != nil {
|
||||||
|
@@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/container-storage-interface/spec/lib/go/csi"
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
||||||
|
"github.com/kubernetes-csi/csi-lib-utils/metrics"
|
||||||
"github.com/kubernetes-csi/csi-test/driver"
|
"github.com/kubernetes-csi/csi-test/driver"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
@@ -144,6 +145,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
|
|||||||
mockController := gomock.NewController(t)
|
mockController := gomock.NewController(t)
|
||||||
identityServer := driver.NewMockIdentityServer(mockController)
|
identityServer := driver.NewMockIdentityServer(mockController)
|
||||||
controllerServer := driver.NewMockControllerServer(mockController)
|
controllerServer := driver.NewMockControllerServer(mockController)
|
||||||
|
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
|
||||||
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
|
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
|
||||||
Identity: identityServer,
|
Identity: identityServer,
|
||||||
Controller: controllerServer,
|
Controller: controllerServer,
|
||||||
@@ -152,7 +154,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
|
|||||||
|
|
||||||
// Create a client connection to it
|
// Create a client connection to it
|
||||||
addr := drv.Address()
|
addr := drv.Address()
|
||||||
csiConn, err := connection.Connect(addr)
|
csiConn, err := connection.Connect(addr, metricsManager)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
@@ -27,13 +27,14 @@ import (
|
|||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/golang/protobuf/ptypes"
|
"github.com/golang/protobuf/ptypes"
|
||||||
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
"github.com/kubernetes-csi/csi-lib-utils/connection"
|
||||||
|
"github.com/kubernetes-csi/csi-lib-utils/metrics"
|
||||||
"github.com/kubernetes-csi/csi-test/driver"
|
"github.com/kubernetes-csi/csi-test/driver"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
)
|
)
|
||||||
@@ -47,6 +48,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
|
|||||||
mockController := gomock.NewController(t)
|
mockController := gomock.NewController(t)
|
||||||
identityServer := driver.NewMockIdentityServer(mockController)
|
identityServer := driver.NewMockIdentityServer(mockController)
|
||||||
controllerServer := driver.NewMockControllerServer(mockController)
|
controllerServer := driver.NewMockControllerServer(mockController)
|
||||||
|
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
|
||||||
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
|
drv := driver.NewMockCSIDriver(&driver.MockCSIDriverServers{
|
||||||
Identity: identityServer,
|
Identity: identityServer,
|
||||||
Controller: controllerServer,
|
Controller: controllerServer,
|
||||||
@@ -55,7 +57,7 @@ func createMockServer(t *testing.T) (*gomock.Controller, *driver.MockCSIDriver,
|
|||||||
|
|
||||||
// Create a client connection to it
|
// Create a client connection to it
|
||||||
addr := drv.Address()
|
addr := drv.Address()
|
||||||
csiConn, err := connection.Connect(addr)
|
csiConn, err := connection.Connect(addr, metricsManager)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user