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
|
|
|
}
|
|
|
|
|
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"),
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorLabels: true,
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(50 * time.Second),
|
|
|
|
ScrapeTimeout: model.Duration(5 * time.Second),
|
2021-05-16 02:19:22 +00:00
|
|
|
BodySizeLimit: 10 * units.MiB,
|
2019-03-15 10:04:15 +00:00
|
|
|
SampleLimit: 1000,
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: model.Duration(10 * time.Second),
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: false,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
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: "測試",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
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",
|
|
|
|
|
2019-03-15 10:04:15 +00:00
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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
|
|
|
{
|
|
|
|
JobName: "hetzner",
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
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
|
|
|
{
|
|
|
|
JobName: "ionos",
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
|
|
|
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: model.Duration(15 * time.Second),
|
|
|
|
ScrapeTimeout: DefaultGlobalConfig.ScrapeTimeout,
|
|
|
|
|
|
|
|
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",
|
2021-04-28 12:47:52 +00:00
|
|
|
errMsg: `authorization header must be changed via the basic_auth, authorization, oauth2, or sigv4 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`,
|
|
|
|
},
|
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
|
|
|
},
|
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
|
|
|
},
|
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",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
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",
|
|
|
|
},
|
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/*/*"`,
|
|
|
|
},
|
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{
|
|
|
|
JobName: jobName,
|
|
|
|
HonorTimestamps: true,
|
|
|
|
ScrapeInterval: scrapeInterval,
|
|
|
|
ScrapeTimeout: scrapeTimeout,
|
|
|
|
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,
|
|
|
|
|
|
|
|
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,
|
|
|
|
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
|
|
|
}
|