From 5d4da69d0b400ab653135ed85525819b3aeff25e Mon Sep 17 00:00:00 2001 From: Rostyslav Sotnychenko Date: Mon, 20 Jan 2020 15:11:36 +0200 Subject: [PATCH] [stable/prometheus-blackbox-exporter] Allow scraping multiple targets (#19620) * [stable/prometheus-blackbox-exporter] Allow scraping multiple targets Signed-off-by: Rostyslav Sotnychenko * Update values.yaml with example configuration Signed-off-by: Rostyslav Sotnychenko --- .../prometheus-blackbox-exporter/Chart.yaml | 4 +- stable/prometheus-blackbox-exporter/README.md | 80 ++++++++++--------- .../templates/servicemonitor.yaml | 38 +++++---- .../prometheus-blackbox-exporter/values.yaml | 23 ++++-- 4 files changed, 78 insertions(+), 67 deletions(-) diff --git a/stable/prometheus-blackbox-exporter/Chart.yaml b/stable/prometheus-blackbox-exporter/Chart.yaml index 2c51c9b8f9..c068c82c9a 100644 --- a/stable/prometheus-blackbox-exporter/Chart.yaml +++ b/stable/prometheus-blackbox-exporter/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 description: Prometheus Blackbox Exporter name: prometheus-blackbox-exporter -version: 2.0.0 +version: 3.0.0 appVersion: 0.15.1 home: https://github.com/prometheus/blackbox_exporter sources: @@ -15,3 +15,5 @@ maintainers: email: cedric@desaintmartin.fr - name: gianrubio email: gianrubio@gmail.com + - name: rsotnychenko + email: me@sota.sh diff --git a/stable/prometheus-blackbox-exporter/README.md b/stable/prometheus-blackbox-exporter/README.md index eba7201cf2..e56a09750d 100644 --- a/stable/prometheus-blackbox-exporter/README.md +++ b/stable/prometheus-blackbox-exporter/README.md @@ -41,44 +41,48 @@ The command removes all the Kubernetes components associated with the chart and The following table lists the configurable parameters of the Blackbox-Exporter chart and their default values. -| Parameter | Description | Default | -| -------------------------------------- | ------------------------------------------------- | ----------------------------- | -| `config` | Prometheus blackbox configuration | {} | -| `secretConfig` | Whether to treat blackbox configuration as secret | `false` | -| `extraArgs` | Optional flags for blackbox | `[]` | -| `extraConfigmapMounts` | Additional configmap mounts | `[]` | -| `extraSecretMounts` | Additional secret mounts | `[]` | -| `image.repository` | container image repository | `prom/blackbox-exporter` | -| `image.tag` | container image tag | `v0.15.1` | -| `image.pullPolicy` | container image pull policy | `IfNotPresent` | -| `image.pullSecrets` | container image pull secrets | `[]` | -| `ingress.annotations` | Ingress annotations | None | -| `ingress.enabled` | Enables Ingress | `false` | -| `ingress.hosts` | Ingress accepted hostnames | None | -| `ingress.tls` | Ingress TLS configuration | None | -| `nodeSelector` | node labels for pod assignment | `{}` | -| `runAsUser` | User to run blackbox-exporter container as | `1000` | -| `readOnlyRootFilesystem` | Set blackbox-exporter file-system to read-only | `true` | -| `runAsNonRoot` | Run blackbox-exporter as non-root | `true` | -| `tolerations` | node tolerations for pod assignment | `[]` | -| `affinity` | node affinity for pod assignment | `{}` | -| `podAnnotations` | annotations to add to each pod | `{}` | -| `podDisruptionBudget` | pod disruption budget | `{}` | -| `priorityClassName` | priority class name | None | -| `resources` | pod resource requests & limits | `{}` | -| `restartPolicy` | container restart policy | `Always` | -| `service.annotations` | annotations for the service | `{}` | -| `service.labels` | additional labels for the service | None | -| `service.type` | type of service to create | `ClusterIP` | -| `service.port` | port for the blackbox http service | `9115` | -| `service.externalIPs` | list of external ips | [] | -| `serviceMonitor.enabled` | If true, a ServiceMonitor CRD is created for a prometheus operator | `false` | -| `serviceMonitor.labels` | Labels for prometheus operator | `{}` | -| `serviceMonitor.interval` | Interval for prometheus operator endpoint | `30s` | -| `serviceMonitor.module` | The module that blackbox will use if serviceMonitor is enabled | `http_2xx` | -| `serviceMonitor.url` | The URL that blackbox will scrape if serviceMonitor is enabled | `http://example.com/healthz` | -| `serviceMonitor.urlHumanReadable` | Optional human readable URL that will appear in Prometheus / AlertManager | `nil` | -| `strategy` | strategy used to replace old Pods with new ones | `{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"}` | +| Parameter | Description | Default | +| ----------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `config` | Prometheus blackbox configuration | {} | +| `secretConfig` | Whether to treat blackbox configuration as secret | `false` | +| `extraArgs` | Optional flags for blackbox | `[]` | +| `image.repository` | container image repository | `prom/blackbox-exporter` | +| `image.tag` | container image tag | `v0.15.1` | +| `image.pullPolicy` | container image pull policy | `IfNotPresent` | +| `image.pullSecrets` | container image pull secrets | `[]` | +| `ingress.annotations` | Ingress annotations | None | +| `ingress.enabled` | Enables Ingress | `false` | +| `ingress.hosts` | Ingress accepted hostnames | None | +| `ingress.tls` | Ingress TLS configuration | None | +| `nodeSelector` | node labels for pod assignment | `{}` | +| `runAsUser` | User to run blackbox-exporter container as | `1000` | +| `readOnlyRootFilesystem` | Set blackbox-exporter file-system to read-only | `true` | +| `runAsNonRoot` | Run blackbox-exporter as non-root | `true` | +| `tolerations` | node tolerations for pod assignment | `[]` | +| `affinity` | node affinity for pod assignment | `{}` | +| `podAnnotations` | annotations to add to each pod | `{}` | +| `podDisruptionBudget` | pod disruption budget | `{}` | +| `priorityClassName` | priority class name | None | +| `resources` | pod resource requests & limits | `{}` | +| `restartPolicy` | container restart policy | `Always` | +| `service.annotations` | annotations for the service | `{}` | +| `service.labels` | additional labels for the service | None | +| `service.type` | type of service to create | `ClusterIP` | +| `service.port` | port for the blackbox http service | `9115` | +| `service.externalIPs` | list of external ips | [] | +| `serviceMonitor.enabled` | If true, a ServiceMonitor CRD is created for a prometheus operator | `false` | +| `serviceMonitor.defaults.labels` | Labels for prometheus operator | `{}` | +| `serviceMonitor.defaults.interval` | Interval for prometheus operator endpoint | `30s` | +| `serviceMonitor.defaults.scrapeTimeout` | Scrape timeout for prometheus operator endpoint | `30s` | +| `serviceMonitor.defaults.module` | The module that blackbox will use if serviceMonitor is enabled | `http_2xx` | +| `serviceMonitor.targets.[]` | List of targets to scrape | `[]` | +| `serviceMonitor.targets.[].name` | Human readable name for the job. It will also appear in job labels in Prometheus | `example` | +| `serviceMonitor.targets.[].url` | The URL that blackbox will scrape if serviceMonitor is enabled | `http://example.com/healthz` | +| `serviceMonitor.targets.[].labels` | See above in `serviceMonitor.defaults` | `{{ serviceMonitor.defaults.labels }` | +| `serviceMonitor.targets.[].interval` | See above in `serviceMonitor.defaults` | `{{ serviceMonitor.defaults.interval }}` | +| `serviceMonitor.targets.[].scrapeTimeout` | See above in `serviceMonitor.defaults` | `{{ serviceMonitor.defaults.scrateTimeout }}` | +| `serviceMonitor.targets.[].module` | See above in `serviceMonitor.defaults` | `{{ serviceMonitor.defaults.module }}` | +| `strategy` | strategy used to replace old Pods with new ones | `{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"}` | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, diff --git a/stable/prometheus-blackbox-exporter/templates/servicemonitor.yaml b/stable/prometheus-blackbox-exporter/templates/servicemonitor.yaml index 1a5664f8ec..21cab47230 100644 --- a/stable/prometheus-blackbox-exporter/templates/servicemonitor.yaml +++ b/stable/prometheus-blackbox-exporter/templates/servicemonitor.yaml @@ -1,45 +1,43 @@ {{- if .Values.serviceMonitor.enabled }} +{{- range .Values.serviceMonitor.targets }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: - name: {{ template "prometheus-blackbox-exporter.fullname" . }} + name: {{ template "prometheus-blackbox-exporter.fullname" $ }}-{{ .name }} labels: - app.kubernetes.io/name: {{ include "prometheus-blackbox-exporter.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} - helm.sh/chart: {{ include "prometheus-blackbox-exporter.chart" . }} - {{- if .Values.serviceMonitor.labels }} - {{- toYaml .Values.serviceMonitor.labels | nindent 4 }} + app.kubernetes.io/name: {{ include "prometheus-blackbox-exporter.name" $ }} + app.kubernetes.io/instance: {{ $.Release.Name }} + app.kubernetes.io/managed-by: {{ $.Release.Service }} + helm.sh/chart: {{ include "prometheus-blackbox-exporter.chart" $ }} + {{- if or $.Values.serviceMonitor.defaults.labels .labels }} + {{- toYaml (.labels | default $.Values.serviceMonitor.defaults.labels) | nindent 4 }} {{- end }} spec: endpoints: - port: http scheme: http path: "/probe" - interval: {{ .Values.serviceMonitor.interval }} - scrapeTimeout: {{ .Values.serviceMonitor.scrapeTimeout }} + interval: {{ .interval | default $.Values.serviceMonitor.defaults.interval }} + scrapeTimeout: {{ .scrapeTimeout | default $.Values.serviceMonitor.defaults.scrapeTimeout }} params: module: - - {{ .Values.serviceMonitor.module }} + - {{ .module | default $.Values.serviceMonitor.defaults.module }} target: - - {{ .Values.serviceMonitor.url }} + - {{ .url }} metricRelabelings: - sourceLabels: [__address__] targetLabel: __param_target - sourceLabels: [__param_target] targetLabel: instance - targetLabel: target - {{- if .Values.serviceMonitor.urlHumanReadable }} - replacement: {{ .Values.serviceMonitor.urlHumanReadable }} - {{- else }} - replacement: {{ .Values.serviceMonitor.url }} - {{- end }} - jobLabel: "{{ .Release.Name }}" + replacement: {{ .name }} + jobLabel: "{{ $.Release.Name }}" selector: matchLabels: - app.kubernetes.io/name: {{ include "prometheus-blackbox-exporter.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/name: {{ include "prometheus-blackbox-exporter.name" $ }} + app.kubernetes.io/instance: {{ $.Release.Name }} namespaceSelector: matchNames: - - {{ .Release.Namespace }} + - {{ $.Release.Namespace }} +{{- end }} {{- end }} diff --git a/stable/prometheus-blackbox-exporter/values.yaml b/stable/prometheus-blackbox-exporter/values.yaml index 5469f07b80..e52e3511c9 100644 --- a/stable/prometheus-blackbox-exporter/values.yaml +++ b/stable/prometheus-blackbox-exporter/values.yaml @@ -100,11 +100,18 @@ serviceMonitor: ## https://github.com/coreos/prometheus-operator ## enabled: false - labels: {} - interval: 30s - scrapeTimeout: 30s - module: http_2xx - # The URL that blackbox will scrape - url: http://example.com/healthz - # Optional human readable URL that will appear in Prometheus / AlertManager - urlHumanReadable: # www.changemeoriwillfail.com + + # Default values that will be used for all ServiceMonitors created by `targets` + defaults: + labels: {} + interval: 30s + scrapeTimeout: 30s + module: http_2xx + + targets: +# - name: example # Human readable URL that will appear in Prometheus / AlertManager +# url: http://example.com/healthz # The URL that blackbox will scrape +# labels: {} # List of labels for ServiceMonitor. Overrides value set in `defaults` +# interval: 60s # Scraping interval. Overrides value set in `defaults` +# scrapeTimeout: 60s # Scrape timeout. Overrides value set in `defaults` +# module: http_2xx # Module used for scraping. Overrides value set in `defaults`