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