@ -23,6 +23,8 @@ import (
"time"
"github.com/alecthomas/units"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/grafana/regexp"
"github.com/prometheus/common/config"
"github.com/prometheus/common/model"
@ -106,6 +108,7 @@ var expectedConf = &Config{
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
AlwaysScrapeClassicHistograms : false ,
ConvertClassicHistogramsToNHCB : false ,
MetricNameValidationScheme : model . UTF8Validation ,
} ,
Runtime : RuntimeConfig {
@ -125,11 +128,12 @@ var expectedConf = &Config{
Name : "drop_expensive" ,
WriteRelabelConfigs : [ ] * relabel . Config {
{
SourceLabels : model . LabelNames { "__name__" } ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "expensive.*" ) ,
Replacement : "$1" ,
Action : relabel . Drop ,
SourceLabels : model . LabelNames { "__name__" } ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "expensive.*" ) ,
Replacement : "$1" ,
Action : relabel . Drop ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
QueueConfig : DefaultQueueConfig ,
@ -279,50 +283,56 @@ var expectedConf = &Config{
RelabelConfigs : [ ] * relabel . Config {
{
SourceLabels : model . LabelNames { "job" , "__meta_dns_name" } ,
TargetLabel : "job" ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
Replacement : "foo-${1}" ,
Action : relabel . Replace ,
SourceLabels : model . LabelNames { "job" , "__meta_dns_name" } ,
TargetLabel : "job" ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
Replacement : "foo-${1}" ,
Action : relabel . Replace ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
SourceLabels : model . LabelNames { "abc" } ,
TargetLabel : "cde" ,
Separator : ";" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Replace ,
SourceLabels : model . LabelNames { "abc" } ,
TargetLabel : "cde" ,
Separator : ";" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Replace ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
TargetLabel : "abc" ,
Separator : ";" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : "static" ,
Action : relabel . Replace ,
TargetLabel : "abc" ,
Separator : ";" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : "static" ,
Action : relabel . Replace ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
TargetLabel : "abc" ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "" ) ,
Replacement : "static" ,
Action : relabel . Replace ,
TargetLabel : "abc" ,
Separator : ";" ,
Regex : relabel . MustNewRegexp ( "" ) ,
Replacement : "static" ,
Action : relabel . Replace ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
SourceLabels : model . LabelNames { "foo" } ,
TargetLabel : "abc" ,
Action : relabel . KeepEqual ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
SourceLabels : model . LabelNames { "foo" } ,
TargetLabel : "abc" ,
Action : relabel . KeepEqual ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
SourceLabels : model . LabelNames { "foo" } ,
TargetLabel : "abc" ,
Action : relabel . DropEqual ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
SourceLabels : model . LabelNames { "foo" } ,
TargetLabel : "abc" ,
Action : relabel . DropEqual ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
} ,
@ -377,54 +387,61 @@ var expectedConf = &Config{
RelabelConfigs : [ ] * relabel . Config {
{
SourceLabels : model . LabelNames { "job" } ,
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
SourceLabels : model . LabelNames { "job" } ,
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
SourceLabels : model . LabelNames { "__address__" } ,
TargetLabel : "__tmp_hash" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Modulus : 8 ,
Separator : ";" ,
Action : relabel . HashMod ,
SourceLabels : model . LabelNames { "__address__" } ,
TargetLabel : "__tmp_hash" ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Modulus : 8 ,
Separator : ";" ,
Action : relabel . HashMod ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
SourceLabels : model . LabelNames { "__tmp_hash" } ,
Regex : relabel . MustNewRegexp ( "1" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Keep ,
SourceLabels : model . LabelNames { "__tmp_hash" } ,
Regex : relabel . MustNewRegexp ( "1" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Keep ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
Regex : relabel . MustNewRegexp ( "1" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelMap ,
Regex : relabel . MustNewRegexp ( "1" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelMap ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
Regex : relabel . MustNewRegexp ( "d" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelDrop ,
Regex : relabel . MustNewRegexp ( "d" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelDrop ,
NameValidationScheme : model . UTF8Validation ,
} ,
{
Regex : relabel . MustNewRegexp ( "k" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelKeep ,
Regex : relabel . MustNewRegexp ( "k" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelKeep ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
MetricRelabelConfigs : [ ] * relabel . Config {
{
SourceLabels : model . LabelNames { "__name__" } ,
Regex : relabel . MustNewRegexp ( "expensive_metric.*" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
SourceLabels : model . LabelNames { "__name__" } ,
Regex : relabel . MustNewRegexp ( "expensive_metric.*" ) ,
Separator : ";" ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
} ,
@ -479,12 +496,13 @@ var expectedConf = &Config{
RelabelConfigs : [ ] * relabel . Config {
{
SourceLabels : model . LabelNames { "__meta_sd_consul_tags" } ,
Regex : relabel . MustNewRegexp ( "label:([^=]+)=([^,]+)" ) ,
Separator : "," ,
TargetLabel : "${1}" ,
Replacement : "${2}" ,
Action : relabel . Replace ,
SourceLabels : model . LabelNames { "__meta_sd_consul_tags" } ,
Regex : relabel . MustNewRegexp ( "label:([^=]+)=([^,]+)" ) ,
Separator : "," ,
TargetLabel : "${1}" ,
Replacement : "${2}" ,
Action : relabel . Replace ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
} ,
@ -1276,12 +1294,13 @@ var expectedConf = &Config{
RelabelConfigs : [ ] * relabel . Config {
{
Action : relabel . Uppercase ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
SourceLabels : model . LabelNames { "instance" } ,
TargetLabel : "instance" ,
Action : relabel . Uppercase ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
SourceLabels : model . LabelNames { "instance" } ,
TargetLabel : "instance" ,
NameValidationScheme : model . UTF8Validation ,
} ,
} ,
@ -1953,7 +1972,14 @@ func TestLoadConfig(t *testing.T) {
c , err := LoadFile ( "testdata/conf.good.yml" , false , promslog . NewNopLogger ( ) )
require . NoError ( t , err )
require . Equal ( t , expectedConf , c )
testutil . RequireEqualWithOptions ( t , expectedConf , c , [ ] cmp . Option {
cmpopts . IgnoreUnexported ( config . ProxyConfig { } ) ,
cmpopts . IgnoreUnexported ( ionos . SDConfig { } ) ,
cmpopts . IgnoreUnexported ( stackit . SDConfig { } ) ,
cmpopts . IgnoreUnexported ( regexp . Regexp { } ) ,
cmpopts . IgnoreUnexported ( hetzner . SDConfig { } ) ,
cmpopts . IgnoreUnexported ( Config { } ) ,
} )
}
func TestScrapeIntervalLarger ( t * testing . T ) {