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

    global:
      evaluation_interval: 1m
      scrape_interval: 1m
      external_labels:
        seed: {{ .Values.aggregatePrometheus.seed }}

    rule_files:
    - /etc/prometheus/rules/*.yaml
    alerting:
      alertmanagers:
      - kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - garden
        relabel_configs:
        - source_labels: [ __meta_kubernetes_service_label_component ]
          action: keep
          regex: alertmanager
        - source_labels: [ __meta_kubernetes_service_label_role ]
          action: keep
          regex: monitoring
        - source_labels: [ __meta_kubernetes_endpoint_port_name ]
          action: keep
          regex: metrics
      alert_relabel_configs:
      - source_labels: [ ignoreAlerts ]
        regex: true
        action: drop
    scrape_configs:
    - job_name: shoot-prometheus
      metrics_path: /federate
      honor_labels: true
      params:
        'match[]':
        - '{__name__="shoot:availability"}'
        - '{__name__=~"shoot:(.+):(.+)"}'
        - '{__name__="ALERTS"}'
        - '{__name__="prometheus_tsdb_lowest_timestamp"}'
        - '{__name__="prometheus_tsdb_storage_blocks_bytes"}'
        - '{__name__="kubeproxy_network_latency:quantile"}'
        - '{__name__="kubeproxy_sync_proxy:quantile"}'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_namespace
        - __meta_kubernetes_endpoints_name
        - __meta_kubernetes_endpoint_port_name
        regex: shoot-(.+);prometheus-web;metrics
        action: keep

    - job_name: prometheus
      metrics_path: /federate
      params:
        'match[]':
        - '{__name__=~"seed:(.+):(.+)"}'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_namespace
        - __meta_kubernetes_endpoints_name
        - __meta_kubernetes_endpoint_port_name
        regex: garden;prometheus-web;web
        action: keep

    - job_name: alertmanager
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names: [{{ .Release.Namespace }}]
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_endpoints_name
        - __meta_kubernetes_endpoint_port_name
        regex: alertmanager;cluster
        action: keep
      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.alertmanager | indent 6 }}
      - source_labels: [ namespace ]
        action: keep
        regex: ^{{ .Release.Namespace }}$

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

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

    - job_name: fluent-bit
      honor_labels: false
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names: [ garden ]
      relabel_configs:
      - target_label: __metrics_path__
        replacement: /api/v1/metrics/prometheus
      - source_labels:
        - __meta_kubernetes_service_name
        - __meta_kubernetes_endpoint_port_name
        action: keep
        regex: fluent-bit;metrics
      # common metrics
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [ __meta_kubernetes_pod_name ]
        target_label: pod
      metric_relabel_configs:
{{ include "prometheus.keep-metrics.metric-relabel-config" .Values.allowedMetrics.fluentbit| 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 }}
      - source_labels: [ namespace ]
        action: keep
        regex: ^garden$
