Skip to content

Commit

Permalink
added global relabel config (#1290)
Browse files Browse the repository at this point in the history
* added global relabel config

* minor fix

* minor fix
  • Loading branch information
AndrewChubatiuk authored Aug 23, 2024
1 parent 57895a1 commit 09400de
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 4 deletions.
1 change: 1 addition & 0 deletions charts/victoria-metrics-single/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Next release

- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285)
- Added global relabelConfig. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/207)

## 0.10.1

Expand Down
4 changes: 3 additions & 1 deletion charts/victoria-metrics-single/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ Change the values according to the need of the environment in ``victoria-metrics
| server.probe.readiness.periodSeconds | int | `15` | |
| server.probe.readiness.timeoutSeconds | int | `5` | |
| server.probe.startup | object | `{}` | |
| server.relabel | object | `{"config":[],"configMap":"","enabled":false}` | Global relabel configuration |
| server.relabel.configMap | string | `""` | Use existing configmap if specified otherwise .config values will be used. Relabel config **should** reside under `relabel.yml` key |
| server.resources | object | `{}` | Resource object. Ref: [http://kubernetes.io/docs/user-guide/compute-resources/](http://kubernetes.io/docs/user-guide/compute-resources/ |
| server.retentionPeriod | int | `1` | Data retention period in month |
| server.scrape | object | `{"config":{"global":{"scrape_interval":"15s"},"scrape_configs":[{"job_name":"victoriametrics","static_configs":[{"targets":["localhost:8428"]}]},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-apiservers","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"keep","regex":"default;kubernetes;https","source_labels":["__meta_kubernetes_namespace","__meta_kubernetes_service_name","__meta_kubernetes_endpoint_port_name"]}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-nodes","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","honor_timestamps":false,"job_name":"kubernetes-nodes-cadvisor","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics/cadvisor","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"job_name":"kubernetes-service-endpoints","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"service"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"node"}]},{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"service"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"node"}],"scrape_interval":"5m","scrape_timeout":"30s"},{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"service"}]},{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"pod"}]}]},"configMap":"","enabled":false,"extraScrapeConfigs":[]}` | Scrape configuration for victoriametrics |
Expand All @@ -185,7 +187,7 @@ Change the values according to the need of the environment in ``victoria-metrics
| server.scrape.config.scrape_configs[5] | object | `{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"service"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"node"}],"scrape_interval":"5m","scrape_timeout":"30s"}` | Scrape config for slow service endpoints; same as above, but with a larger timeout and a larger interval The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * `prometheus.io/scrape-slow`: Only scrape services that have a value of `true` * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need to set this to `https` & most likely set the `tls_config` of the scrape config. * `prometheus.io/path`: If the metrics path is not `/metrics` override this. * `prometheus.io/port`: If the metrics are exposed on a different port to the service then set this appropriately. |
| server.scrape.config.scrape_configs[6] | object | `{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"service"}]}` | Example scrape config for probing services via the Blackbox Exporter. The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * `prometheus.io/probe`: Only probe services that have a value of `true` |
| server.scrape.config.scrape_configs[7] | object | `{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"pod"}]}` | Example scrape config for pods The relabeling allows the actual pod scrape endpoint to be configured via the following annotations: * `prometheus.io/scrape`: Only scrape pods that have a value of `true` * `prometheus.io/path`: If the metrics path is not `/metrics` override this. * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`. |
| server.scrape.configMap | string | `""` | Use existing configmap if specified otherwise .config values will be used |
| server.scrape.configMap | string | `""` | Use existing configmap if specified otherwise .config values will be used. Scrape config **should** reside under `scrape.yml` key |
| server.scrape.enabled | bool | `false` | If true scrapes targets, creates config map or use specified one with scrape targets |
| server.scrape.extraScrapeConfigs | list | `[]` | Extra scrape configs that will be appended to `server.scrape.config` |
| server.securityContext | object | `{"enabled":true}` | Security context to be added to server pods |
Expand Down
11 changes: 11 additions & 0 deletions charts/victoria-metrics-single/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,17 @@ Defines the name of scrape configuration map
{{- end -}}
{{- end -}}

{{/*
Defines the name of relabel configuration map
*/}}
{{- define "victoria-metrics.server.relabel.configname" -}}
{{- if .Values.server.relabel.configMap -}}
{{- .Values.server.relabel.configMap -}}
{{- else -}}
{{- include "victoria-metrics.server.fullname" . -}}-relabelconfig
{{- end -}}
{{- end -}}

{{- define "victoria-metrics.hasInitContainer" -}}
{{- or (gt (len .Values.server.initContainers) 0) .Values.server.vmbackupmanager.restore.onStart.enabled -}}
{{- end -}}
Expand Down
10 changes: 10 additions & 0 deletions charts/victoria-metrics-single/templates/relabel-configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{{- if and .Values.server.relabel.enabled (eq .Values.server.relabel.configMap "") }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "victoria-metrics.server.fullname" . }}-relabelconfig
namespace: {{ .Release.Namespace }}
labels: {{ include "victoria-metrics.server.labels" . | nindent 4 }}
data:
relabel.yml: |{{ toYaml .Values.server.relabel.config | nindent 4 }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ kind: ConfigMap
metadata:
name: {{ template "victoria-metrics.server.fullname" . }}-scrapeconfig
namespace: {{ .Release.Namespace }}
labels: {{- include "victoria-metrics.server.labels" . | nindent 4 }}
labels: {{ include "victoria-metrics.server.labels" . | nindent 4 }}
data:
scrape.yml: |
{{- range $k, $v := .Values.server.scrape.config }}
Expand All @@ -14,4 +14,4 @@ data:
{{ dict $k $v | toYaml | nindent 4 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
12 changes: 12 additions & 0 deletions charts/victoria-metrics-single/templates/server-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ spec:
{{- if $app.scrape.enabled }}
- --promscrape.config=/scrapeconfig/scrape.yml
{{- end }}
{{- if $app.relabel.enabled }}
- --relabelConfig=/relabelconfig/relabel.yml
{{- end }}
{{- range $key, $value := $app.extraArgs }}
{{- if kindIs "slice" $value }}
{{- range $v := $value }}
Expand Down Expand Up @@ -132,6 +135,10 @@ spec:
- name: scrapeconfig
mountPath: /scrapeconfig
{{- end }}
{{- if $app.relabel.enabled }}
- name: relabelconfig
mountPath: /relabelconfig
{{- end }}
{{- range $app.extraHostPathMounts }}
- name: {{ .name }}
mountPath: {{ .mountPath }}
Expand Down Expand Up @@ -245,6 +252,11 @@ spec:
configMap:
name: {{ include "victoria-metrics.server.scrape.configname" . }}
{{- end }}
{{- if $app.relabel.enabled }}
- name: relabelconfig
configMap
name: {{ include "victoria-metrics.server.relabel.configname" . }}
{{- end }}
{{- with $app.extraVolumes }}
{{- toYaml . | nindent 8 }}
{{- end }}
Expand Down
12 changes: 12 additions & 0 deletions charts/victoria-metrics-single/templates/server-statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ spec:
{{- if $app.scrape.enabled }}
- --promscrape.config=/scrapeconfig/scrape.yml
{{- end }}
{{- if $app.relabel.enabled }}
- --relabelConfig=/relabelconfig/relabel.yml
{{- end }}
{{- range $key, $value := $app.extraArgs }}
{{- if kindIs "slice" $value }}
{{- range $v := $value }}
Expand Down Expand Up @@ -129,6 +132,10 @@ spec:
- name: scrapeconfig
mountPath: /scrapeconfig
{{- end }}
{{- if $app.relabel.enabled }}
- name: relabelconfig
mountPath: /relabelconfig
{{- end }}
{{- range $app.extraHostPathMounts }}
- name: {{ .name }}
mountPath: {{ .mountPath }}
Expand Down Expand Up @@ -245,6 +252,11 @@ spec:
configMap:
name: {{ include "victoria-metrics.server.scrape.configname" . }}
{{- end }}
{{- if $app.relabel.enabled }}
- name: relabelconfig
configMap:
name: {{ include "victoria-metrics.server.relabel.configname" . }}
{{- end }}
{{- if not $app.persistentVolume.enabled }}
- name: server-volume
emptyDir: {{ toYaml $app.emptyDir | nindent 12 }}
Expand Down
10 changes: 9 additions & 1 deletion charts/victoria-metrics-single/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -372,12 +372,20 @@ server:
# -- Service Monitor metricRelabelings
metricRelabelings: []

# -- Global relabel configuration
relabel:
enabled: false
config: []
# -- Use existing configmap if specified
# otherwise .config values will be used. Relabel config **should** reside under `relabel.yml` key
configMap: ""

# -- Scrape configuration for victoriametrics
scrape:
# -- If true scrapes targets, creates config map or use specified one with scrape targets
enabled: false
# -- Use existing configmap if specified
# otherwise .config values will be used
# otherwise .config values will be used. Scrape config **should** reside under `scrape.yml` key
configMap: ""
# -- Scrape config
config:
Expand Down

0 comments on commit 09400de

Please sign in to comment.