Skip to content

Commit 86c4605

Browse files
authored
Merge pull request #388 from saad-ali/addMetricsUsingLib2
Add prometheus metrics to CSI external-provisioner using new csi-lib-utils library
2 parents 2127c90 + e73400e commit 86c4605

File tree

1,068 files changed

+216140
-84966
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,068 files changed

+216140
-84966
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,16 @@ Note that the external-provisioner does not scale with more replicas. Only one e
5555

5656
* `--timeout <duration>`: Timeout of all calls to CSI driver. It should be set to value that accommodates majority of `ControllerCreateVolume` and `ControllerDeleteVolume` calls. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details. 15 seconds is used by default.
5757

58-
* `--retry-interval-start <duration>` - Initial retry interval of failed provisioning or deletion. It doubles with each failure, up to `--retry-interval-max` and then it stops increasing. Default value is 1 second. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details.
58+
* `--retry-interval-start <duration>`: Initial retry interval of failed provisioning or deletion. It doubles with each failure, up to `--retry-interval-max` and then it stops increasing. Default value is 1 second. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details.
5959

60-
* `--retry-interval-max <duration>` - Maximum retry interval of failed provisioning or deletion. Default value is 5 minutes. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details.
60+
* `--retry-interval-max <duration>`: Maximum retry interval of failed provisioning or deletion. Default value is 5 minutes. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details.
6161

6262
* `--worker-threads <num>`: Number of simultaneously running `ControllerCreateVolume` and `ControllerDeleteVolume` operations. Default value is `100`.
6363

