2015-08-20 11:03:56 +00:00
// Copyright 2015 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2013-02-14 00:04:07 +00:00
package config
import (
2022-04-20 07:57:53 +00:00
"crypto/tls"
2015-06-06 07:55:22 +00:00
"encoding/json"
2015-09-03 09:47:09 +00:00
"net/url"
2021-03-25 21:28:58 +00:00
"os"
2017-07-09 04:34:50 +00:00
"path/filepath"
2013-02-14 00:04:07 +00:00
"testing"
2015-05-07 08:55:03 +00:00
"time"
2021-05-16 02:19:22 +00:00
"github.com/alecthomas/units"
2021-06-11 16:17:59 +00:00
"github.com/go-kit/log"
2022-02-12 23:58:27 +00:00
"github.com/grafana/regexp"
2020-08-20 12:48:26 +00:00
"github.com/prometheus/common/config"
2019-03-12 10:24:15 +00:00
"github.com/prometheus/common/model"
2020-10-29 09:43:23 +00:00
"github.com/stretchr/testify/require"
2019-03-12 10:24:15 +00:00
"gopkg.in/yaml.v2"
2018-12-18 11:26:36 +00:00
2020-08-20 12:48:26 +00:00
"github.com/prometheus/prometheus/discovery"
2021-04-28 09:29:12 +00:00
"github.com/prometheus/prometheus/discovery/aws"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/azure"
"github.com/prometheus/prometheus/discovery/consul"
2020-07-21 21:28:43 +00:00
"github.com/prometheus/prometheus/discovery/digitalocean"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/dns"
2020-08-26 15:36:59 +00:00
"github.com/prometheus/prometheus/discovery/eureka"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/file"
2020-08-21 13:49:19 +00:00
"github.com/prometheus/prometheus/discovery/hetzner"
2021-06-11 16:04:45 +00:00
"github.com/prometheus/prometheus/discovery/http"
2022-05-20 12:57:23 +00:00
"github.com/prometheus/prometheus/discovery/ionos"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/kubernetes"
2021-06-01 18:32:36 +00:00
"github.com/prometheus/prometheus/discovery/linode"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/marathon"
2021-04-13 07:33:54 +00:00
"github.com/prometheus/prometheus/discovery/moby"
2022-06-25 20:47:42 +00:00
"github.com/prometheus/prometheus/discovery/nomad"
2018-09-24 14:08:42 +00:00
"github.com/prometheus/prometheus/discovery/openstack"
2022-11-03 09:20:09 +00:00
"github.com/prometheus/prometheus/discovery/ovhcloud"
2021-06-01 12:04:58 +00:00
"github.com/prometheus/prometheus/discovery/puppetdb"
2021-03-10 14:10:17 +00:00
"github.com/prometheus/prometheus/discovery/scaleway"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/targetgroup"
"github.com/prometheus/prometheus/discovery/triton"
2021-10-18 23:00:44 +00:00
"github.com/prometheus/prometheus/discovery/uyuni"
2022-05-24 16:03:49 +00:00
"github.com/prometheus/prometheus/discovery/vultr"
2021-05-04 19:47:44 +00:00
"github.com/prometheus/prometheus/discovery/xds"
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
"github.com/prometheus/prometheus/discovery/zookeeper"
2021-11-08 14:23:17 +00:00
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/relabel"
2013-02-14 00:04:07 +00:00
)
2020-08-20 12:48:26 +00:00
func mustParseURL ( u string ) * config . URL {
2017-02-13 20:43:20 +00:00
parsed , err := url . Parse ( u )
if err != nil {
panic ( err )
}
2020-08-20 12:48:26 +00:00
return & config . URL { URL : parsed }
2017-02-13 20:43:20 +00:00
}
2023-05-30 08:22:23 +00:00
const (
globBodySizeLimit = 15 * units . MiB
globSampleLimit = 1500
globTargetLimit = 30
globLabelLimit = 30
globLabelNameLengthLimit = 200
globLabelValueLengthLimit = 200
)
2015-06-04 15:03:12 +00:00
var expectedConf = & Config {
2015-06-07 15:40:22 +00:00
GlobalConfig : GlobalConfig {
2016-01-29 14:23:11 +00:00
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
2015-05-07 08:55:03 +00:00
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
2016-01-29 14:23:11 +00:00
EvaluationInterval : model . Duration ( 30 * time . Second ) ,
2020-01-08 13:28:43 +00:00
QueryLogFile : "" ,
2015-05-07 08:55:03 +00:00
2022-03-09 22:21:11 +00:00
ExternalLabels : labels . FromStrings ( "foo" , "bar" , "monitor" , "codelab" ) ,
2023-05-30 08:22:23 +00:00
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-06-04 15:03:12 +00:00
} ,
2015-05-07 08:55:03 +00:00
RuleFiles : [ ] string {
2017-07-09 04:34:50 +00:00
filepath . FromSlash ( "testdata/first.rules" ) ,
filepath . FromSlash ( "testdata/my/*.rules" ) ,
2015-05-07 08:55:03 +00:00
} ,
2017-02-13 20:43:20 +00:00
RemoteWriteConfigs : [ ] * RemoteWriteConfig {
{
URL : mustParseURL ( "http://remote1/push" ) ,
RemoteTimeout : model . Duration ( 30 * time . Second ) ,
2019-12-12 20:47:23 +00:00
Name : "drop_expensive" ,
2018-12-18 11:26:36 +00:00
WriteRelabelConfigs : [ ] * relabel . Config {
2017-02-13 20:43:20 +00:00
{
SourceLabels : model . LabelNames { "__name__" } ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "expensive.*" ) ,
2017-02-13 20:43:20 +00:00
Replacement : "$1" ,
2018-12-18 11:26:36 +00:00
Action : relabel . Drop ,
2017-02-13 20:43:20 +00:00
} ,
2016-10-01 15:42:43 +00:00
} ,
2021-04-28 12:47:52 +00:00
QueueConfig : DefaultQueueConfig ,
MetadataConfig : DefaultMetadataConfig ,
HTTPClientConfig : config . HTTPClientConfig {
OAuth2 : & config . OAuth2 {
ClientID : "123" ,
ClientSecret : "456" ,
TokenURL : "http://remote1/auth" ,
2021-10-20 21:10:18 +00:00
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
} ,
2021-04-28 12:47:52 +00:00
} ,
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2021-04-28 12:47:52 +00:00
} ,
2016-10-01 15:42:43 +00:00
} ,
2017-02-13 20:43:20 +00:00
{
2020-11-19 15:23:03 +00:00
URL : mustParseURL ( "http://remote2/push" ) ,
RemoteTimeout : model . Duration ( 30 * time . Second ) ,
QueueConfig : DefaultQueueConfig ,
MetadataConfig : DefaultMetadataConfig ,
Name : "rw_tls" ,
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
2019-03-12 10:24:15 +00:00
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2019-03-12 10:24:15 +00:00
} ,
2021-02-04 21:18:13 +00:00
Headers : map [ string ] string { "name" : "value" } ,
2017-02-13 20:43:20 +00:00
} ,
2016-10-01 15:42:43 +00:00
} ,
2017-10-18 11:08:14 +00:00
RemoteReadConfigs : [ ] * RemoteReadConfig {
{
2022-03-30 10:49:03 +00:00
URL : mustParseURL ( "http://remote1/read" ) ,
RemoteTimeout : model . Duration ( 1 * time . Minute ) ,
ReadRecent : true ,
Name : "default" ,
HTTPClientConfig : config . HTTPClientConfig {
FollowRedirects : true ,
EnableHTTP2 : false ,
} ,
2022-02-16 21:12:47 +00:00
FilterExternalLabels : true ,
2017-10-18 11:08:14 +00:00
} ,
{
2017-11-12 01:23:20 +00:00
URL : mustParseURL ( "http://remote3/read" ) ,
RemoteTimeout : model . Duration ( 1 * time . Minute ) ,
ReadRecent : false ,
2019-12-12 20:47:23 +00:00
Name : "read_special" ,
2017-11-12 01:23:20 +00:00
RequiredMatchers : model . LabelSet { "job" : "special" } ,
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
2019-03-12 10:24:15 +00:00
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2019-03-12 10:24:15 +00:00
} ,
2022-02-16 21:12:47 +00:00
FilterExternalLabels : true ,
2017-10-18 11:08:14 +00:00
} ,
} ,
2015-05-07 08:55:03 +00:00
ScrapeConfigs : [ ] * ScrapeConfig {
2015-06-04 15:03:12 +00:00
{
2015-05-07 08:55:03 +00:00
JobName : "prometheus" ,
2023-05-30 08:22:23 +00:00
HonorLabels : true ,
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-05-07 08:55:03 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
2021-02-18 22:14:49 +00:00
Authorization : & config . Authorization {
Type : "Bearer" ,
CredentialsFile : filepath . FromSlash ( "testdata/valid_token_file" ) ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2022-04-20 07:57:53 +00:00
TLSConfig : config . TLSConfig {
MinVersion : config . TLSVersion ( tls . VersionTLS10 ) ,
} ,
2016-11-23 11:41:19 +00:00
} ,
2015-08-05 16:04:34 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& file . SDConfig {
Files : [ ] string { "testdata/foo/*.slow.json" , "testdata/foo/*.slow.yml" , "testdata/single/file.yml" } ,
RefreshInterval : model . Duration ( 10 * time . Minute ) ,
} ,
& file . SDConfig {
Files : [ ] string { "testdata/bar/*.yaml" } ,
RefreshInterval : model . Duration ( 5 * time . Minute ) ,
} ,
discovery . StaticConfig {
2016-11-23 11:41:19 +00:00
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "localhost:9090" } ,
{ model . AddressLabel : "localhost:9191" } ,
} ,
Labels : model . LabelSet {
"my" : "label" ,
"your" : "label" ,
} ,
2018-06-13 15:34:59 +00:00
Source : "0" ,
2015-05-07 08:55:03 +00:00
} ,
} ,
2015-05-13 09:28:04 +00:00
} ,
2018-12-18 11:26:36 +00:00
RelabelConfigs : [ ] * relabel . Config {
2015-06-04 15:03:12 +00:00
{
2016-02-14 21:20:39 +00:00
SourceLabels : model . LabelNames { "job" , "__meta_dns_name" } ,
2015-05-07 08:55:03 +00:00
TargetLabel : "job" ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
2015-05-07 08:55:03 +00:00
Replacement : "foo-${1}" ,
2018-12-18 11:26:36 +00:00
Action : relabel . Replace ,
2022-11-10 13:17:47 +00:00
} ,
{
2015-11-16 12:16:13 +00:00
SourceLabels : model . LabelNames { "abc" } ,
TargetLabel : "cde" ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Replace ,
2022-11-10 13:17:47 +00:00
} ,
{
2015-11-16 12:16:13 +00:00
TargetLabel : "abc" ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . DefaultRelabelConfig . Regex ,
2015-11-16 12:16:13 +00:00
Replacement : "static" ,
2018-12-18 11:26:36 +00:00
Action : relabel . Replace ,
2022-11-10 13:17:47 +00:00
} ,
{
2016-11-03 13:34:15 +00:00
TargetLabel : "abc" ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "" ) ,
2016-11-03 13:34:15 +00:00
Replacement : "static" ,
2018-12-18 11:26:36 +00:00
Action : relabel . Replace ,
2015-06-04 15:03:12 +00:00
} ,
2022-11-10 13:17:47 +00:00
{
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 . DropEqual ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
} ,
2015-05-07 08:55:03 +00:00
} ,
2015-06-04 15:03:12 +00:00
} ,
{
2015-05-07 08:55:03 +00:00
JobName : "service-x" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 50 * time . Second ) ,
ScrapeTimeout : model . Duration ( 5 * time . Second ) ,
BodySizeLimit : 10 * units . MiB ,
SampleLimit : 1000 ,
TargetLimit : 35 ,
LabelLimit : 35 ,
LabelNameLengthLimit : 210 ,
LabelValueLengthLimit : 210 ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : [ ] ScrapeProtocol { PrometheusText0_0_4 } ,
2015-05-07 08:55:03 +00:00
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
BasicAuth : & config . BasicAuth {
2016-11-23 11:41:19 +00:00
Username : "admin_name" ,
2017-05-29 11:46:23 +00:00
Password : "multiline\nmysecret\ntest" ,
2016-11-23 11:41:19 +00:00
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2015-05-15 10:47:50 +00:00
} ,
2015-05-07 08:55:03 +00:00
MetricsPath : "/my_path" ,
2015-05-15 10:47:50 +00:00
Scheme : "https" ,
2015-05-07 08:55:03 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& dns . SDConfig {
Names : [ ] string {
"first.dns.address.domain.com" ,
"second.dns.address.domain.com" ,
2015-05-07 08:55:03 +00:00
} ,
2020-08-20 12:48:26 +00:00
RefreshInterval : model . Duration ( 15 * time . Second ) ,
Type : "SRV" ,
} ,
& dns . SDConfig {
Names : [ ] string {
"first.dns.address.domain.com" ,
2015-05-07 08:55:03 +00:00
} ,
2020-08-20 12:48:26 +00:00
RefreshInterval : model . Duration ( 30 * time . Second ) ,
Type : "SRV" ,
2015-06-04 15:03:12 +00:00
} ,
2015-05-07 08:55:03 +00:00
} ,
2018-12-18 11:26:36 +00:00
RelabelConfigs : [ ] * relabel . Config {
2015-06-04 15:03:12 +00:00
{
2015-08-20 15:18:46 +00:00
SourceLabels : model . LabelNames { "job" } ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "(.*)some-[regex]" ) ,
2015-05-07 08:55:03 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
2015-06-04 15:03:12 +00:00
} ,
2015-06-24 07:07:17 +00:00
{
2015-08-20 15:18:46 +00:00
SourceLabels : model . LabelNames { "__address__" } ,
2015-08-13 09:39:21 +00:00
TargetLabel : "__tmp_hash" ,
2018-12-18 11:26:36 +00:00
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
2015-06-24 07:07:17 +00:00
Modulus : 8 ,
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Action : relabel . HashMod ,
2015-06-24 07:07:17 +00:00
} ,
{
2015-08-20 15:18:46 +00:00
SourceLabels : model . LabelNames { "__tmp_hash" } ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "1" ) ,
2015-06-24 07:07:17 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Keep ,
2015-06-24 07:07:17 +00:00
} ,
2015-09-21 19:41:19 +00:00
{
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "1" ) ,
2015-11-16 12:16:13 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelMap ,
2015-09-21 19:41:19 +00:00
} ,
2016-12-14 10:17:42 +00:00
{
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "d" ) ,
2016-12-14 10:17:42 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelDrop ,
2016-12-14 10:17:42 +00:00
} ,
{
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "k" ) ,
2016-12-14 10:17:42 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . LabelKeep ,
2016-12-14 10:17:42 +00:00
} ,
2015-05-07 08:55:03 +00:00
} ,
2018-12-18 11:26:36 +00:00
MetricRelabelConfigs : [ ] * relabel . Config {
2015-06-12 21:16:13 +00:00
{
2015-08-20 15:18:46 +00:00
SourceLabels : model . LabelNames { "__name__" } ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "expensive_metric.*" ) ,
2015-06-12 21:16:13 +00:00
Separator : ";" ,
2018-12-18 11:26:36 +00:00
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Action : relabel . Drop ,
2015-06-12 21:16:13 +00:00
} ,
} ,
2015-06-04 15:03:12 +00:00
} ,
2015-06-12 11:39:12 +00:00
{
JobName : "service-y" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-06-12 11:39:12 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-06-12 11:39:12 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& consul . SDConfig {
Server : "localhost:1234" ,
2023-05-16 22:14:58 +00:00
PathPrefix : "/consul" ,
2020-08-20 12:48:26 +00:00
Token : "mysecret" ,
Services : [ ] string { "nginx" , "cache" , "mysql" } ,
ServiceTags : [ ] string { "canary" , "v1" } ,
NodeMeta : map [ string ] string { "rack" : "123" } ,
TagSeparator : consul . DefaultSDConfig . TagSeparator ,
Scheme : "https" ,
RefreshInterval : consul . DefaultSDConfig . RefreshInterval ,
AllowStale : true ,
2021-06-11 22:06:59 +00:00
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
CAFile : filepath . FromSlash ( "testdata/valid_ca_file" ) ,
InsecureSkipVerify : false ,
} ,
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2016-11-23 11:41:19 +00:00
} ,
2015-06-12 11:39:12 +00:00
} ,
} ,
2016-10-18 22:19:19 +00:00
2018-12-18 11:26:36 +00:00
RelabelConfigs : [ ] * relabel . Config {
2016-10-18 22:19:19 +00:00
{
SourceLabels : model . LabelNames { "__meta_sd_consul_tags" } ,
2018-12-18 11:26:36 +00:00
Regex : relabel . MustNewRegexp ( "label:([^=]+)=([^,]+)" ) ,
2016-10-18 22:19:19 +00:00
Separator : "," ,
TargetLabel : "${1}" ,
Replacement : "${2}" ,
2018-12-18 11:26:36 +00:00
Action : relabel . Replace ,
2016-10-18 22:19:19 +00:00
} ,
} ,
2015-06-12 11:39:12 +00:00
} ,
2015-07-22 15:48:22 +00:00
{
JobName : "service-z" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : model . Duration ( 10 * time . Second ) ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-07-22 15:48:22 +00:00
MetricsPath : "/metrics" ,
Scheme : "http" ,
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
2017-07-09 04:34:50 +00:00
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
2016-11-23 11:41:19 +00:00
} ,
2015-09-06 23:07:44 +00:00
2021-02-18 22:14:49 +00:00
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "mysecret" ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2016-11-23 11:41:19 +00:00
} ,
2015-07-22 15:48:22 +00:00
} ,
2015-07-18 21:23:58 +00:00
{
JobName : "service-kubernetes" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-07-18 21:23:58 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-07-18 21:23:58 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& kubernetes . SDConfig {
APIServer : kubernetesSDHostURL ( ) ,
Role : kubernetes . RoleEndpoint ,
HTTPClientConfig : config . HTTPClientConfig {
BasicAuth : & config . BasicAuth {
Username : "myusername" ,
Password : "mysecret" ,
} ,
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
2016-11-23 11:41:19 +00:00
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2017-04-19 12:36:34 +00:00
} ,
2020-08-20 12:48:26 +00:00
NamespaceDiscovery : kubernetes . NamespaceDiscovery { } ,
2017-04-19 12:36:34 +00:00
} ,
} ,
} ,
{
JobName : "service-kubernetes-namespaces" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2017-04-19 12:36:34 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
2020-08-20 12:48:26 +00:00
HTTPClientConfig : config . HTTPClientConfig {
BasicAuth : & config . BasicAuth {
2019-03-12 10:24:15 +00:00
Username : "myusername" ,
PasswordFile : filepath . FromSlash ( "testdata/valid_password_file" ) ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2019-03-12 10:24:15 +00:00
} ,
2017-04-19 12:36:34 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& kubernetes . SDConfig {
APIServer : kubernetesSDHostURL ( ) ,
Role : kubernetes . RoleEndpoint ,
NamespaceDiscovery : kubernetes . NamespaceDiscovery {
Names : [ ] string {
"default" ,
2017-04-19 12:36:34 +00:00
} ,
2015-10-23 15:47:10 +00:00
} ,
2021-02-26 21:48:06 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-07-18 21:23:58 +00:00
} ,
} ,
} ,
2021-05-04 19:47:44 +00:00
{
JobName : "service-kuma" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-05-04 19:47:44 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& xds . KumaSDConfig {
Server : "http://kuma-control-plane.kuma-system.svc:5676" ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
RefreshInterval : model . Duration ( 15 * time . Second ) ,
FetchTimeout : model . Duration ( 2 * time . Minute ) ,
} ,
} ,
} ,
2015-09-02 13:08:37 +00:00
{
JobName : "service-marathon" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-09-02 13:08:37 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-09-02 13:08:37 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& marathon . SDConfig {
Servers : [ ] string {
"https://marathon.example.com:443" ,
} ,
RefreshInterval : model . Duration ( 30 * time . Second ) ,
AuthToken : "mysecret" ,
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
2016-11-23 11:41:19 +00:00
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2022-06-25 20:47:42 +00:00
} ,
} ,
} ,
} ,
{
JobName : "service-nomad" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2022-06-25 20:47:42 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& nomad . SDConfig {
AllowStale : true ,
Namespace : "default" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Region : "global" ,
Server : "http://localhost:4646" ,
TagSeparator : "," ,
HTTPClientConfig : config . HTTPClientConfig {
FollowRedirects : true ,
EnableHTTP2 : true ,
2016-09-29 12:57:28 +00:00
} ,
2015-09-02 13:08:37 +00:00
} ,
} ,
} ,
2015-09-21 18:49:19 +00:00
{
JobName : "service-ec2" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2015-09-21 18:49:19 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-09-21 18:49:19 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
2021-04-28 09:29:12 +00:00
& aws . EC2SDConfig {
2020-08-20 12:48:26 +00:00
Region : "us-east-1" ,
AccessKey : "access" ,
SecretKey : "mysecret" ,
Profile : "profile" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Port : 80 ,
2021-04-28 09:29:12 +00:00
Filters : [ ] * aws . EC2Filter {
2020-08-20 12:48:26 +00:00
{
Name : "tag:environment" ,
Values : [ ] string { "prod" } ,
} ,
{
Name : "tag:service" ,
Values : [ ] string { "web" , "db" } ,
2018-03-31 06:51:11 +00:00
} ,
2016-11-23 11:41:19 +00:00
} ,
2022-11-22 15:09:14 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2015-09-21 18:49:19 +00:00
} ,
} ,
} ,
2021-04-28 09:29:12 +00:00
{
JobName : "service-lightsail" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-04-28 09:29:12 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& aws . LightsailSDConfig {
2022-11-22 15:09:14 +00:00
Region : "us-east-1" ,
AccessKey : "access" ,
SecretKey : "mysecret" ,
Profile : "profile" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Port : 80 ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-04-28 09:29:12 +00:00
} ,
} ,
} ,
2016-04-07 03:47:02 +00:00
{
JobName : "service-azure" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2016-04-07 03:47:02 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-04-07 03:47:02 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& azure . SDConfig {
Environment : "AzurePublicCloud" ,
SubscriptionID : "11AAAA11-A11A-111A-A111-1111A1111A11" ,
2022-03-28 23:21:23 +00:00
ResourceGroup : "my-resource-group" ,
2020-08-20 12:48:26 +00:00
TenantID : "BBBB222B-B2B2-2B22-B222-2BB2222BB2B2" ,
ClientID : "333333CC-3C33-3333-CCC3-33C3CCCCC33C" ,
ClientSecret : "mysecret" ,
AuthenticationMethod : "OAuth" ,
RefreshInterval : model . Duration ( 5 * time . Minute ) ,
Port : 9100 ,
2021-10-20 21:09:58 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-04-07 03:47:02 +00:00
} ,
} ,
} ,
2016-01-09 23:34:32 +00:00
{
JobName : "service-nerve" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2016-01-09 23:34:32 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-01-09 23:34:32 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& zookeeper . NerveSDConfig {
Servers : [ ] string { "localhost" } ,
Paths : [ ] string { "/monitoring" } ,
Timeout : model . Duration ( 10 * time . Second ) ,
2016-01-09 23:34:32 +00:00
} ,
} ,
} ,
2016-09-15 06:00:14 +00:00
{
JobName : "0123service-xxx" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2016-09-15 06:00:14 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-09-15 06:00:14 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
2016-11-23 11:41:19 +00:00
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "localhost:9090" } ,
} ,
2018-06-13 15:34:59 +00:00
Source : "0" ,
2016-09-15 06:00:14 +00:00
} ,
} ,
} ,
} ,
2019-03-15 10:04:15 +00:00
{
JobName : "badfederation" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : false ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2019-03-15 10:04:15 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : "/federate" ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2019-03-15 10:04:15 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
2019-03-15 10:04:15 +00:00
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "localhost:9090" } ,
} ,
Source : "0" ,
} ,
} ,
} ,
} ,
2016-09-15 06:00:14 +00:00
{
JobName : "測試" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2016-09-15 06:00:14 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-09-15 06:00:14 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
2016-11-23 11:41:19 +00:00
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "localhost:9090" } ,
} ,
2018-06-13 15:34:59 +00:00
Source : "0" ,
2016-09-15 06:00:14 +00:00
} ,
} ,
} ,
} ,
2021-06-11 16:04:45 +00:00
{
JobName : "httpsd" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-06-11 16:04:45 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& http . SDConfig {
HTTPClientConfig : config . DefaultHTTPClientConfig ,
URL : "http://example.com/prometheus" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
} ,
} ,
} ,
2016-12-28 02:16:47 +00:00
{
JobName : "service-triton" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2016-12-28 02:16:47 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2016-12-28 02:16:47 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& triton . SDConfig {
Account : "testAccount" ,
Role : "container" ,
DNSSuffix : "triton.example.com" ,
Endpoint : "triton.example.com" ,
Port : 9163 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Version : 1 ,
TLSConfig : config . TLSConfig {
CertFile : "testdata/valid_cert_file" ,
KeyFile : "testdata/valid_key_file" ,
2018-09-24 14:08:42 +00:00
} ,
} ,
} ,
} ,
2020-07-21 21:28:43 +00:00
{
JobName : "digitalocean-droplets" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2020-07-21 21:28:43 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-07-21 21:28:43 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& digitalocean . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
2021-02-18 22:14:49 +00:00
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "abcdef" ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2020-07-21 21:28:43 +00:00
} ,
2020-08-20 12:48:26 +00:00
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
2020-07-21 21:28:43 +00:00
} ,
} ,
} ,
2021-03-29 20:30:23 +00:00
{
JobName : "docker" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-03-29 20:30:23 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
2021-04-13 07:33:54 +00:00
& moby . DockerSDConfig {
2021-08-03 11:58:49 +00:00
Filters : [ ] moby . Filter { } ,
Host : "unix:///var/run/docker.sock" ,
Port : 80 ,
HostNetworkingHost : "localhost" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-03-29 20:30:23 +00:00
} ,
} ,
} ,
2020-07-21 21:24:43 +00:00
{
JobName : "dockerswarm" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2020-07-21 21:24:43 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-07-21 21:24:43 +00:00
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
2021-04-13 07:33:54 +00:00
& moby . DockerSwarmSDConfig {
Filters : [ ] moby . Filter { } ,
2021-02-26 21:48:06 +00:00
Host : "http://127.0.0.1:2375" ,
Role : "nodes" ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-07-21 21:24:43 +00:00
} ,
} ,
} ,
2018-09-24 14:08:42 +00:00
{
JobName : "service-openstack" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2018-09-24 14:08:42 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2018-09-24 14:08:42 +00:00
2021-10-22 08:06:44 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& openstack . SDConfig {
Role : "instance" ,
Region : "RegionOne" ,
Port : 80 ,
Availability : "public" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
TLSConfig : config . TLSConfig {
CAFile : "testdata/valid_ca_file" ,
CertFile : "testdata/valid_cert_file" ,
KeyFile : "testdata/valid_key_file" ,
} ,
} ,
2016-12-28 02:16:47 +00:00
} ,
} ,
2021-06-01 12:04:58 +00:00
{
JobName : "service-puppetdb" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-06-01 12:04:58 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-10-22 08:06:44 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& puppetdb . SDConfig {
URL : "https://puppetserver/" ,
Query : "resources { type = \"Package\" and title = \"httpd\" }" ,
IncludeParameters : true ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
HTTPClientConfig : config . HTTPClientConfig {
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2021-10-22 08:06:44 +00:00
TLSConfig : config . TLSConfig {
CAFile : "testdata/valid_ca_file" ,
CertFile : "testdata/valid_cert_file" ,
KeyFile : "testdata/valid_key_file" ,
} ,
2021-06-01 12:04:58 +00:00
} ,
} ,
} ,
} ,
2020-08-21 13:49:19 +00:00
{
2023-05-30 08:22:23 +00:00
JobName : "hetzner" ,
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2020-08-21 13:49:19 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-08-21 13:49:19 +00:00
2022-05-03 08:09:53 +00:00
RelabelConfigs : [ ] * relabel . Config {
{
Action : relabel . Uppercase ,
Regex : relabel . DefaultRelabelConfig . Regex ,
Replacement : relabel . DefaultRelabelConfig . Replacement ,
Separator : relabel . DefaultRelabelConfig . Separator ,
SourceLabels : model . LabelNames { "instance" } ,
TargetLabel : "instance" ,
} ,
} ,
2020-08-21 13:49:19 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& hetzner . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
2021-02-18 22:14:49 +00:00
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "abcdef" ,
} ,
2021-02-26 21:48:06 +00:00
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2020-08-21 13:49:19 +00:00
} ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Role : "hcloud" ,
} ,
& hetzner . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
2021-02-26 21:48:06 +00:00
BasicAuth : & config . BasicAuth { Username : "abcdef" , Password : "abcdef" } ,
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2020-08-21 13:49:19 +00:00
} ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Role : "robot" ,
} ,
} ,
} ,
2020-08-26 15:36:59 +00:00
{
JobName : "service-eureka" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2020-08-26 15:36:59 +00:00
2021-02-26 21:48:06 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-08-26 15:36:59 +00:00
2021-02-26 21:48:06 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& eureka . SDConfig {
Server : "http://eureka.example.com:8761/eureka" ,
RefreshInterval : model . Duration ( 30 * time . Second ) ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
} ,
2020-08-26 15:36:59 +00:00
} ,
} ,
2022-11-03 09:20:09 +00:00
{
JobName : "ovhcloud" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-05-30 08:22:23 +00:00
2022-11-03 09:20:09 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
ServiceDiscoveryConfigs : discovery . Configs {
& ovhcloud . SDConfig {
Endpoint : "ovh-eu" ,
ApplicationKey : "testAppKey" ,
ApplicationSecret : "testAppSecret" ,
ConsumerKey : "testConsumerKey" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Service : "vps" ,
} ,
& ovhcloud . SDConfig {
Endpoint : "ovh-eu" ,
ApplicationKey : "testAppKey" ,
ApplicationSecret : "testAppSecret" ,
ConsumerKey : "testConsumerKey" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Service : "dedicated_server" ,
} ,
} ,
} ,
2021-03-10 14:10:17 +00:00
{
JobName : "scaleway" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-05-30 08:22:23 +00:00
2022-03-30 10:49:03 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
2021-03-10 14:10:17 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
& scaleway . SDConfig {
APIURL : "https://api.scaleway.com" ,
AccessKey : "SCWXXXXXXXXXXXXXXXXX" ,
2022-03-30 10:49:03 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-03-10 14:10:17 +00:00
Port : 80 ,
Project : "11111111-1111-1111-1111-111111111112" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Role : "instance" ,
SecretKey : "11111111-1111-1111-1111-111111111111" ,
Zone : "fr-par-1" ,
} ,
& scaleway . SDConfig {
APIURL : "https://api.scaleway.com" ,
AccessKey : "SCWXXXXXXXXXXXXXXXXX" ,
2022-03-30 10:49:03 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-03-10 14:10:17 +00:00
Port : 80 ,
Project : "11111111-1111-1111-1111-111111111112" ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
Role : "baremetal" ,
SecretKey : "11111111-1111-1111-1111-111111111111" ,
Zone : "fr-par-1" ,
} ,
} ,
} ,
2021-06-01 18:32:36 +00:00
{
JobName : "linode-instances" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2021-06-01 18:32:36 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& linode . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "abcdef" ,
} ,
FollowRedirects : true ,
2022-03-30 10:49:03 +00:00
EnableHTTP2 : true ,
2021-06-01 18:32:36 +00:00
} ,
Port : 80 ,
TagSeparator : linode . DefaultSDConfig . TagSeparator ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
} ,
} ,
} ,
2021-10-18 23:00:44 +00:00
{
JobName : "uyuni" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-05-30 08:22:23 +00:00
2022-03-30 10:49:03 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-10-18 23:00:44 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
ServiceDiscoveryConfigs : discovery . Configs {
& uyuni . SDConfig {
2022-06-08 09:29:44 +00:00
Server : "https://localhost:1234" ,
Username : "gopher" ,
Password : "hole" ,
Entitlement : "monitoring_entitled" ,
Separator : "," ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2021-10-18 23:00:44 +00:00
} ,
} ,
} ,
2022-05-20 12:57:23 +00:00
{
2023-05-30 08:22:23 +00:00
JobName : "ionos" ,
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2022-05-20 12:57:23 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& ionos . SDConfig {
DatacenterID : "8feda53f-15f0-447f-badf-ebe32dad2fc0" ,
HTTPClientConfig : config . HTTPClientConfig {
Authorization : & config . Authorization { Type : "Bearer" , Credentials : "abcdef" } ,
FollowRedirects : true ,
EnableHTTP2 : true ,
} ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
} ,
} ,
} ,
2022-05-24 16:03:49 +00:00
{
JobName : "vultr" ,
2023-05-30 08:22:23 +00:00
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
BodySizeLimit : globBodySizeLimit ,
SampleLimit : globSampleLimit ,
TargetLimit : globTargetLimit ,
LabelLimit : globLabelLimit ,
LabelNameLengthLimit : globLabelNameLengthLimit ,
LabelValueLengthLimit : globLabelValueLengthLimit ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2022-05-24 16:03:49 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
& vultr . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "abcdef" ,
} ,
FollowRedirects : true ,
EnableHTTP2 : true ,
} ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
} ,
} ,
} ,
2015-05-07 08:55:03 +00:00
} ,
2016-11-23 11:42:33 +00:00
AlertingConfig : AlertingConfig {
2016-11-24 14:17:50 +00:00
AlertmanagerConfigs : [ ] * AlertmanagerConfig {
2016-11-23 11:42:33 +00:00
{
2021-02-26 21:48:06 +00:00
Scheme : "https" ,
Timeout : model . Duration ( 10 * time . Second ) ,
2021-03-19 17:19:12 +00:00
APIVersion : AlertmanagerAPIVersionV2 ,
2021-02-26 21:48:06 +00:00
HTTPClientConfig : config . DefaultHTTPClientConfig ,
2020-08-20 12:48:26 +00:00
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
2016-11-23 11:42:33 +00:00
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "1.2.3.4:9093" } ,
{ model . AddressLabel : "1.2.3.5:9093" } ,
{ model . AddressLabel : "1.2.3.6:9093" } ,
} ,
2018-06-13 15:34:59 +00:00
Source : "0" ,
2016-11-23 11:42:33 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
2022-09-28 14:31:21 +00:00
StorageConfig : StorageConfig {
TSDBConfig : & TSDBConfig {
OutOfOrderTimeWindow : 30 * time . Minute . Milliseconds ( ) ,
OutOfOrderTimeWindowFlag : model . Duration ( 30 * time . Minute ) ,
} ,
} ,
2022-01-25 10:08:04 +00:00
TracingConfig : TracingConfig {
2022-02-22 16:07:30 +00:00
Endpoint : "localhost:4317" ,
ClientType : TracingClientGRPC ,
Insecure : false ,
Compression : "gzip" ,
Timeout : model . Duration ( 5 * time . Second ) ,
Headers : map [ string ] string { "foo" : "bar" } ,
TLSConfig : config . TLSConfig {
CertFile : "testdata/valid_cert_file" ,
KeyFile : "testdata/valid_key_file" ,
InsecureSkipVerify : true ,
} ,
2022-01-25 10:08:04 +00:00
} ,
2020-08-20 12:48:26 +00:00
}
func TestYAMLRoundtrip ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
want , err := LoadFile ( "testdata/roundtrip.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2020-08-20 12:48:26 +00:00
out , err := yaml . Marshal ( want )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2020-08-20 12:48:26 +00:00
got := & Config { }
2020-10-29 09:43:23 +00:00
require . NoError ( t , yaml . UnmarshalStrict ( out , got ) )
2020-08-20 12:48:26 +00:00
2020-10-29 09:43:23 +00:00
require . Equal ( t , want , got )
2015-06-04 15:03:12 +00:00
}
2015-05-07 08:55:03 +00:00
2021-02-11 17:24:49 +00:00
func TestRemoteWriteRetryOnRateLimit ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
want , err := LoadFile ( "testdata/remote_write_retry_on_rate_limit.good.yml" , false , false , log . NewNopLogger ( ) )
2021-02-11 17:24:49 +00:00
require . NoError ( t , err )
out , err := yaml . Marshal ( want )
require . NoError ( t , err )
got := & Config { }
require . NoError ( t , yaml . UnmarshalStrict ( out , got ) )
require . Equal ( t , true , got . RemoteWriteConfigs [ 0 ] . QueueConfig . RetryOnRateLimit )
require . Equal ( t , false , got . RemoteWriteConfigs [ 1 ] . QueueConfig . RetryOnRateLimit )
}
2015-05-07 08:55:03 +00:00
func TestLoadConfig ( t * testing . T ) {
2015-06-07 15:40:22 +00:00
// Parse a valid file that sets a global scrape timeout. This tests whether parsing
// an overwritten default field in the global config permanently changes the default.
2021-10-29 23:41:40 +00:00
_ , err := LoadFile ( "testdata/global_timeout.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2015-06-07 15:40:22 +00:00
2021-10-29 23:41:40 +00:00
c , err := LoadFile ( "testdata/conf.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
require . Equal ( t , expectedConf , c )
2017-05-11 15:09:24 +00:00
}
2015-07-06 12:25:20 +00:00
2019-09-23 11:26:56 +00:00
func TestScrapeIntervalLarger ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
c , err := LoadFile ( "testdata/scrape_interval_larger.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
require . Equal ( t , 1 , len ( c . ScrapeConfigs ) )
2019-09-23 11:26:56 +00:00
for _ , sc := range c . ScrapeConfigs {
2020-10-29 09:43:23 +00:00
require . Equal ( t , true , sc . ScrapeInterval >= sc . ScrapeTimeout )
2019-09-23 11:26:56 +00:00
}
}
2018-11-27 16:44:29 +00:00
// YAML marshaling must not reveal authentication credentials.
2017-05-11 15:09:24 +00:00
func TestElideSecrets ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
c , err := LoadFile ( "testdata/conf.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2017-05-29 11:46:23 +00:00
2017-05-11 15:09:24 +00:00
secretRe := regexp . MustCompile ( ` \\u003csecret\\u003e|<secret> ` )
config , err := yaml . Marshal ( c )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2017-05-11 15:09:24 +00:00
yamlConfig := string ( config )
matches := secretRe . FindAllStringIndex ( yamlConfig , - 1 )
2022-11-03 09:20:09 +00:00
require . Equal ( t , 22 , len ( matches ) , "wrong number of secret matches found" )
2020-10-29 09:43:23 +00:00
require . NotContains ( t , yamlConfig , "mysecret" ,
2017-10-10 10:29:15 +00:00
"yaml marshal reveals authentication credentials." )
2015-05-07 08:55:03 +00:00
}
2017-07-09 04:34:50 +00:00
func TestLoadConfigRuleFilesAbsolutePath ( t * testing . T ) {
// Parse a valid file that sets a rule files with an absolute path
2021-10-29 23:41:40 +00:00
c , err := LoadFile ( ruleFilesConfigFile , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
require . Equal ( t , ruleFilesExpectedConf , c )
2017-07-09 04:34:50 +00:00
}
2019-02-22 14:51:47 +00:00
func TestKubernetesEmptyAPIServer ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
_ , err := LoadFile ( "testdata/kubernetes_empty_apiserver.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2019-02-22 14:51:47 +00:00
}
2021-06-17 10:41:50 +00:00
func TestKubernetesWithKubeConfig ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
_ , err := LoadFile ( "testdata/kubernetes_kubeconfig_without_apiserver.good.yml" , false , false , log . NewNopLogger ( ) )
2021-06-17 10:41:50 +00:00
require . NoError ( t , err )
}
2019-10-03 11:55:42 +00:00
func TestKubernetesSelectors ( t * testing . T ) {
2021-10-29 23:41:40 +00:00
_ , err := LoadFile ( "testdata/kubernetes_selectors_endpoints.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2021-10-29 23:41:40 +00:00
_ , err = LoadFile ( "testdata/kubernetes_selectors_node.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2021-10-29 23:41:40 +00:00
_ , err = LoadFile ( "testdata/kubernetes_selectors_ingress.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2021-10-29 23:41:40 +00:00
_ , err = LoadFile ( "testdata/kubernetes_selectors_pod.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2021-10-29 23:41:40 +00:00
_ , err = LoadFile ( "testdata/kubernetes_selectors_service.good.yml" , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2019-10-03 11:55:42 +00:00
}
2015-05-07 08:55:03 +00:00
var expectedErrors = [ ] struct {
filename string
errMsg string
2013-02-14 00:04:07 +00:00
} {
{
2015-05-07 08:55:03 +00:00
filename : "jobname.bad.yml" ,
2016-09-15 06:00:14 +00:00
errMsg : ` job_name is empty ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-05-07 08:55:03 +00:00
filename : "jobname_dup.bad.yml" ,
errMsg : ` found multiple scrape configs with job name "prometheus" ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2016-02-12 11:51:55 +00:00
filename : "scrape_interval.bad.yml" ,
errMsg : ` scrape timeout greater than scrape interval ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-05-07 08:55:03 +00:00
filename : "labelname.bad.yml" ,
errMsg : ` "not$allowed" is not a valid label name ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-06-06 07:55:22 +00:00
filename : "labelname2.bad.yml" ,
errMsg : ` "not:allowed" is not a valid label name ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-03-14 21:16:29 +00:00
filename : "labelvalue.bad.yml" ,
errMsg : ` "\xff" is not a valid label value ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-05-07 08:55:03 +00:00
filename : "regex.bad.yml" ,
errMsg : "error parsing regexp" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-06-24 07:07:17 +00:00
filename : "modulus_missing.bad.yml" ,
errMsg : "relabel configuration for hashmod requires non-zero modulus" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labelkeep.bad.yml" ,
errMsg : "labelkeep action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labelkeep2.bad.yml" ,
errMsg : "labelkeep action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labelkeep3.bad.yml" ,
errMsg : "labelkeep action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labelkeep4.bad.yml" ,
errMsg : "labelkeep action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labelkeep5.bad.yml" ,
errMsg : "labelkeep action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labeldrop.bad.yml" ,
errMsg : "labeldrop action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labeldrop2.bad.yml" ,
errMsg : "labeldrop action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labeldrop3.bad.yml" ,
errMsg : "labeldrop action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labeldrop4.bad.yml" ,
errMsg : "labeldrop action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-03-18 21:32:08 +00:00
filename : "labeldrop5.bad.yml" ,
errMsg : "labeldrop action requires only 'regex', and no other fields" ,
2021-10-22 08:06:44 +00:00
} ,
2022-11-10 13:17:47 +00:00
{
filename : "dropequal.bad.yml" ,
errMsg : "relabel configuration for dropequal action requires 'target_label' value" ,
} ,
{
filename : "dropequal1.bad.yml" ,
errMsg : "dropequal action requires only 'source_labels' and `target_label`, and no other fields" ,
} ,
{
filename : "keepequal.bad.yml" ,
errMsg : "relabel configuration for keepequal action requires 'target_label' value" ,
} ,
{
filename : "keepequal1.bad.yml" ,
errMsg : "keepequal action requires only 'source_labels' and `target_label`, and no other fields" ,
} ,
2021-10-22 08:06:44 +00:00
{
2018-02-21 10:02:22 +00:00
filename : "labelmap.bad.yml" ,
errMsg : "\"l-$1\" is invalid 'replacement' for labelmap action" ,
2021-10-22 08:06:44 +00:00
} ,
2022-05-03 08:09:53 +00:00
{
filename : "lowercase.bad.yml" ,
errMsg : "relabel configuration for lowercase action requires 'target_label' value" ,
} ,
{
filename : "lowercase2.bad.yml" ,
errMsg : "\"42lab\" is invalid 'target_label' for lowercase action" ,
} ,
{
filename : "lowercase3.bad.yml" ,
errMsg : "'replacement' can not be set for lowercase action" ,
} ,
{
filename : "uppercase.bad.yml" ,
errMsg : "relabel configuration for uppercase action requires 'target_label' value" ,
} ,
{
filename : "uppercase2.bad.yml" ,
errMsg : "\"42lab\" is invalid 'target_label' for uppercase action" ,
} ,
{
filename : "uppercase3.bad.yml" ,
errMsg : "'replacement' can not be set for uppercase action" ,
} ,
2021-10-22 08:06:44 +00:00
{
2015-05-28 05:36:21 +00:00
filename : "rules.bad.yml" ,
errMsg : "invalid rule file path" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-06-12 11:39:59 +00:00
filename : "unknown_attr.bad.yml" ,
2020-08-20 12:48:26 +00:00
errMsg : "field consult_sd_configs not found in type" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-07-22 15:48:22 +00:00
filename : "bearertoken.bad.yml" ,
errMsg : "at most one of bearer_token & bearer_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-07-22 15:48:22 +00:00
filename : "bearertoken_basicauth.bad.yml" ,
2021-04-28 12:47:52 +00:00
errMsg : "at most one of basic_auth, oauth2, bearer_token & bearer_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-02-20 10:22:34 +00:00
filename : "kubernetes_http_config_without_api_server.bad.yml" ,
errMsg : "to use custom HTTP client configuration please provide the 'api_server' URL explicitly" ,
2021-10-22 08:06:44 +00:00
} ,
2022-02-01 13:59:09 +00:00
{
filename : "kubernetes_kubeconfig_with_own_namespace.bad.yml" ,
errMsg : "cannot use 'kubeconfig_file' and 'namespaces.own_namespace' simultaneously" ,
} ,
{
filename : "kubernetes_api_server_with_own_namespace.bad.yml" ,
errMsg : "cannot use 'api_server' and 'namespaces.own_namespace' simultaneously" ,
} ,
2021-10-22 08:06:44 +00:00
{
2021-06-17 10:41:50 +00:00
filename : "kubernetes_kubeconfig_with_apiserver.bad.yml" ,
errMsg : "cannot use 'kubeconfig_file' and 'api_server' simultaneously" ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-06-17 10:41:50 +00:00
filename : "kubernetes_kubeconfig_with_http_config.bad.yml" ,
errMsg : "cannot use a custom HTTP client configuration together with 'kubeconfig_file'" ,
} ,
{
2015-10-23 15:47:10 +00:00
filename : "kubernetes_bearertoken.bad.yml" ,
errMsg : "at most one of bearer_token & bearer_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2016-07-18 13:16:27 +00:00
filename : "kubernetes_role.bad.yml" ,
errMsg : "role" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-10-03 11:55:42 +00:00
filename : "kubernetes_selectors_endpoints.bad.yml" ,
2020-02-07 14:13:44 +00:00
errMsg : "endpoints role supports only pod, service, endpoints selectors" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-10-03 11:55:42 +00:00
filename : "kubernetes_selectors_ingress.bad.yml" ,
errMsg : "ingress role supports only ingress selectors" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-10-03 11:55:42 +00:00
filename : "kubernetes_selectors_node.bad.yml" ,
errMsg : "node role supports only node selectors" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-10-03 11:55:42 +00:00
filename : "kubernetes_selectors_pod.bad.yml" ,
errMsg : "pod role supports only pod selectors" ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-10-03 11:55:42 +00:00
filename : "kubernetes_selectors_service.bad.yml" ,
errMsg : "service role supports only service selectors" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-04-19 12:36:34 +00:00
filename : "kubernetes_namespace_discovery.bad.yml" ,
2018-04-04 08:07:39 +00:00
errMsg : "field foo not found in type kubernetes.plain" ,
2021-10-22 08:06:44 +00:00
} ,
{
2020-02-07 14:13:44 +00:00
filename : "kubernetes_selectors_duplicated_role.bad.yml" ,
errMsg : "duplicated selector role: pod" ,
2021-10-22 08:06:44 +00:00
} ,
{
2020-02-07 14:13:44 +00:00
filename : "kubernetes_selectors_incorrect_selector.bad.yml" ,
errMsg : "invalid selector: 'metadata.status-Running'; can't understand 'metadata.status-Running'" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-10-23 15:47:10 +00:00
filename : "kubernetes_bearertoken_basicauth.bad.yml" ,
2021-04-28 12:47:52 +00:00
errMsg : "at most one of basic_auth, oauth2, bearer_token & bearer_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-02-18 22:14:49 +00:00
filename : "kubernetes_authorization_basicauth.bad.yml" ,
2021-04-28 12:47:52 +00:00
errMsg : "at most one of basic_auth, oauth2 & authorization must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-09-02 13:08:37 +00:00
filename : "marathon_no_servers.bad.yml" ,
2018-04-05 08:08:18 +00:00
errMsg : "marathon_sd: must contain at least one Marathon server" ,
2021-10-22 08:06:44 +00:00
} ,
{
2018-04-05 08:08:18 +00:00
filename : "marathon_authtoken_authtokenfile.bad.yml" ,
errMsg : "marathon_sd: at most one of auth_token & auth_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2018-04-05 08:08:18 +00:00
filename : "marathon_authtoken_basicauth.bad.yml" ,
errMsg : "marathon_sd: at most one of basic_auth, auth_token & auth_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2018-04-05 08:08:18 +00:00
filename : "marathon_authtoken_bearertoken.bad.yml" ,
errMsg : "marathon_sd: at most one of bearer_token, bearer_token_file, auth_token & auth_token_file must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-02-18 22:14:49 +00:00
filename : "marathon_authtoken_authorization.bad.yml" ,
errMsg : "marathon_sd: at most one of auth_token, auth_token_file & authorization must be configured" ,
2021-10-22 08:06:44 +00:00
} ,
{
2018-09-13 16:14:27 +00:00
filename : "openstack_role.bad.yml" ,
errMsg : "unknown OpenStack SD role" ,
2021-10-22 08:06:44 +00:00
} ,
{
2020-07-02 14:17:56 +00:00
filename : "openstack_availability.bad.yml" ,
errMsg : "unknown availability invalid, must be one of admin, internal or public" ,
2021-10-22 08:06:44 +00:00
} ,
{
2015-11-07 14:25:51 +00:00
filename : "url_in_targetgroup.bad.yml" ,
errMsg : "\"http://bad\" is not a valid hostname" ,
2021-10-22 08:06:44 +00:00
} ,
{
2016-08-29 14:01:45 +00:00
filename : "target_label_missing.bad.yml" ,
errMsg : "relabel configuration for replace action requires 'target_label' value" ,
2021-10-22 08:06:44 +00:00
} ,
{
2016-08-29 14:01:45 +00:00
filename : "target_label_hashmod_missing.bad.yml" ,
errMsg : "relabel configuration for hashmod action requires 'target_label' value" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-05-30 18:58:06 +00:00
filename : "unknown_global_attr.bad.yml" ,
2018-04-04 08:07:39 +00:00
errMsg : "field nonexistent_field not found in type config.plain" ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-08-07 07:49:45 +00:00
filename : "remote_read_url_missing.bad.yml" ,
errMsg : ` url for remote_read is empty ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-02-04 21:18:13 +00:00
filename : "remote_write_header.bad.yml" ,
2021-02-18 12:12:21 +00:00
errMsg : ` x-prometheus-remote-write-version is a reserved header. It must not be changed ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-02-18 12:12:21 +00:00
filename : "remote_read_header.bad.yml" ,
errMsg : ` x-prometheus-remote-write-version is a reserved header. It must not be changed ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2021-02-04 21:18:13 +00:00
filename : "remote_write_authorization_header.bad.yml" ,
2023-06-01 21:20:10 +00:00
errMsg : ` authorization header must be changed via the basic_auth, authorization, oauth2, sigv4, or azuread parameter ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2017-08-07 07:49:45 +00:00
filename : "remote_write_url_missing.bad.yml" ,
errMsg : ` url for remote_write is empty ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-12-12 20:47:23 +00:00
filename : "remote_write_dup.bad.yml" ,
errMsg : ` found multiple remote write configs with job name "queue1" ` ,
2021-10-22 08:06:44 +00:00
} ,
{
2019-12-12 20:47:23 +00:00
filename : "remote_read_dup.bad.yml" ,
errMsg : ` found multiple remote read configs with job name "queue1" ` ,
2013-12-03 10:59:38 +00:00
} ,
2018-03-31 06:51:11 +00:00
{
filename : "ec2_filters_empty_values.bad.yml" ,
errMsg : ` EC2 SD configuration filter values cannot be empty ` ,
} ,
2023-09-08 06:16:03 +00:00
{
filename : "ec2_token_file.bad.yml" ,
errMsg : ` at most one of bearer_token & bearer_token_file must be configured ` ,
} ,
2023-09-08 12:24:53 +00:00
{
filename : "lightsail_token_file.bad.yml" ,
errMsg : ` at most one of bearer_token & bearer_token_file must be configured ` ,
} ,
2018-04-04 08:07:39 +00:00
{
filename : "section_key_dup.bad.yml" ,
errMsg : "field scrape_configs already set in type config.plain" ,
} ,
2018-11-29 15:47:59 +00:00
{
filename : "azure_client_id_missing.bad.yml" ,
2019-01-04 13:47:38 +00:00
errMsg : "azure SD configuration requires a client_id" ,
2018-11-29 15:47:59 +00:00
} ,
{
filename : "azure_client_secret_missing.bad.yml" ,
2019-01-04 13:47:38 +00:00
errMsg : "azure SD configuration requires a client_secret" ,
2018-11-29 15:47:59 +00:00
} ,
{
filename : "azure_subscription_id_missing.bad.yml" ,
2019-01-04 13:47:38 +00:00
errMsg : "azure SD configuration requires a subscription_id" ,
2018-11-29 15:47:59 +00:00
} ,
{
filename : "azure_tenant_id_missing.bad.yml" ,
2019-01-04 13:47:38 +00:00
errMsg : "azure SD configuration requires a tenant_id" ,
2018-11-29 15:47:59 +00:00
} ,
2018-12-19 10:03:33 +00:00
{
filename : "azure_authentication_method.bad.yml" ,
2019-01-04 13:47:38 +00:00
errMsg : "unknown authentication_type \"invalid\". Supported types are \"OAuth\" or \"ManagedIdentity\"" ,
2018-12-19 10:03:33 +00:00
} ,
2023-09-08 06:30:18 +00:00
{
filename : "azure_bearertoken_basicauth.bad.yml" ,
errMsg : "at most one of basic_auth, oauth2, bearer_token & bearer_token_file must be configured" ,
} ,
2018-12-03 10:09:02 +00:00
{
filename : "empty_scrape_config.bad.yml" ,
errMsg : "empty or null scrape config section" ,
} ,
{
filename : "empty_rw_config.bad.yml" ,
errMsg : "empty or null remote write config section" ,
} ,
{
filename : "empty_rr_config.bad.yml" ,
errMsg : "empty or null remote read config section" ,
} ,
{
filename : "empty_target_relabel_config.bad.yml" ,
errMsg : "empty or null target relabeling rule" ,
} ,
{
filename : "empty_metric_relabel_config.bad.yml" ,
errMsg : "empty or null metric relabeling rule" ,
} ,
{
filename : "empty_alert_relabel_config.bad.yml" ,
errMsg : "empty or null alert relabeling rule" ,
} ,
{
filename : "empty_alertmanager_relabel_config.bad.yml" ,
errMsg : "empty or null Alertmanager target relabeling rule" ,
} ,
{
filename : "empty_rw_relabel_config.bad.yml" ,
errMsg : "empty or null relabeling rule in remote write config" ,
} ,
{
filename : "empty_static_config.bad.yml" ,
errMsg : "empty or null section in static_configs" ,
} ,
2021-06-01 12:04:58 +00:00
{
filename : "puppetdb_no_query.bad.yml" ,
errMsg : "query missing" ,
} ,
{
filename : "puppetdb_no_url.bad.yml" ,
2021-09-16 16:29:32 +00:00
errMsg : "URL is missing" ,
2021-06-01 12:04:58 +00:00
} ,
{
filename : "puppetdb_bad_url.bad.yml" ,
errMsg : "host is missing in URL" ,
} ,
{
filename : "puppetdb_no_scheme.bad.yml" ,
2021-09-16 16:29:32 +00:00
errMsg : "URL scheme must be 'http' or 'https'" ,
2021-06-01 12:04:58 +00:00
} ,
2023-09-08 11:51:17 +00:00
{
filename : "puppetdb_token_file.bad.yml" ,
errMsg : "at most one of bearer_token & bearer_token_file must be configured" ,
} ,
2020-08-21 13:49:19 +00:00
{
filename : "hetzner_role.bad.yml" ,
errMsg : "unknown role" ,
} ,
2020-08-26 15:36:59 +00:00
{
filename : "eureka_no_server.bad.yml" ,
errMsg : "empty or null eureka server" ,
} ,
{
filename : "eureka_invalid_server.bad.yml" ,
errMsg : "invalid eureka server URL" ,
} ,
2021-03-24 23:33:21 +00:00
{
filename : "scaleway_role.bad.yml" ,
errMsg : ` unknown role "invalid" ` ,
} ,
{
filename : "scaleway_no_secret.bad.yml" ,
errMsg : "one of secret_key & secret_key_file must be configured" ,
} ,
{
filename : "scaleway_two_secrets.bad.yml" ,
errMsg : "at most one of secret_key & secret_key_file must be configured" ,
} ,
2021-05-16 02:19:22 +00:00
{
filename : "scrape_body_size_limit.bad.yml" ,
errMsg : "units: unknown unit in 100" ,
} ,
2021-06-11 16:04:45 +00:00
{
filename : "http_url_no_scheme.bad.yml" ,
errMsg : "URL scheme must be 'http' or 'https'" ,
} ,
{
filename : "http_url_no_host.bad.yml" ,
errMsg : "host is missing in URL" ,
} ,
2023-09-03 20:59:17 +00:00
{
filename : "http_token_file.bad.yml" ,
errMsg : "at most one of bearer_token & bearer_token_file must be configured" ,
} ,
2021-06-11 16:04:45 +00:00
{
filename : "http_url_bad_scheme.bad.yml" ,
errMsg : "URL scheme must be 'http' or 'https'" ,
} ,
2021-08-31 15:52:57 +00:00
{
filename : "empty_scrape_config_action.bad.yml" ,
errMsg : "relabel action cannot be empty" ,
} ,
2022-01-25 10:08:04 +00:00
{
2022-02-22 16:07:30 +00:00
filename : "tracing_missing_endpoint.bad.yml" ,
2022-01-25 10:08:04 +00:00
errMsg : "tracing endpoint must be set" ,
} ,
2022-02-22 16:07:30 +00:00
{
filename : "tracing_invalid_header.bad.yml" ,
errMsg : "x-prometheus-remote-write-version is a reserved header. It must not be changed" ,
} ,
2022-02-22 20:44:36 +00:00
{
filename : "tracing_invalid_authorization_header.bad.yml" ,
errMsg : "authorization header configuration is not yet supported" ,
} ,
2022-02-22 16:07:30 +00:00
{
filename : "tracing_invalid_compression.bad.yml" ,
errMsg : "invalid compression type foo provided, valid options: gzip" ,
} ,
2021-12-04 20:14:47 +00:00
{
filename : "uyuni_no_server.bad.yml" ,
errMsg : "Uyuni SD configuration requires server host" ,
} ,
2023-09-08 11:59:49 +00:00
{
filename : "uyuni_token_file.bad.yml" ,
errMsg : "at most one of bearer_token & bearer_token_file must be configured" ,
} ,
2022-05-20 12:57:23 +00:00
{
filename : "ionos_datacenter.bad.yml" ,
errMsg : "datacenter id can't be empty" ,
} ,
2022-11-03 09:20:09 +00:00
{
filename : "ovhcloud_no_secret.bad.yml" ,
errMsg : "application secret can not be empty" ,
} ,
{
filename : "ovhcloud_bad_service.bad.yml" ,
errMsg : "unknown service: fakeservice" ,
} ,
2023-02-24 10:47:12 +00:00
{
filename : "scrape_config_files_glob.bad.yml" ,
errMsg : ` parsing YAML file testdata/scrape_config_files_glob.bad.yml: invalid scrape config file path "scrape_configs/*/*" ` ,
} ,
2023-10-10 10:16:55 +00:00
{
filename : "scrape_config_files_scrape_protocols.bad.yml" ,
errMsg : ` parsing YAML file testdata/scrape_config_files_scrape_protocols.bad.yml: scrape_protocols: unknown scrape protocol prometheusproto, supported: [OpenMetricsText0.0.1 OpenMetricsText1.0.0 PrometheusProto PrometheusText0.0.4] for scrape config with job name "node" ` ,
} ,
{
filename : "scrape_config_files_scrape_protocols2.bad.yml" ,
errMsg : ` parsing YAML file testdata/scrape_config_files_scrape_protocols2.bad.yml: duplicated protocol in scrape_protocols, got [OpenMetricsText1.0.0 PrometheusProto OpenMetricsText1.0.0] for scrape config with job name "node" ` ,
} ,
2013-02-14 00:04:07 +00:00
}
2015-05-07 08:55:03 +00:00
func TestBadConfigs ( t * testing . T ) {
for _ , ee := range expectedErrors {
2021-10-29 23:41:40 +00:00
_ , err := LoadFile ( "testdata/" + ee . filename , false , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . Error ( t , err , "%s" , ee . filename )
require . Contains ( t , err . Error ( ) , ee . errMsg ,
2017-10-10 10:29:15 +00:00
"Expected error for %s to contain %q but got: %s" , ee . filename , ee . errMsg , err )
2013-02-14 00:04:07 +00:00
}
}
2015-06-06 07:55:22 +00:00
2018-04-04 08:07:39 +00:00
func TestBadStaticConfigsJSON ( t * testing . T ) {
2022-04-27 09:24:36 +00:00
content , err := os . ReadFile ( "testdata/static_config.bad.json" )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package
* refactor: move auth and security related structs to a utility package, fix import error in utility package
* refactor: Azure SD, remove SD struct from config
* refactor: DNS SD, remove SD struct from config into dns package
* refactor: ec2 SD, move SD struct from config into the ec2 package
* refactor: file SD, move SD struct from config to file discovery package
* refactor: gce, move SD struct from config to gce discovery package
* refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil
* refactor: consul, move SD struct from config into consul discovery package
* refactor: marathon, move SD struct from config into marathon discovery package
* refactor: triton, move SD struct from config to triton discovery package, fix test
* refactor: zookeeper, move SD structs from config to zookeeper discovery package
* refactor: openstack, remove SD struct from config, move into openstack discovery package
* refactor: kubernetes, move SD struct from config into kubernetes discovery package
* refactor: notifier, use targetgroup package instead of config
* refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup
* refactor: retrieval, use targetgroup package instead of config.TargetGroup
* refactor: storage, use config util package
* refactor: discovery manager, use targetgroup package instead of config.TargetGroup
* refactor: use HTTPClient and TLS config from configUtil instead of config
* refactor: tests, use targetgroup package instead of config.TargetGroup
* refactor: fix tagetgroup.Group pointers that were removed by mistake
* refactor: openstack, kubernetes: drop prefixes
* refactor: remove import aliases forced due to vscode bug
* refactor: move main SD struct out of config into discovery/config
* refactor: rename configUtil to config_util
* refactor: rename yamlUtil to yaml_config
* refactor: kubernetes, remove prefixes
* refactor: move the TargetGroup package to discovery/
* refactor: fix order of imports
2017-12-29 20:01:34 +00:00
var tg targetgroup . Group
2015-06-06 07:55:22 +00:00
err = json . Unmarshal ( content , & tg )
2020-10-29 09:43:23 +00:00
require . Error ( t , err )
2018-04-04 08:07:39 +00:00
}
func TestBadStaticConfigsYML ( t * testing . T ) {
2022-04-27 09:24:36 +00:00
content , err := os . ReadFile ( "testdata/static_config.bad.yml" )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2018-04-04 08:07:39 +00:00
var tg targetgroup . Group
err = yaml . UnmarshalStrict ( content , & tg )
2020-10-29 09:43:23 +00:00
require . Error ( t , err )
2015-06-06 07:55:22 +00:00
}
2015-07-17 14:12:33 +00:00
func TestEmptyConfig ( t * testing . T ) {
2021-03-25 21:28:58 +00:00
c , err := Load ( "" , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2015-07-17 14:12:33 +00:00
exp := DefaultConfig
2020-10-29 09:43:23 +00:00
require . Equal ( t , exp , * c )
2015-07-17 14:12:33 +00:00
}
2015-07-17 17:58:34 +00:00
2021-03-25 21:28:58 +00:00
func TestExpandExternalLabels ( t * testing . T ) {
// Cleanup ant TEST env variable that could exist on the system.
os . Setenv ( "TEST" , "" )
2021-10-29 23:41:40 +00:00
c , err := LoadFile ( "testdata/external_labels.good.yml" , false , false , log . NewNopLogger ( ) )
2021-03-25 21:28:58 +00:00
require . NoError ( t , err )
2022-03-09 22:21:11 +00:00
require . Equal ( t , labels . FromStrings ( "bar" , "foo" , "baz" , "foo${TEST}bar" , "foo" , "${TEST}" , "qux" , "foo$${TEST}" , "xyz" , "foo$$bar" ) , c . GlobalConfig . ExternalLabels )
2021-03-25 21:28:58 +00:00
2021-10-29 23:41:40 +00:00
c , err = LoadFile ( "testdata/external_labels.good.yml" , false , true , log . NewNopLogger ( ) )
2021-03-25 21:28:58 +00:00
require . NoError ( t , err )
2022-03-09 22:21:11 +00:00
require . Equal ( t , labels . FromStrings ( "bar" , "foo" , "baz" , "foobar" , "foo" , "" , "qux" , "foo${TEST}" , "xyz" , "foo$bar" ) , c . GlobalConfig . ExternalLabels )
2021-03-25 21:28:58 +00:00
os . Setenv ( "TEST" , "TestValue" )
2021-10-29 23:41:40 +00:00
c , err = LoadFile ( "testdata/external_labels.good.yml" , false , true , log . NewNopLogger ( ) )
2021-03-25 21:28:58 +00:00
require . NoError ( t , err )
2022-03-09 22:21:11 +00:00
require . Equal ( t , labels . FromStrings ( "bar" , "foo" , "baz" , "fooTestValuebar" , "foo" , "TestValue" , "qux" , "foo${TEST}" , "xyz" , "foo$bar" ) , c . GlobalConfig . ExternalLabels )
2021-03-25 21:28:58 +00:00
}
2022-11-29 14:24:07 +00:00
func TestAgentMode ( t * testing . T ) {
_ , err := LoadFile ( "testdata/agent_mode.with_alert_manager.yml" , true , false , log . NewNopLogger ( ) )
require . ErrorContains ( t , err , "field alerting is not allowed in agent mode" )
_ , err = LoadFile ( "testdata/agent_mode.with_alert_relabels.yml" , true , false , log . NewNopLogger ( ) )
require . ErrorContains ( t , err , "field alerting is not allowed in agent mode" )
_ , err = LoadFile ( "testdata/agent_mode.with_rule_files.yml" , true , false , log . NewNopLogger ( ) )
require . ErrorContains ( t , err , "field rule_files is not allowed in agent mode" )
_ , err = LoadFile ( "testdata/agent_mode.with_remote_reads.yml" , true , false , log . NewNopLogger ( ) )
require . ErrorContains ( t , err , "field remote_read is not allowed in agent mode" )
c , err := LoadFile ( "testdata/agent_mode.without_remote_writes.yml" , true , false , log . NewNopLogger ( ) )
require . NoError ( t , err )
require . Len ( t , c . RemoteWriteConfigs , 0 )
c , err = LoadFile ( "testdata/agent_mode.good.yml" , true , false , log . NewNopLogger ( ) )
require . NoError ( t , err )
require . Len ( t , c . RemoteWriteConfigs , 1 )
require . Equal (
t ,
"http://remote1/push" ,
c . RemoteWriteConfigs [ 0 ] . URL . String ( ) ,
)
}
2015-07-17 17:58:34 +00:00
func TestEmptyGlobalBlock ( t * testing . T ) {
2021-03-25 21:28:58 +00:00
c , err := Load ( "global:\n" , false , log . NewNopLogger ( ) )
2020-10-29 09:43:23 +00:00
require . NoError ( t , err )
2015-07-17 17:58:34 +00:00
exp := DefaultConfig
2020-10-29 09:43:23 +00:00
require . Equal ( t , exp , * c )
2015-07-17 17:58:34 +00:00
}
2015-09-03 09:47:09 +00:00
2023-02-24 10:47:12 +00:00
func TestGetScrapeConfigs ( t * testing . T ) {
sc := func ( jobName string , scrapeInterval , scrapeTimeout model . Duration ) * ScrapeConfig {
return & ScrapeConfig {
2023-10-10 10:16:55 +00:00
JobName : jobName ,
HonorTimestamps : true ,
ScrapeInterval : scrapeInterval ,
ScrapeTimeout : scrapeTimeout ,
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-02-24 10:47:12 +00:00
MetricsPath : "/metrics" ,
Scheme : "http" ,
HTTPClientConfig : config . DefaultHTTPClientConfig ,
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
{
Targets : [ ] model . LabelSet {
{
model . AddressLabel : "localhost:8080" ,
} ,
} ,
Source : "0" ,
} ,
} ,
} ,
}
}
testCases := [ ] struct {
name string
configFile string
expectedResult [ ] * ScrapeConfig
expectedError string
} {
{
name : "An included config file should be a valid global config." ,
configFile : "testdata/scrape_config_files.good.yml" ,
expectedResult : [ ] * ScrapeConfig { sc ( "prometheus" , model . Duration ( 60 * time . Second ) , model . Duration ( 10 * time . Second ) ) } ,
} ,
{
name : "An global config that only include a scrape config file." ,
configFile : "testdata/scrape_config_files_only.good.yml" ,
expectedResult : [ ] * ScrapeConfig { sc ( "prometheus" , model . Duration ( 60 * time . Second ) , model . Duration ( 10 * time . Second ) ) } ,
} ,
{
name : "An global config that combine scrape config files and scrape configs." ,
configFile : "testdata/scrape_config_files_combined.good.yml" ,
expectedResult : [ ] * ScrapeConfig {
sc ( "node" , model . Duration ( 60 * time . Second ) , model . Duration ( 10 * time . Second ) ) ,
sc ( "prometheus" , model . Duration ( 60 * time . Second ) , model . Duration ( 10 * time . Second ) ) ,
sc ( "alertmanager" , model . Duration ( 60 * time . Second ) , model . Duration ( 10 * time . Second ) ) ,
} ,
} ,
{
name : "An global config that includes a scrape config file with globs" ,
configFile : "testdata/scrape_config_files_glob.good.yml" ,
expectedResult : [ ] * ScrapeConfig {
{
JobName : "prometheus" ,
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 60 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-02-24 10:47:12 +00:00
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/scrape_configs/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/scrape_configs/valid_key_file" ) ,
} ,
FollowRedirects : true ,
EnableHTTP2 : true ,
} ,
ServiceDiscoveryConfigs : discovery . Configs {
discovery . StaticConfig {
{
Targets : [ ] model . LabelSet {
{ model . AddressLabel : "localhost:8080" } ,
} ,
Source : "0" ,
} ,
} ,
} ,
} ,
{
JobName : "node" ,
HonorTimestamps : true ,
ScrapeInterval : model . Duration ( 15 * time . Second ) ,
ScrapeTimeout : DefaultGlobalConfig . ScrapeTimeout ,
2023-10-10 10:16:55 +00:00
ScrapeProtocols : DefaultGlobalConfig . ScrapeProtocols ,
2023-02-24 10:47:12 +00:00
HTTPClientConfig : config . HTTPClientConfig {
TLSConfig : config . TLSConfig {
CertFile : filepath . FromSlash ( "testdata/valid_cert_file" ) ,
KeyFile : filepath . FromSlash ( "testdata/valid_key_file" ) ,
} ,
FollowRedirects : true ,
EnableHTTP2 : true ,
} ,
MetricsPath : DefaultScrapeConfig . MetricsPath ,
Scheme : DefaultScrapeConfig . Scheme ,
ServiceDiscoveryConfigs : discovery . Configs {
& vultr . SDConfig {
HTTPClientConfig : config . HTTPClientConfig {
Authorization : & config . Authorization {
Type : "Bearer" ,
Credentials : "abcdef" ,
} ,
FollowRedirects : true ,
EnableHTTP2 : true ,
} ,
Port : 80 ,
RefreshInterval : model . Duration ( 60 * time . Second ) ,
} ,
} ,
} ,
} ,
} ,
{
name : "An global config that includes twice the same scrape configs." ,
configFile : "testdata/scrape_config_files_double_import.bad.yml" ,
expectedError : ` found multiple scrape configs with job name "prometheus" ` ,
} ,
{
name : "An global config that includes a scrape config identical to a scrape config in the main file." ,
configFile : "testdata/scrape_config_files_duplicate.bad.yml" ,
expectedError : ` found multiple scrape configs with job name "prometheus" ` ,
} ,
{
name : "An global config that includes a scrape config file with errors." ,
configFile : "testdata/scrape_config_files_global.bad.yml" ,
expectedError : ` scrape timeout greater than scrape interval for scrape config with job name "prometheus" ` ,
} ,
}
for _ , tc := range testCases {
t . Run ( tc . name , func ( t * testing . T ) {
c , err := LoadFile ( tc . configFile , false , false , log . NewNopLogger ( ) )
require . NoError ( t , err )
scfgs , err := c . GetScrapeConfigs ( )
if len ( tc . expectedError ) > 0 {
require . ErrorContains ( t , err , tc . expectedError )
}
require . Equal ( t , tc . expectedResult , scfgs )
} )
}
}
2020-08-20 12:48:26 +00:00
func kubernetesSDHostURL ( ) config . URL {
2015-09-03 09:47:09 +00:00
tURL , _ := url . Parse ( "https://localhost:1234" )
2020-08-20 12:48:26 +00:00
return config . URL { URL : tURL }
2015-09-03 09:47:09 +00:00
}