github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/scrapeconfig/scrapeconfig_test.go (about) 1 package scrapeconfig 2 3 import ( 4 "testing" 5 6 promConfig "github.com/prometheus/common/config" 7 "github.com/prometheus/common/model" 8 "github.com/prometheus/prometheus/discovery/kubernetes" 9 "github.com/prometheus/prometheus/discovery/targetgroup" 10 "github.com/stretchr/testify/require" 11 "gopkg.in/yaml.v2" 12 ) 13 14 // todo add full example. 15 var smallYaml = ` 16 job_name: kubernetes-pods-name 17 static_configs: 18 - targets: 19 - localhost 20 labels: 21 job: varlogs 22 __path__: /var/log/*log 23 kubernetes_sd_configs: 24 - role: pod 25 ` 26 27 // todo add full example. 28 var testYaml = ` 29 pipeline_stages: 30 - regex: 31 expr: "./*" 32 - json: 33 timestamp: 34 source: time 35 format: RFC3339 36 labels: 37 stream: 38 source: json_key_name.json_sub_key_name 39 output: 40 source: log 41 job_name: kubernetes-pods-name 42 kubernetes_sd_configs: 43 - role: pod 44 relabel_configs: 45 - source_labels: 46 - __meta_kubernetes_pod_label_name 47 target_label: __service__ 48 - source_labels: 49 - __meta_kubernetes_pod_node_name 50 target_label: __host__ 51 - action: drop 52 regex: ^$ 53 source_labels: 54 - __service__ 55 - action: replace 56 replacement: $1 57 separator: / 58 source_labels: 59 - __meta_kubernetes_namespace 60 - __service__ 61 target_label: job 62 - action: replace 63 source_labels: 64 - __meta_kubernetes_namespace 65 target_label: namespace 66 - action: replace 67 source_labels: 68 - __meta_kubernetes_pod_name 69 target_label: instance 70 - action: replace 71 source_labels: 72 - __meta_kubernetes_pod_container_name 73 target_label: container_name 74 - action: labelmap 75 regex: __meta_kubernetes_pod_label_(.+) 76 - replacement: /var/log/pods/$1/*.log 77 separator: / 78 source_labels: 79 - __meta_kubernetes_pod_uid 80 - __meta_kubernetes_pod_container_name 81 target_label: __path__ 82 ` 83 84 var noPipelineStagesYaml = ` 85 job_name: kubernetes-pods-name 86 static_configs: 87 - targets: 88 - localhost 89 labels: 90 job: varlogs 91 __path__: /var/log/*log 92 kubernetes_sd_configs: 93 - role: pod 94 ` 95 96 func TestLoadSmallConfig(t *testing.T) { 97 var config Config 98 err := yaml.Unmarshal([]byte(smallYaml), &config) 99 require.Nil(t, err) 100 101 expected := Config{ 102 JobName: "kubernetes-pods-name", 103 PipelineStages: DefaultScrapeConfig.PipelineStages, 104 ServiceDiscoveryConfig: ServiceDiscoveryConfig{ 105 KubernetesSDConfigs: []*kubernetes.SDConfig{ 106 { 107 Role: "pod", 108 HTTPClientConfig: promConfig.DefaultHTTPClientConfig, 109 }, 110 }, 111 StaticConfigs: []*targetgroup.Group{ 112 { 113 Targets: []model.LabelSet{{"__address__": "localhost"}}, 114 Labels: map[model.LabelName]model.LabelValue{ 115 "job": "varlogs", 116 "__path__": "/var/log/*log", 117 }, 118 Source: "", 119 }, 120 }, 121 }, 122 } 123 require.Equal(t, expected, config) 124 } 125 126 // bugfix: https://github.com/grafana/loki/issues/3403 127 func TestEmptyPipelineStagesConfig(t *testing.T) { 128 var config Config 129 err := yaml.Unmarshal([]byte(noPipelineStagesYaml), &config) 130 require.Nil(t, err) 131 132 require.Zero(t, len(config.PipelineStages)) 133 } 134 135 func TestLoadConfig(t *testing.T) { 136 var config Config 137 err := yaml.Unmarshal([]byte(testYaml), &config) 138 if err != nil { 139 panic(err) 140 } 141 }