prometheus_scrape_configs

in files/gitlab-cookbooks/monitoring/libraries/prometheus.rb [532:695]


    def prometheus_scrape_configs
      if service_discovery
        prometheus = {
          'job_name' => 'prometheus',
          'consul_sd_configs' => [{ 'services' => ['prometheus'] }]
        }
      else
        default_config = Gitlab['node']['monitoring']['prometheus'].to_hash
        user_config = Gitlab['prometheus']

        listen_address = user_config['listen_address'] || default_config['listen_address']

        prometheus = {
          'job_name' => 'prometheus',
          'static_configs' => [
            'targets' => [listen_address],
          ],
        }
      end

      k8s_cadvisor = {
        'job_name' => 'kubernetes-cadvisor',
        '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',
        'kubernetes_sd_configs' => [
          {
            'role' => 'node',
            'api_server' => 'https://kubernetes.default.svc:443',
            'tls_config' => {
              'ca_file' => '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt',
            },
            'bearer_token_file' => '/var/run/secrets/kubernetes.io/serviceaccount/token',
          },
        ],
        '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',
          },
        ],
        'metric_relabel_configs' => [
          {
            'source_labels' => ['pod_name'],
            'target_label' => 'environment',
            'regex' => '(.+)-.+-.+',
          },
        ],
      }

      k8s_nodes = {
        'job_name' => 'kubernetes-nodes',
        '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',
        'kubernetes_sd_configs' => [
          {
            'role' => 'node',
            'api_server' => 'https://kubernetes.default.svc:443',
            'tls_config' => {
              'ca_file' => '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt',
            },
            'bearer_token_file' => '/var/run/secrets/kubernetes.io/serviceaccount/token',
          },
        ],
        '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',
          },
        ],
        'metric_relabel_configs' => [
          {
            'source_labels' => ['pod_name'],
            'target_label' => 'environment',
            'regex' => '(.+)-.+-.+',
          },
        ],
      }

      k8s_pods = {
        'job_name' => 'kubernetes-pods',
        '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',
        'kubernetes_sd_configs' => [
          {
            'role' => 'pod',
            'api_server' => 'https://kubernetes.default.svc:443',
            '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_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' => %w(__address__ __meta_kubernetes_pod_annotation_prometheus_io_port),
            'action' => 'replace',
            'regex' => '([^:]+)(?::[0-9]+)?;([0-9]+)',
            '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',
          },
        ],
      }

      default_scrape_configs = [] << prometheus << Gitlab['prometheus']['scrape_configs']
      default_scrape_configs = default_scrape_configs << k8s_cadvisor << k8s_nodes << k8s_pods unless Gitlab['prometheus']['monitor_kubernetes'] == false
      Gitlab['prometheus']['scrape_configs'] = default_scrape_configs.compact.flatten
    end