Skip to content

Commit 7f5ea8c

Browse files
authoredJun 21, 2024··
Merge pull request #690 from alexanderldavis/enable_metrics_by_namespace
feat: add new opt-in metric of reloads by namespace
2 parents b73b04d + 6cd458b commit 7f5ea8c

File tree

8 files changed

+306
-12
lines changed

8 files changed

+306
-12
lines changed
 

‎README.md

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

342343
#### Deployment Reloader Parameters
343344

‎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:

‎docs/Verify-Reloader-Working.md

+13
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,16 @@ When Reloader is unable to reload, `reloader_reload_executed_total{success="fals
6060
reloader_reload_executed_total{success="false"} 15
6161
reloader_reload_executed_total{success="true"} 12
6262
```
63+
64+
### Reloads by Namespace
65+
66+
Reloader can also export a metric to show the number of reloads by namespace. This feature is disabled by default, as it can lead to high cardinality in clusters with many namespaces.
67+
68+
The metric will have both `success` and `namespace` as attributes:
69+
70+
```text
71+
reloader_reload_executed_total{success="false", namespace="some-namespace"} 2
72+
reloader_reload_executed_total{success="true", namespace="some-namespace"} 1
73+
```
74+
75+
To opt in, set the environment variable `METRICS_COUNT_BY_NAMESPACE` to `enabled` or set the Helm value `reloader.enableMetricsByNamespace` to `true`.

‎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)

0 commit comments

Comments
 (0)