@@ -34,15 +34,71 @@ import (
3434func LabelsForExporterServiceMonitor (deploymentName string ) map [string ]string {
3535 return map [string ]string {
3636 k8sutil .LabelKeyArangoDeployment : deploymentName ,
37- k8sutil .LabelKeyApp : "arango-exporter" ,
37+ k8sutil .LabelKeyApp : k8sutil . AppName ,
3838 "context" : "metrics" ,
3939 }
4040}
4141
4242func LabelsForExporterServiceMonitorSelector (deploymentName string ) map [string ]string {
4343 return map [string ]string {
4444 k8sutil .LabelKeyArangoDeployment : deploymentName ,
45- k8sutil .LabelKeyApp : "arangodb" ,
45+ k8sutil .LabelKeyApp : k8sutil .AppName ,
46+ }
47+ }
48+
49+ // EnsureMonitoringClient returns a client for looking at ServiceMonitors
50+ // and keeps it in the Resources.
51+ func (r * Resources ) EnsureMonitoringClient () (* clientv1.MonitoringV1Client , error ) {
52+ if r .monitoringClient != nil {
53+ return r .monitoringClient , nil
54+ }
55+
56+ // Make a client:
57+ var restConfig * rest.Config
58+ restConfig , err := k8sutil .InClusterConfig ()
59+ if err != nil {
60+ return nil , maskAny (err )
61+ }
62+ mClient , err := clientv1 .NewForConfig (restConfig )
63+ if err != nil {
64+ return nil , maskAny (err )
65+ }
66+ r .monitoringClient = mClient
67+ return mClient , nil
68+ }
69+
70+ func (r * Resources ) makeEndpoint (isSecure bool ) coreosv1.Endpoint {
71+ if isSecure {
72+ kubecli := r .context .GetKubeCli ()
73+ ns := r .context .GetNamespace ()
74+ secrets := k8sutil .NewSecretCache (kubecli .CoreV1 ().Secrets (ns ))
75+ spec := r .context .GetSpec ()
76+ secretName := spec .TLS .GetCASecretName ()
77+ cert , _ , _ , err := k8sutil .GetCASecret (secrets , secretName , nil )
78+
79+ var tlsconfig * coreosv1.TLSConfig
80+ if err == nil {
81+ tlsconfig = & coreosv1.TLSConfig {
82+ CAFile : cert ,
83+ InsecureSkipVerify : false ,
84+ }
85+ } else {
86+ tlsconfig = & coreosv1.TLSConfig {
87+ InsecureSkipVerify : true ,
88+ }
89+ }
90+ return coreosv1.Endpoint {
91+ Port : "exporter" ,
92+ Interval : "10s" ,
93+ Scheme : "https" ,
94+ TLSConfig : tlsconfig ,
95+ }
96+ } else {
97+ return coreosv1.Endpoint {
98+ Port : "exporter" ,
99+ Interval : "10s" ,
100+ Scheme : "http" ,
101+ }
46102 }
47103}
48104
@@ -56,17 +112,11 @@ func (r *Resources) EnsureServiceMonitor() error {
56112 owner := apiObject .AsOwner ()
57113 spec := r .context .GetSpec ()
58114 wantMetrics := spec .Metrics .IsEnabled ()
59- serviceMonitorName := deploymentName + "-exporter"
115+ serviceMonitorName := k8sutil . CreateExporterClientServiceName ( deploymentName )
60116
61- // First get a client:
62- var restConfig * rest.Config
63- restConfig , err := k8sutil .InClusterConfig ()
64- if err != nil {
65- return maskAny (err )
66- }
67- var mClient * clientv1.MonitoringV1Client
68- mClient , err = clientv1 .NewForConfig (restConfig )
117+ mClient , err := r .EnsureMonitoringClient ()
69118 if err != nil {
119+ log .Error ().Err (err ).Msgf ("Cannot get a monitoring client." )
70120 return maskAny (err )
71121 }
72122
@@ -88,14 +138,7 @@ func (r *Resources) EnsureServiceMonitor() error {
88138 Spec : coreosv1.ServiceMonitorSpec {
89139 JobLabel : "k8s-app" ,
90140 Endpoints : []coreosv1.Endpoint {
91- coreosv1.Endpoint {
92- Port : "exporter" ,
93- Interval : "10s" ,
94- Scheme : "https" ,
95- TLSConfig : & coreosv1.TLSConfig {
96- InsecureSkipVerify : true ,
97- },
98- },
141+ r .makeEndpoint (spec .IsSecure ()),
99142 },
100143 Selector : metav1.LabelSelector {
101144 MatchLabels : LabelsForExporterServiceMonitorSelector (deploymentName ),
0 commit comments