diff --git a/templates/prometheus/genericservicemonitor.yaml b/templates/prometheus/genericservicemonitor.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..91593c9aca9889bf32a16facbbd3eb45c28b1d02
--- /dev/null
+++ b/templates/prometheus/genericservicemonitor.yaml
@@ -0,0 +1,15 @@
+{{- if and .Values.metrics.enabled .Values.metrics.prometheus.enabled -}}
+{{- if .Values.metrics.prometheus.server.serviceMonitors }}
+{{- $top := .  -}}
+{{- range $t := .Values.metrics.prometheus.server.serviceMonitors }}
+---
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+  name: {{ $t.name }}
+  namespace: {{ $top.Release.namespace }}
+spec:
+  {{- toYaml $t.spec | nindent 2 }}
+{{- end }}
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/values.yaml b/values.yaml
index 0d00795f0a216913a2e8e8e8bf953630a4844902..0eb96de456253b22a45a418cef3779fb07f34b36 100644
--- a/values.yaml
+++ b/values.yaml
@@ -104,7 +104,22 @@ metrics:
         limits:
           cpu: "500m"
           memory: "5Gi"
-
+      # Service Monitors to be created by the helm chart install / upgrade. Ex:
+      # serviceMonitors:
+      # - name: my-nginx-sm
+      #   spec:
+      #     endpoints:
+      #     - interval: 30s
+      #       port: metrics
+      #     namespaceSelector:
+      #       matchNames:
+      #       - kube-system
+      #       selector:
+      #         matchLabels:
+      #           app.kubernetes.io/component: controller
+      #           app.kubernetes.io/instance: cern-magnum
+      #           app.kubernetes.io/name: ingress-nginx
+      serviceMonitors: []
   # This fluentbit is used to allow scraping and fordwarding metrics from
   # the local prometheus and send them to Open Telemetry Collector.
   # If the local .Values.metrics.prometheus enable=false will not be able