mirror of https://github.com/prometheus/prometheus
rebase main and adjust the configuration
Signed-off-by: ouyang1204@gmail.com <ouyang1204@gmail.com>pull/10490/head
parent
d78253319d
commit
0d25931049
|
@ -998,6 +998,7 @@ var expectedConf = &Config{
|
||||||
HostNetworkingHost: "localhost",
|
HostNetworkingHost: "localhost",
|
||||||
RefreshInterval: model.Duration(60 * time.Second),
|
RefreshInterval: model.Duration(60 * time.Second),
|
||||||
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
||||||
|
MatchFirstNetwork: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -22,8 +22,10 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/docker/docker/api/types/network"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/go-kit/log"
|
"github.com/go-kit/log"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
@ -58,6 +60,7 @@ var DefaultDockerSDConfig = DockerSDConfig{
|
||||||
Filters: []Filter{},
|
Filters: []Filter{},
|
||||||
HostNetworkingHost: "localhost",
|
HostNetworkingHost: "localhost",
|
||||||
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
HTTPClientConfig: config.DefaultHTTPClientConfig,
|
||||||
|
MatchFirstNetwork: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -74,6 +77,7 @@ type DockerSDConfig struct {
|
||||||
HostNetworkingHost string `yaml:"host_networking_host"`
|
HostNetworkingHost string `yaml:"host_networking_host"`
|
||||||
|
|
||||||
RefreshInterval model.Duration `yaml:"refresh_interval"`
|
RefreshInterval model.Duration `yaml:"refresh_interval"`
|
||||||
|
MatchFirstNetwork bool `yaml:"match_first_network"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDiscovererMetrics implements discovery.Config.
|
// NewDiscovererMetrics implements discovery.Config.
|
||||||
|
@ -119,6 +123,7 @@ type DockerDiscovery struct {
|
||||||
port int
|
port int
|
||||||
hostNetworkingHost string
|
hostNetworkingHost string
|
||||||
filters filters.Args
|
filters filters.Args
|
||||||
|
matchFirstNetwork bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDockerDiscovery returns a new DockerDiscovery which periodically refreshes its targets.
|
// NewDockerDiscovery returns a new DockerDiscovery which periodically refreshes its targets.
|
||||||
|
@ -131,6 +136,7 @@ func NewDockerDiscovery(conf *DockerSDConfig, logger log.Logger, metrics discove
|
||||||
d := &DockerDiscovery{
|
d := &DockerDiscovery{
|
||||||
port: conf.Port,
|
port: conf.Port,
|
||||||
hostNetworkingHost: conf.HostNetworkingHost,
|
hostNetworkingHost: conf.HostNetworkingHost,
|
||||||
|
matchFirstNetwork: conf.MatchFirstNetwork,
|
||||||
}
|
}
|
||||||
|
|
||||||
hostURL, err := url.Parse(conf.Host)
|
hostURL, err := url.Parse(conf.Host)
|
||||||
|
@ -202,6 +208,11 @@ func (d *DockerDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group, er
|
||||||
return nil, fmt.Errorf("error while computing network labels: %w", err)
|
return nil, fmt.Errorf("error while computing network labels: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allContainers := make(map[string]types.Container)
|
||||||
|
for _, c := range containers {
|
||||||
|
allContainers[c.ID] = c
|
||||||
|
}
|
||||||
|
|
||||||
for _, c := range containers {
|
for _, c := range containers {
|
||||||
if len(c.Names) == 0 {
|
if len(c.Names) == 0 {
|
||||||
continue
|
continue
|
||||||
|
@ -218,7 +229,50 @@ func (d *DockerDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group, er
|
||||||
commonLabels[dockerLabelContainerLabelPrefix+ln] = v
|
commonLabels[dockerLabelContainerLabelPrefix+ln] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, n := range c.NetworkSettings.Networks {
|
networks := c.NetworkSettings.Networks
|
||||||
|
containerNetworkMode := container.NetworkMode(c.HostConfig.NetworkMode)
|
||||||
|
if len(networks) == 0 {
|
||||||
|
// Try to lookup shared networks
|
||||||
|
for {
|
||||||
|
if containerNetworkMode.IsContainer() {
|
||||||
|
tmpContainer, exists := allContainers[containerNetworkMode.ConnectedContainer()]
|
||||||
|
if !exists {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
networks = tmpContainer.NetworkSettings.Networks
|
||||||
|
containerNetworkMode = container.NetworkMode(tmpContainer.HostConfig.NetworkMode)
|
||||||
|
if len(networks) > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if d.matchFirstNetwork && len(networks) > 1 {
|
||||||
|
// Match user defined network
|
||||||
|
if containerNetworkMode.IsUserDefined() {
|
||||||
|
networkMode := string(containerNetworkMode)
|
||||||
|
networks = map[string]*network.EndpointSettings{networkMode: networks[networkMode]}
|
||||||
|
} else {
|
||||||
|
// Get first network if container network mode has "none" value.
|
||||||
|
// This case appears under certain condition:
|
||||||
|
// 1. Container created with network set to "--net=none".
|
||||||
|
// 2. Disconnect network "none".
|
||||||
|
// 3. Reconnect network with user defined networks.
|
||||||
|
var first string
|
||||||
|
for k, n := range networks {
|
||||||
|
if n != nil {
|
||||||
|
first = k
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
networks = map[string]*network.EndpointSettings{first: networks[first]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, n := range networks {
|
||||||
var added bool
|
var added bool
|
||||||
|
|
||||||
for _, p := range c.Ports {
|
for _, p := range c.Ports {
|
||||||
|
|
|
@ -16,6 +16,7 @@ package moby
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/go-kit/log"
|
"github.com/go-kit/log"
|
||||||
|
@ -59,7 +60,7 @@ host: %s
|
||||||
tg := tgs[0]
|
tg := tgs[0]
|
||||||
require.NotNil(t, tg)
|
require.NotNil(t, tg)
|
||||||
require.NotNil(t, tg.Targets)
|
require.NotNil(t, tg.Targets)
|
||||||
require.Len(t, tg.Targets, 3)
|
require.Len(t, tg.Targets, 6)
|
||||||
|
|
||||||
for i, lbls := range []model.LabelSet{
|
for i, lbls := range []model.LabelSet{
|
||||||
{
|
{
|
||||||
|
@ -113,9 +114,259 @@ host: %s
|
||||||
"__meta_docker_container_network_mode": "host",
|
"__meta_docker_container_network_mode": "host",
|
||||||
"__meta_docker_network_ip": "",
|
"__meta_docker_network_ip": "",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:3306",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:33060",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:9104",
|
||||||
|
"__meta_docker_container_id": "59bf76e8816af98856b90dd619c91027145ca501043b1c51756d03b085882e06",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysqlexporter",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_label_maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql_exporter",
|
||||||
|
"__meta_docker_container_network_mode": "container:f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "9104",
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
||||||
require.Equal(t, lbls, tg.Targets[i])
|
require.Equal(t, lbls, tg.Targets[i])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDockerSDRefreshMatchAllNetworks(t *testing.T) {
|
||||||
|
sdmock := NewSDMock(t, "dockerprom")
|
||||||
|
sdmock.Setup()
|
||||||
|
|
||||||
|
e := sdmock.Endpoint()
|
||||||
|
url := e[:len(e)-1]
|
||||||
|
cfgString := fmt.Sprintf(`
|
||||||
|
---
|
||||||
|
host: %s
|
||||||
|
`, url)
|
||||||
|
var cfg DockerSDConfig
|
||||||
|
require.NoError(t, yaml.Unmarshal([]byte(cfgString), &cfg))
|
||||||
|
|
||||||
|
cfg.MatchFirstNetwork = false
|
||||||
|
reg := prometheus.NewRegistry()
|
||||||
|
refreshMetrics := discovery.NewRefreshMetrics(reg)
|
||||||
|
metrics := cfg.NewDiscovererMetrics(reg, refreshMetrics)
|
||||||
|
require.NoError(t, metrics.Register())
|
||||||
|
defer metrics.Unregister()
|
||||||
|
defer refreshMetrics.Unregister()
|
||||||
|
d, err := NewDockerDiscovery(&cfg, log.NewNopLogger(), metrics)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
tgs, err := d.refresh(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, tgs, 1)
|
||||||
|
|
||||||
|
tg := tgs[0]
|
||||||
|
require.NotNil(t, tg)
|
||||||
|
require.NotNil(t, tg.Targets)
|
||||||
|
require.Len(t, tg.Targets, 9)
|
||||||
|
|
||||||
|
sortFunc := func(labelSets []model.LabelSet) {
|
||||||
|
sort.Slice(labelSets, func(i, j int) bool {
|
||||||
|
return labelSets[i]["__address__"] < labelSets[j]["__address__"]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
expected := []model.LabelSet{
|
||||||
|
{
|
||||||
|
"__address__": "172.19.0.2:9100",
|
||||||
|
"__meta_docker_container_id": "c301b928faceb1a18fe379f6bc178727ef920bb30b0f9b8592b32b36255a0eca",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "node",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "1.25.0",
|
||||||
|
"__meta_docker_container_label_maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>",
|
||||||
|
"__meta_docker_container_label_prometheus_job": "node",
|
||||||
|
"__meta_docker_container_name": "/dockersd_node_1",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_default",
|
||||||
|
"__meta_docker_network_id": "7189986ab399e144e52a71b7451b4e04e2158c044b4cd2f3ae26fc3a285d3798",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.19.0.2",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_network": "default",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_version": "1.25.0",
|
||||||
|
"__meta_docker_network_name": "dockersd_default",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "9100",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.19.0.3:80",
|
||||||
|
"__meta_docker_container_id": "c301b928faceb1a18fe379f6bc178727ef920bb30b0f9b8592b32b36255a0eca",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "noport",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "1.25.0",
|
||||||
|
"__meta_docker_container_label_maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>",
|
||||||
|
"__meta_docker_container_label_prometheus_job": "noport",
|
||||||
|
"__meta_docker_container_name": "/dockersd_noport_1",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_default",
|
||||||
|
"__meta_docker_network_id": "7189986ab399e144e52a71b7451b4e04e2158c044b4cd2f3ae26fc3a285d3798",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.19.0.3",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_network": "default",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_network_label_com_docker_compose_version": "1.25.0",
|
||||||
|
"__meta_docker_network_name": "dockersd_default",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "localhost",
|
||||||
|
"__meta_docker_container_id": "54ed6cc5c0988260436cb0e739b7b6c9cad6c439a93b4c4fdbe9753e1c94b189",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "host_networking",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "1.25.0",
|
||||||
|
"__meta_docker_container_name": "/dockersd_host_networking_1",
|
||||||
|
"__meta_docker_container_network_mode": "host",
|
||||||
|
"__meta_docker_network_ip": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:3306",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:33060",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.21.0.2:3306",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.21.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private1",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.21.0.2:33060",
|
||||||
|
"__meta_docker_container_id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private",
|
||||||
|
"__meta_docker_network_id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.21.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private1",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.21.0.2:9104",
|
||||||
|
"__meta_docker_container_id": "59bf76e8816af98856b90dd619c91027145ca501043b1c51756d03b085882e06",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysqlexporter",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_label_maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql_exporter",
|
||||||
|
"__meta_docker_container_network_mode": "container:f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_network_id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.21.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private1",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "9104",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.2:9104",
|
||||||
|
"__meta_docker_container_id": "59bf76e8816af98856b90dd619c91027145ca501043b1c51756d03b085882e06",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysqlexporter",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_label_maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>",
|
||||||
|
"__meta_docker_container_name": "/dockersd_mysql_exporter",
|
||||||
|
"__meta_docker_container_network_mode": "container:f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.2",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "9104",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
sortFunc(expected)
|
||||||
|
sortFunc(tg.Targets)
|
||||||
|
|
||||||
|
for i, lbls := range expected {
|
||||||
|
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
||||||
|
require.Equal(t, lbls, tg.Targets[i])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -128,5 +128,105 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Mounts": []
|
"Mounts": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8",
|
||||||
|
"Names": [
|
||||||
|
"/dockersd_mysql"
|
||||||
|
],
|
||||||
|
"Image": "mysql:5.7.29",
|
||||||
|
"ImageID": "sha256:5d9483f9a7b21c87e0f5b9776c3e06567603c28c0062013eda127c968175f5e8",
|
||||||
|
"Command": "mysqld",
|
||||||
|
"Created": 1616273136,
|
||||||
|
"Ports": [
|
||||||
|
{
|
||||||
|
"PrivatePort": 3306,
|
||||||
|
"Type": "tcp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"PrivatePort": 33060,
|
||||||
|
"Type": "tcp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Labels": {
|
||||||
|
"com.docker.compose.project": "dockersd",
|
||||||
|
"com.docker.compose.service": "mysql",
|
||||||
|
"com.docker.compose.version": "2.2.2"
|
||||||
|
},
|
||||||
|
"State": "running",
|
||||||
|
"Status": "Up 40 seconds",
|
||||||
|
"HostConfig": {
|
||||||
|
"NetworkMode": "dockersd_private"
|
||||||
|
},
|
||||||
|
"NetworkSettings": {
|
||||||
|
"Networks": {
|
||||||
|
"dockersd_private": {
|
||||||
|
"IPAMConfig": null,
|
||||||
|
"Links": null,
|
||||||
|
"Aliases": null,
|
||||||
|
"NetworkID": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"EndpointID": "80f8a61b37701a9991bb98c75ddd23fd9b7c16b5575ca81343f6b44ff4a2a9d9",
|
||||||
|
"Gateway": "172.20.0.1",
|
||||||
|
"IPAddress": "172.20.0.2",
|
||||||
|
"IPPrefixLen": 16,
|
||||||
|
"IPv6Gateway": "",
|
||||||
|
"GlobalIPv6Address": "",
|
||||||
|
"GlobalIPv6PrefixLen": 0,
|
||||||
|
"MacAddress": "02:42:ac:14:00:0a",
|
||||||
|
"DriverOpts": null
|
||||||
|
},
|
||||||
|
"dockersd_private1": {
|
||||||
|
"IPAMConfig": {},
|
||||||
|
"Links": null,
|
||||||
|
"Aliases": [
|
||||||
|
"mysql",
|
||||||
|
"mysql",
|
||||||
|
"f9ade4b83199"
|
||||||
|
],
|
||||||
|
"NetworkID": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"EndpointID": "f80921d10e78c99a5907705aae75befea40c3d3e9f820e66ab392f7274be16b8",
|
||||||
|
"Gateway": "172.21.0.1",
|
||||||
|
"IPAddress": "172.21.0.2",
|
||||||
|
"IPPrefixLen": 24,
|
||||||
|
"IPv6Gateway": "",
|
||||||
|
"GlobalIPv6Address": "",
|
||||||
|
"GlobalIPv6PrefixLen": 0,
|
||||||
|
"MacAddress": "02:42:ac:15:00:02",
|
||||||
|
"DriverOpts": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Mounts": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "59bf76e8816af98856b90dd619c91027145ca501043b1c51756d03b085882e06",
|
||||||
|
"Names": [
|
||||||
|
"/dockersd_mysql_exporter"
|
||||||
|
],
|
||||||
|
"Image": "prom/mysqld-exporter:latest",
|
||||||
|
"ImageID": "sha256:121b8a7cd0525dd89aaec58ad7d34c3bb3714740e5a67daf6510ccf71ab219a9",
|
||||||
|
"Command": "/bin/mysqld_exporter",
|
||||||
|
"Created": 1616273136,
|
||||||
|
"Ports": [
|
||||||
|
{
|
||||||
|
"PrivatePort": 9104,
|
||||||
|
"Type": "tcp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Labels": {
|
||||||
|
"com.docker.compose.project": "dockersd",
|
||||||
|
"com.docker.compose.service": "mysqlexporter",
|
||||||
|
"com.docker.compose.version": "2.2.2",
|
||||||
|
"maintainer": "The Prometheus Authors <prometheus-developers@googlegroups.com>"
|
||||||
|
},
|
||||||
|
"State": "running",
|
||||||
|
"Status": "Up 40 seconds",
|
||||||
|
"HostConfig": {
|
||||||
|
"NetworkMode": "container:f9ade4b83199d6f83020b7c0bfd1e8281b19dbf9e6cef2cf89bc45c8f8d20fe8"
|
||||||
|
},
|
||||||
|
"NetworkSettings": {
|
||||||
|
"Networks": {}
|
||||||
|
},
|
||||||
|
"Mounts": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -111,5 +111,59 @@
|
||||||
"Containers": {},
|
"Containers": {},
|
||||||
"Options": {},
|
"Options": {},
|
||||||
"Labels": {}
|
"Labels": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "dockersd_private",
|
||||||
|
"Id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"Created": "2022-03-25T09:21:17.718370976+08:00",
|
||||||
|
"Scope": "local",
|
||||||
|
"Driver": "bridge",
|
||||||
|
"EnableIPv6": false,
|
||||||
|
"IPAM": {
|
||||||
|
"Driver": "default",
|
||||||
|
"Options": null,
|
||||||
|
"Config": [
|
||||||
|
{
|
||||||
|
"Subnet": "172.20.0.1/16"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Internal": false,
|
||||||
|
"Attachable": false,
|
||||||
|
"Ingress": false,
|
||||||
|
"ConfigFrom": {
|
||||||
|
"Network": ""
|
||||||
|
},
|
||||||
|
"ConfigOnly": false,
|
||||||
|
"Containers": {},
|
||||||
|
"Options": {},
|
||||||
|
"Labels": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "dockersd_private1",
|
||||||
|
"Id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"Created": "2022-03-25T09:21:17.718370976+08:00",
|
||||||
|
"Scope": "local",
|
||||||
|
"Driver": "bridge",
|
||||||
|
"EnableIPv6": false,
|
||||||
|
"IPAM": {
|
||||||
|
"Driver": "default",
|
||||||
|
"Options": null,
|
||||||
|
"Config": [
|
||||||
|
{
|
||||||
|
"Subnet": "172.21.0.1/16"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Internal": false,
|
||||||
|
"Attachable": false,
|
||||||
|
"Ingress": false,
|
||||||
|
"ConfigFrom": {
|
||||||
|
"Network": ""
|
||||||
|
},
|
||||||
|
"ConfigOnly": false,
|
||||||
|
"Containers": {},
|
||||||
|
"Options": {},
|
||||||
|
"Labels": {}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -941,6 +941,9 @@ tls_config:
|
||||||
# The host to use if the container is in host networking mode.
|
# The host to use if the container is in host networking mode.
|
||||||
[ host_networking_host: <string> | default = "localhost" ]
|
[ host_networking_host: <string> | default = "localhost" ]
|
||||||
|
|
||||||
|
# Match the first network if the container has multiple networks defined, thus avoiding collecting duplicate targets.
|
||||||
|
[ match_first_network: <boolean> | default = true ]
|
||||||
|
|
||||||
# Optional filters to limit the discovery process to a subset of available
|
# Optional filters to limit the discovery process to a subset of available
|
||||||
# resources.
|
# resources.
|
||||||
# The available filters are listed in the upstream documentation:
|
# The available filters are listed in the upstream documentation:
|
||||||
|
|
Loading…
Reference in New Issue