64+
* `--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.
65+
66+
* `--metrics-path`: The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.
67+
6468
#### Other recognized arguments
6569
* `--feature-gates <gates>`: A set of comma separated `<feature-name>=<true|false>` pairs that describe feature gates for alpha/experimental features. See [list of features](#feature-status) or `--help` output for list of recognized features. Example: `--feature-gates Topology=true` to enable Topology feature that's disabled by default.
6670

cmd/csi-provisioner/csi-provisioner.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
"github.com/kubernetes-csi/csi-lib-utils/deprecatedflags"
3232
"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
33+
"github.com/kubernetes-csi/csi-lib-utils/metrics"
3334
ctrl "github.com/kubernetes-csi/external-provisioner/pkg/controller"
3435
snapclientset "github.com/kubernetes-csi/external-snapshotter/pkg/client/clientset/versioned"
3536
"sigs.k8s.io/sig-storage-lib-external-provisioner/controller"
@@ -43,7 +44,7 @@ import (
4344

4445
utilfeature "k8s.io/apiserver/pkg/util/feature"
4546
"k8s.io/client-go/informers"
46-
"k8s.io/client-go/listers/core/v1"
47+
v1 "k8s.io/client-go/listers/core/v1"
4748
storagelisters "k8s.io/client-go/listers/storage/v1beta1"
4849
utilflag "k8s.io/component-base/cli/flag"
4950
csitrans "k8s.io/csi-translation-lib"
@@ -68,6 +69,9 @@ var (
6869
leaderElectionNamespace = flag.String("leader-election-namespace", "", "Namespace where the leader election resource lives. Defaults to the pod namespace if not set.")
6970
strictTopology = flag.Bool("strict-topology", false, "Passes only selected node topology to CreateVolume Request, unlike default behavior of passing aggregated cluster topologies that match with topology keys of the selected node.")
7071

72+
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.")
73+
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")
74+
7175
featureGates map[string]bool
7276
provisionController *controller.ProvisionController
7377
version = "unknown"
@@ -135,7 +139,9 @@ func main() {
135139
klog.Fatalf("Error getting server version: %v", err)
136140
}
137141

138-
grpcClient, err := ctrl.Connect(*csiEndpoint)
142+
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
143+
144+
grpcClient, err := ctrl.Connect(*csiEndpoint, metricsManager)
139145
if err != nil {
140146
klog.Error(err.Error())
141147
os.Exit(1)
@@ -153,6 +159,8 @@ func main() {
153159
klog.Fatalf("Error getting CSI driver name: %s", err)
154160
}
155161
klog.V(2).Infof("Detected CSI driver %s", provisionerName)
162+
metricsManager.SetDriverName(provisionerName)
163+
metricsManager.StartMetricsEndpoint(*metricsAddress, *metricsPath)
156164

157165
pluginCapabilities, controllerCapabilities, err := ctrl.GetDriverCapabilities(grpcClient, *operationTimeout)
158166
if err != nil {

go.mod

Lines changed: 28 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,75 +4,56 @@ go 1.12
44

55
require (
66
github.com/container-storage-interface/spec v1.1.0
7-
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect
87
github.com/golang/mock v1.2.0
9-
github.com/google/go-cmp v0.3.1 // indirect
10-
github.com/googleapis/gnostic v0.2.0 // indirect
11-
github.com/imdario/mergo v0.3.7 // indirect
12-
github.com/kubernetes-csi/csi-lib-utils v0.6.1
8+
github.com/kubernetes-csi/csi-lib-utils v0.7.0
139
github.com/kubernetes-csi/csi-test v2.0.0+incompatible
14-
github.com/kubernetes-csi/external-snapshotter v2.0.0-rc1.0.20191024235139-bc6e42db5bc6+incompatible
10+
github.com/kubernetes-csi/external-snapshotter v1.2.1-0.20191220180133-bba358438aee
1511
github.com/miekg/dns v1.1.8 // indirect
16-
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 // indirect
17-
github.com/prometheus/common v0.2.0 // indirect
18-
github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872 // indirect
19-
github.com/spf13/pflag v1.0.3
20-
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
21-
google.golang.org/grpc v1.19.1
22-
gopkg.in/inf.v0 v0.9.1 // indirect
23-
k8s.io/api v0.0.0-20191005115622-2e41325d9e4b
24-
k8s.io/apimachinery v0.0.0-20191006235458-f9f2f3f8ab02
25-
k8s.io/apiserver v0.0.0-20190918200908-1e17798da8c1
26-
k8s.io/client-go v0.0.0-20190918200256-06eb1244587a
27-
k8s.io/component-base v0.0.0-20190918200425-ed2f0867c778
28-
k8s.io/csi-translation-lib v0.0.0-20191009030015-17db17aaadeb
12+
github.com/spf13/pflag v1.0.5
13+
google.golang.org/grpc v1.26.0
14+
k8s.io/api v0.17.0
15+
k8s.io/apimachinery v0.17.1-beta.0
16+
k8s.io/apiserver v0.17.0
17+
k8s.io/client-go v0.17.0
18+
k8s.io/component-base v0.17.0
19+
k8s.io/csi-translation-lib v0.17.0
2920
k8s.io/klog v1.0.0
3021
k8s.io/kubernetes v1.14.0
3122
sigs.k8s.io/sig-storage-lib-external-provisioner v4.0.1+incompatible
3223
)
3324

34-
replace k8s.io/api => k8s.io/api v0.0.0-20190918195907-bd6ac527cfd2
25+
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.17.0
3526

36-
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20190918201827-3de75813f604
27+
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.17.0
3728

38-
replace k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190817020851-f2f3a405f61d
29+
replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.0
3930

40-
replace k8s.io/apiserver => k8s.io/apiserver v0.0.0-20190918200908-1e17798da8c1
31+
replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.0
4132

42-
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20190918202139-0b14c719ca62
33+
replace k8s.io/code-generator => k8s.io/code-generator v0.17.1-beta.0
4334

44-
replace k8s.io/client-go => k8s.io/client-go v0.0.0-20190918200256-06eb1244587a
35+
replace k8s.io/cri-api => k8s.io/cri-api v0.17.1-beta.0
4536

46-
replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20190918203125-ae665f80358a
37+
replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.17.0
4738

48-
replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.0.0-20190918202959-c340507a5d48
39+
replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.17.0
4940

50-
replace k8s.io/code-generator => k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b
41+
replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.17.0
5142

52-
replace k8s.io/component-base => k8s.io/component-base v0.0.0-20190918200425-ed2f0867c778
43+
replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.17.0
5344

54-
replace k8s.io/cri-api => k8s.io/cri-api v0.0.0-20190817025403-3ae76f584e79
45+
replace k8s.io/kubectl => k8s.io/kubectl v0.17.0
5546

56-
replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.0.0-20190918201136-c3a845f1fbb2
47+
replace k8s.io/kubelet => k8s.io/kubelet v0.17.0
5748

58-
replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.0.0-20190918202837-c54ce30c680e
49+
replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.17.0
5950

60-
replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.0.0-20190918202429-08c8357f8e2d
51+
replace k8s.io/metrics => k8s.io/metrics v0.17.0
6152

62-
replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.0.0-20190918202713-c34a54b3ec8e
53+
replace k8s.io/node-api => k8s.io/node-api v0.17.0
6354

64-
replace k8s.io/kubectl => k8s.io/kubectl v0.0.0-20190602132728-7075c07e78bf
55+
replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.17.0
6556

66-
replace k8s.io/kubelet => k8s.io/kubelet v0.0.0-20190918202550-958285cf3eef
57+
replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.17.0
6758

68-
replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20190918203421-225f0541b3ea
69-
70-
replace k8s.io/metrics => k8s.io/metrics v0.0.0-20190918202012-3c1ca76f5bda
71-
72-
replace k8s.io/node-api => k8s.io/node-api v0.0.0-20190918203548-2c4c2679bece
73-
74-
replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.0.0-20190918201353-5cc279503896
75-
76-
replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.0.0-20190918202305-ed68a9f09ae1
77-
78-
replace k8s.io/sample-controller => k8s.io/sample-controller v0.0.0-20190918201537-fabef0de90df
59+
replace k8s.io/sample-controller => k8s.io/sample-controller v0.17.0

0 commit comments

Comments
 (0)