apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: {{ .Release.Namespace }}
data:
  prometheus.yaml: |

    global:
      evaluation_interval: 1m
      scrape_interval: 1m
    rule_files:
    - /etc/prometheus/rules/*.yaml

    scrape_configs:
    - job_name: cadvisor
      honor_labels: false
      scheme: https

      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - source_labels: [__meta_kubernetes_node_address_InternalIP]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
      - target_label: type
        replacement: seed

      metric_relabel_configs:
      # get system services
      - source_labels: [ id ]
        action: replace
        regex: ^/system\.slice/(.+)\.service$
        target_label: systemd_service_name
        replacement: '${1}'
      - source_labels: [ id ]
        action: replace
        regex: ^/system\.slice/(.+)\.service$
        target_label: container
        replacement: '${1}'
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.cAdvisor | indent 6 }}
      - source_labels:
        - container
        - __name__
        # The system container POD is used for networking
        regex: POD;({{ without .Values.allowedMetrics.cAdvisor "container_network_receive_bytes_total" "container_network_transmit_bytes_total" | join "|" }})
        action: drop
      - source_labels: [ container ]
        regex: ^$
        action: drop
      # drop terraform pods
      - source_labels: [ pod ]
        regex: ^.+\.tf-pod.+$
        action: drop
      # Collect addional filesystem metrics for etcd containers. We have to rename
      # the metrics names for the matching etcd samples to a temporary metric name.
      # After that we drop all the not matching filesystem metrics and rename the
      # etcd samples back to the origin name.
      - target_label: __name__
        source_labels:
        - container
        - __name__
        regex: etcd;(container_fs_writes_bytes_total|container_fs_reads_bytes_total)
        replacement: 'GARDEN_TMP_${1}'
        action: replace
      # Drop all filesystem metrics which are not related to etcd.
      - source_labels: [ __name__ ]
        regex: (container_fs_writes_bytes_total|container_fs_reads_bytes_total)
        action: drop
      # Rename all the tmp metric names back to their origin names.
      - target_label: __name__
        source_labels: [ __name__ ]
        regex: GARDEN_TMP_(.*)
        replacement: $1
        action: replace

    - job_name: kubelet
      honor_labels: false
      scheme: https

      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - source_labels: [__meta_kubernetes_node_address_InternalIP]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics
      - target_label: type
        replacement: seed

      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.kubelet | indent 6 }}

    - job_name: node-exporter
      honor_labels: false
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names: [ kube-system ]
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_service_name
        - __meta_kubernetes_endpoint_port_name
        action: keep
        regex: node-exporter;metrics
      # common metrics
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [ __meta_kubernetes_pod_name ]
        target_label: pod
      - source_labels: [ __meta_kubernetes_pod_node_name ]
        target_label: node
      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.nodeExporter | indent 6 }}

    - job_name: kube-state-metrics
      honor_labels: false
      # Service is used, because we only care about metric from one kube-state-metrics instance
      # and not multiple in HA setup
      kubernetes_sd_configs:
      - role: service
        namespaces:
          names: [{{ .Release.Namespace }}]
      relabel_configs:
      - source_labels: [ __meta_kubernetes_service_label_component ]
        action: keep
        regex: kube-state-metrics
      - source_labels: [ __meta_kubernetes_service_port_name ]
        action: keep
      - source_labels: [ __meta_kubernetes_service_label_type ]
        regex: (.+)
        target_label: type
        replacement: ${1}
      - target_label: instance
        replacement: kube-state-metrics
      metric_relabel_configs:
      - source_labels: [ pod ]
        regex: ^.+\.tf-pod.+$
        action: drop
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.kubeStateMetrics | indent 6 }}

    - job_name: 'vpa-exporter'
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names: [ garden ]
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_service_name
        - __meta_kubernetes_endpoint_port_name
        - __meta_kubernetes_namespace
        action: keep
        regex: vpa-exporter;metrics;garden
      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.vpa | indent 6 }}

{{- if .Values.hvpa.enabled }}
    - job_name: 'hvpa-controller'
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names: [ garden ]
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_service_name
        - __meta_kubernetes_endpoint_port_name
        - __meta_kubernetes_namespace
        action: keep
        regex: hvpa-controller;metrics;garden
      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.hvpa | indent 6 }}
{{- end }}


