Skip to content

Commit 3f6e98a

Browse files
committedJun 14, 2024
feat: add new opt-in metric of reloads by namespace
1 parent 8595b4a commit 3f6e98a

File tree

7 files changed

+293
-12
lines changed

7 files changed

+293
-12
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ helm uninstall {{RELEASE_NAME}} -n {{NAMESPACE}}
328328
| `reloader.readOnlyRootFileSystem` | Enforce readOnlyRootFilesystem | boolean | `false` |
329329
| `reloader.legacy.rbac` | | boolean | `false` |
330330
| `reloader.matchLabels` | Pod labels to match | map | `{}` |
331+
| `reloader.enableMetricsByNamespace` | Expose an additional Prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces) | boolean | `false` |
331332

332333
#### Deployment Reloader Parameters
333334

‎deployments/kubernetes/chart/reloader/templates/deployment.yaml

+5-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ spec:
7676
- image: "{{ .Values.reloader.deployment.image.name }}:{{ .Values.reloader.deployment.image.tag }}"
7777
imagePullPolicy: {{ .Values.reloader.deployment.image.pullPolicy }}
7878
name: {{ template "reloader-fullname" . }}
79-
{{- if or (.Values.reloader.deployment.env.open) (.Values.reloader.deployment.env.secret) (.Values.reloader.deployment.env.field) (.Values.reloader.deployment.env.existing) (eq .Values.reloader.watchGlobally false) (.Values.reloader.enableHA)}}
79+
{{- if or (.Values.reloader.deployment.env.open) (.Values.reloader.deployment.env.secret) (.Values.reloader.deployment.env.field) (.Values.reloader.deployment.env.existing) (eq .Values.reloader.watchGlobally false) (.Values.reloader.enableHA) (.Values.reloader.enableMetricsByNamespace)}}
8080
env:
8181
{{- range $name, $value := .Values.reloader.deployment.env.open }}
8282
{{- if not (empty $value) }}
@@ -129,6 +129,10 @@ spec:
129129
fieldRef:
130130
fieldPath: metadata.namespace
131131
{{- end }}
132+
{{- if .Values.reloader.enableMetricsByNamespace }}
133+
- name: METRICS_COUNT_BY_NAMESPACE
134+
value: enabled
135+
{{- end }}
132136
{{- end }}
133137

134138
ports:

‎deployments/kubernetes/chart/reloader/values.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ reloader:
3232
legacy:
3333
rbac: false
3434
matchLabels: {}
35+
# Set to true to expose a prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces)
36+
enableMetricsByNamespace: false
3537
deployment:
3638
# If you wish to run multiple replicas set reloader.enableHA = true
3739
replicas: 1

‎deployments/kubernetes/templates/chart/values.yaml.tmpl

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ reloader:
2323
legacy:
2424
rbac: false
2525
matchLabels: {}
26+
# Set to true to expose a prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces)
27+
enableMetricsByNamespace: false
2628
deployment:
2729
replicas: 1
2830
nodeSelector:

‎internal/pkg/handler/upgrade.go

+2
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ func PerformRollingUpgrade(clients kube.Clients, config util.Config, upgradeFunc
245245
message := fmt.Sprintf("Update for '%s' of type '%s' in namespace '%s' failed with error %v", resourceName, upgradeFuncs.ResourceType, config.Namespace, err)
246246
logrus.Errorf(message)
247247
collectors.Reloaded.With(prometheus.Labels{"success": "false"}).Inc()
248+
collectors.ReloadedByNamespace.With(prometheus.Labels{"success": "false", "namespace": config.Namespace}).Inc()
248249
if recorder != nil {
249250
recorder.Event(i, v1.EventTypeWarning, "ReloadFail", message)
250251
}
@@ -254,6 +255,7 @@ func PerformRollingUpgrade(clients kube.Clients, config util.Config, upgradeFunc
254255
message += fmt.Sprintf(", Updated '%s' of type '%s' in namespace '%s'", resourceName, upgradeFuncs.ResourceType, config.Namespace)
255256
logrus.Infof(message)
256257
collectors.Reloaded.With(prometheus.Labels{"success": "true"}).Inc()
258+
collectors.ReloadedByNamespace.With(prometheus.Labels{"success": "true", "namespace": config.Namespace}).Inc()
257259
alert_on_reload, ok := os.LookupEnv("ALERT_ON_RELOAD")
258260
if recorder != nil {
259261
recorder.Event(i, v1.EventTypeNormal, "Reloaded", message)

‎internal/pkg/handler/upgrade_test.go

+255-7
Large diffs are not rendered by default.

‎internal/pkg/metrics/prometheus.go

+26-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package metrics
22

33
import (
4+
"net/http"
5+
"os"
6+
47
"github.com/prometheus/client_golang/prometheus"
58
"github.com/prometheus/client_golang/prometheus/promhttp"
6-
"net/http"
79
)
810

911
type Collectors struct {
10-
Reloaded *prometheus.CounterVec
12+
Reloaded *prometheus.CounterVec
13+
ReloadedByNamespace *prometheus.CounterVec
1114
}
1215

1316
func NewCollectors() Collectors {
@@ -17,21 +20,40 @@ func NewCollectors() Collectors {
1720
Name: "reload_executed_total",
1821
Help: "Counter of reloads executed by Reloader.",
1922
},
20-
[]string{"success"},
23+
[]string{
24+
"success",
25+
},
2126
)
2227

2328
//set 0 as default value
2429
reloaded.With(prometheus.Labels{"success": "true"}).Add(0)
2530
reloaded.With(prometheus.Labels{"success": "false"}).Add(0)
2631

32+
reloaded_by_namespace := prometheus.NewCounterVec(
33+
prometheus.CounterOpts{
34+
Namespace: "reloader",
35+
Name: "reload_executed_total_by_namespace",
36+
Help: "Counter of reloads executed by Reloader by namespace.",
37+
},
38+
[]string{
39+
"success",
40+
"namespace",
41+
},
42+
)
2743
return Collectors{
28-
Reloaded: reloaded,
44+
Reloaded: reloaded,
45+
ReloadedByNamespace: reloaded_by_namespace,
2946
}
3047
}
3148

3249
func SetupPrometheusEndpoint() Collectors {
3350
collectors := NewCollectors()
3451
prometheus.MustRegister(collectors.Reloaded)
52+
53+
if os.Getenv("METRICS_COUNT_BY_NAMESPACE") == "enabled" {
54+
prometheus.MustRegister(collectors.ReloadedByNamespace)
55+
}
56+
3557
http.Handle("/metrics", promhttp.Handler())
3658

3759
return collectors

0 commit comments

Comments
 (0)
Please sign in to comment.