apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-server-conf
  labels:
    name: prometheus-server-conf
  namespace: monitoring
data:
  prometheus.yml: |-
    global:
      scrape_interval: 30s
      evaluation_interval: 60s

    scrape_configs:

      - job_name: 'kubernetes-apiservers'
        kubernetes_sd_configs:
        - role: endpoints
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
        - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: default;kubernetes;https


      # This scrape config uses insecure read-only HTTP 10255 port
      - job_name: 'kubernetes-nodes'
        scheme: http
        kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - source_labels: [__address__]
          regex: '(.*):10250'
          replacement: '${1}:10255'
          target_label: __address__

      # This option makes use of apiserver to access node metrics
      #- job_name: 'kubernetes-nodes'
      #  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:
      #  - action: labelmap
      #    regex: __meta_kubernetes_node_label_(.+)
      #  - target_label: __address__
      #    replacement: kubernetes.default.svc:443 # or dev.k8s.local:6443 to access it from outside
      #  - source_labels: [__meta_kubernetes_node_name]
      #    regex: (.+)
      #    target_label: __metrics_path__
      #    replacement: /api/v1/nodes/${1}/proxy/metrics


      # This scrape config uses insecure read-only HTTP 10255 port
      - job_name: 'kubernetes-cadvisor'
        scheme: http
        scrape_interval: 30s
        kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - source_labels: [__address__]
          regex: '(.*):10250'
          replacement: '${1}:10255'
          target_label: __address__
        - target_label: __metrics_path__
          replacement: /metrics/cadvisor


      # This option makes use of apiserver to access node metrics
      #- job_name: 'kubernetes-cadvisor'
      #  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:
      #  - action: labelmap
      #    regex: __meta_kubernetes_node_label_(.+)
      #  - target_label: __address__
      #    replacement: kubernetes.default.svc:443
      #  - source_labels: [__meta_kubernetes_node_name]
      #    regex: (.+)
      #    target_label: __metrics_path__
      #    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor




      - job_name: 'kubernetes-node-exporter'
        scheme: http
        #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:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - source_labels: [__meta_kubernetes_role]
          action: replace
          target_label: kubernetes_role
        - source_labels: [__address__]
          regex: '(.*):10250'
          replacement: '${1}:9100'
          target_label: __address__
        - source_labels: [__meta_kubernetes_node_label_kubernetes_io_hostname]
          target_label: __instance__
        # set "name" value to "job"
        - source_labels: [job]
          regex: 'kubernetes-(.*)'
          replacement: '${1}'
          target_label: name



       # 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`. 
      - job_name: 'kubernetes-pods'
        kubernetes_sd_configs:
        - role: pod
        relabel_configs:
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: kubernetes_pod_name


       # annotations:
       #
       # * `prometheus.io/scrape`: 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. 
      - job_name: 'kubernetes-service-endpoints'

        kubernetes_sd_configs:
        - role: endpoints

        relabel_configs:
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
          action: replace
          target_label: __scheme__
          regex: (https?)
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
          action: replace
          target_label: __address__
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_service_name]
          action: replace
          target_label: kubernetes_name
