Skip to content

Commit f81fd07

Browse files
authored
Merge pull request #201 from saad-ali/addMetricsUsingLib
Add prometheus metrics to CSI external-attacher using new csi-lib-utils library
2 parents 2d2ab15 + c410f10 commit f81fd07

File tree

932 files changed

+231140
-83935
lines changed

Some content is hidden

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

932 files changed

+231140
-83935
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ Note that the external-attacher does not scale with more replicas. Only one exte
6767

6868
* `--retry-interval-max`: The exponential backoff maximum value. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details. 5 minutes is used by default.
6969

70+
* `--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.
71+
72+
* `--metrics-path`: The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.
73+
7074
#### Other recognized arguments
7175
* `--kubeconfig <path>`: Path to Kubernetes client configuration that the external-attacher uses to connect to Kubernetes API server. When omitted, default token provided by Kubernetes will be used. This option is useful only when the external-attacher does not run as a Kubernetes pod, e.g. for debugging.
7276

cmd/csi-attacher/main.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/container-storage-interface/spec/lib/go/csi"
3535
"github.com/kubernetes-csi/csi-lib-utils/connection"
3636
"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
37+
"github.com/kubernetes-csi/csi-lib-utils/metrics"
3738
"github.com/kubernetes-csi/csi-lib-utils/rpc"
3839
"github.com/kubernetes-csi/external-attacher/pkg/attacher"
3940
"github.com/kubernetes-csi/external-attacher/pkg/controller"
@@ -65,6 +66,9 @@ var (
6566
leaderElectionNamespace = flag.String("leader-election-namespace", "", "Namespace where the leader election resource lives. Defaults to the pod namespace if not set.")
6667

6768
reconcileSync = flag.Duration("reconcile-sync", 1*time.Minute, "Resync interval of the VolumeAttachment reconciler.")
69+
70+
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.")
71+
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")
6872
)
6973

7074
var (
@@ -107,8 +111,10 @@ func main() {
107111

108112
factory := informers.NewSharedInformerFactory(clientset, *resync)
109113
var handler controller.Handler
114+
metricsManager := metrics.NewCSIMetricsManager("" /* driverName */)
115+
110116
// Connect to CSI.
111-
csiConn, err := connection.Connect(*csiAddress, connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
117+
csiConn, err := connection.Connect(*csiAddress, metricsManager, connection.OnConnectionLoss(connection.ExitOnConnectionLoss()))
112118
if err != nil {
113119
klog.Error(err.Error())
114120
os.Exit(1)
@@ -129,6 +135,8 @@ func main() {
129135
os.Exit(1)
130136
}
131137
klog.V(2).Infof("CSI driver name: %q", csiAttacher)
138+
metricsManager.SetDriverName(csiAttacher)
139+
metricsManager.StartMetricsEndpoint(*metricsAddress, *metricsPath)
132140

133141
supportsService, err := supportsPluginControllerService(ctx, csiConn)
134142
if err != nil {

go.mod

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,69 +5,56 @@ go 1.12
55
require (
66
github.com/container-storage-interface/spec v1.2.0
77
github.com/davecgh/go-spew v1.1.1
8-
github.com/evanphx/json-patch v4.2.0+incompatible
9-
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect
8+
github.com/evanphx/json-patch v4.5.0+incompatible
109
github.com/golang/mock v1.2.0
11-
github.com/golang/protobuf v1.3.1
12-
github.com/googleapis/gnostic v0.2.0 // indirect
10+
github.com/golang/protobuf v1.3.2
1311
github.com/imdario/mergo v0.3.7 // indirect
14-
github.com/kubernetes-csi/csi-lib-utils v0.6.1
12+
github.com/kubernetes-csi/csi-lib-utils v0.7.0
1513
github.com/kubernetes-csi/csi-test v2.0.0+incompatible
16-
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 // indirect
17-
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // indirect
18-
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
19-
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7 // indirect
20-
google.golang.org/grpc v1.19.1
21-
gopkg.in/inf.v0 v0.9.1 // indirect
22-
k8s.io/api v0.0.0-20191005115622-2e41325d9e4b
23-
k8s.io/apimachinery v0.0.0-20191006235458-f9f2f3f8ab02
24-
k8s.io/client-go v0.0.0-20190918200256-06eb1244587a
25-
k8s.io/csi-translation-lib v0.0.0-20191009030015-17db17aaadeb
14+
google.golang.org/grpc v1.26.0
15+
k8s.io/api v0.17.0
16+
k8s.io/apimachinery v0.17.1-beta.0
17+
k8s.io/client-go v0.17.0
18+
k8s.io/csi-translation-lib v0.17.0
2619
k8s.io/klog v1.0.0
2720
)
2821

29-
replace k8s.io/api => k8s.io/api v0.0.0-20190918195907-bd6ac527cfd2
22+
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.17.0
3023

31-
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20190918201827-3de75813f604
24+
replace k8s.io/apiserver => k8s.io/apiserver v0.17.0
3225

33-
replace k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190817020851-f2f3a405f61d
26+
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.17.0
3427

35-
replace k8s.io/apiserver => k8s.io/apiserver v0.0.0-20190918200908-1e17798da8c1
28+
replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.0
3629

37-
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20190918202139-0b14c719ca62
30+
replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.0
3831

39-
replace k8s.io/client-go => k8s.io/client-go v0.0.0-20190918200256-06eb1244587a
32+
replace k8s.io/code-generator => k8s.io/code-generator v0.17.1-beta.0
4033

41-
replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20190918203125-ae665f80358a
34+
replace k8s.io/component-base => k8s.io/component-base v0.17.0
4235

43-
replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.0.0-20190918202959-c340507a5d48
36+
replace k8s.io/cri-api => k8s.io/cri-api v0.17.1-beta.0
4437

45-
replace k8s.io/code-generator => k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b
38+
replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.17.0
4639

47-
replace k8s.io/component-base => k8s.io/component-base v0.0.0-20190918200425-ed2f0867c778
40+
replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.17.0
4841

49-
replace k8s.io/cri-api => k8s.io/cri-api v0.0.0-20190817025403-3ae76f584e79
42+
replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.17.0
5043

51-
replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.0.0-20190918201136-c3a845f1fbb2
44+
replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.17.0
5245

53-
replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.0.0-20190918202837-c54ce30c680e
46+
replace k8s.io/kubectl => k8s.io/kubectl v0.17.0
5447

55-
replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.0.0-20190918202429-08c8357f8e2d
48+
replace k8s.io/kubelet => k8s.io/kubelet v0.17.0
5649

57-
replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.0.0-20190918202713-c34a54b3ec8e
50+
replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.17.0
5851

59-
replace k8s.io/kubectl => k8s.io/kubectl v0.0.0-20190602132728-7075c07e78bf
52+
replace k8s.io/metrics => k8s.io/metrics v0.17.0
6053

61-
replace k8s.io/kubelet => k8s.io/kubelet v0.0.0-20190918202550-958285cf3eef
54+
replace k8s.io/node-api => k8s.io/node-api v0.17.0
6255

63-
replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20190918203421-225f0541b3ea
56+
replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.17.0
6457

65-
replace k8s.io/metrics => k8s.io/metrics v0.0.0-20190918202012-3c1ca76f5bda
58+
replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.17.0
6659

67-
replace k8s.io/node-api => k8s.io/node-api v0.0.0-20190918203548-2c4c2679bece
68-
69-
replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.0.0-20190918201353-5cc279503896
70-
71-
replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.0.0-20190918202305-ed68a9f09ae1
72-
73-
replace k8s.io/sample-controller => k8s.io/sample-controller v0.0.0-20190918201537-fabef0de90df
60+
replace k8s.io/sample-controller => k8s.io/sample-controller v0.17.0

0 commit comments

Comments
 (0)