Skip to content

Commit 49d243e

Browse files
committed
Unified the env metadata whitelist flag for containerd and docker.
Signed-off-by: colstuwjx <[email protected]>
1 parent 19df107 commit 49d243e

File tree

13 files changed

+35
-33
lines changed

13 files changed

+35
-33
lines changed

cmd/cadvisor.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ var collectorKey = flag.String("collector_key", "", "Key for the collector's cer
6565
var storeContainerLabels = flag.Bool("store_container_labels", true, "convert container labels and environment variables into labels on prometheus metrics for each container. If flag set to false, then only metrics exported are container name, first alias, and image name")
6666
var whitelistedContainerLabels = flag.String("whitelisted_container_labels", "", "comma separated list of container labels to be converted to labels on prometheus metrics for each container. store_container_labels must be set to false for this to take effect.")
6767

68+
var envMetadataWhiteList = flag.String("env_metadata_whitelist", "", "a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containers, only support containerd and docker runtime for now")
69+
6870
var urlBasePrefix = flag.String("url_base_prefix", "", "prefix path that will be prepended to all paths to support some reverse proxies")
6971

7072
var rawCgroupPrefixWhiteList = flag.String("raw_cgroup_prefix_whitelist", "", "A comma-separated list of cgroup path prefix that needs to be collected even when -docker_only is specified")
@@ -129,7 +131,7 @@ func main() {
129131

130132
collectorHttpClient := createCollectorHttpClient(*collectorCert, *collectorKey)
131133

132-
resourceManager, err := manager.New(memoryStorage, sysFs, manager.HousekeepingConfigFlags, includedMetrics, &collectorHttpClient, strings.Split(*rawCgroupPrefixWhiteList, ","), *perfEvents)
134+
resourceManager, err := manager.New(memoryStorage, sysFs, manager.HousekeepingConfigFlags, includedMetrics, &collectorHttpClient, strings.Split(*rawCgroupPrefixWhiteList, ","), strings.Split(*envMetadataWhiteList, ","), *perfEvents)
133135
if err != nil {
134136
klog.Fatalf("Failed to create a manager: %s", err)
135137
}

cmd/internal/container/mesos/factory.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (f *mesosFactory) String() string {
5959
return MesosNamespace
6060
}
6161

62-
func (f *mesosFactory) NewContainerHandler(name string, inHostNamespace bool) (container.ContainerHandler, error) {
62+
func (f *mesosFactory) NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (container.ContainerHandler, error) {
6363
client, err := Client()
6464
if err != nil {
6565
return nil, err
@@ -72,6 +72,7 @@ func (f *mesosFactory) NewContainerHandler(name string, inHostNamespace bool) (c
7272
f.fsInfo,
7373
f.includedMetrics,
7474
inHostNamespace,
75+
metadataEnvs,
7576
client,
7677
)
7778
}

cmd/internal/container/mesos/handler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func newMesosContainerHandler(
5757
fsInfo fs.FsInfo,
5858
includedMetrics container.MetricSet,
5959
inHostNamespace bool,
60+
metadataEnvs []string,
6061
client mesosAgentClient,
6162
) (container.ContainerHandler, error) {
6263
cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name)

cmd/internal/container/mesos/handler_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
containerlibcontainer "github.com/google/cadvisor/container/libcontainer"
2323
"github.com/google/cadvisor/fs"
2424
info "github.com/google/cadvisor/info/v1"
25-
"github.com/mesos/mesos-go/api/v1/lib"
2625
"github.com/stretchr/testify/assert"
2726
)
2827

@@ -43,6 +42,7 @@ func TestContainerReference(t *testing.T) {
4342
fsInfo fs.FsInfo
4443
cgroupSubsystems *containerlibcontainer.CgroupSubsystems
4544
inHostNamespace bool
45+
metadataEnvs []string
4646
includedMetrics container.MetricSet
4747

4848
hasErr bool
@@ -57,6 +57,7 @@ func TestContainerReference(t *testing.T) {
5757
nil,
5858
&containerlibcontainer.CgroupSubsystems{},
5959
false,
60+
[]string{},
6061
nil,
6162

6263
true,
@@ -70,6 +71,7 @@ func TestContainerReference(t *testing.T) {
7071
nil,
7172
&containerlibcontainer.CgroupSubsystems{},
7273
false,
74+
[]string{},
7375
nil,
7476

7577
true,
@@ -83,6 +85,7 @@ func TestContainerReference(t *testing.T) {
8385
nil,
8486
&containerlibcontainer.CgroupSubsystems{},
8587
false,
88+
[]string{},
8689
nil,
8790

8891
false,
@@ -95,7 +98,7 @@ func TestContainerReference(t *testing.T) {
9598
},
9699
},
97100
} {
98-
handler, err := newMesosContainerHandler(ts.name, ts.cgroupSubsystems, ts.machineInfoFactory, ts.fsInfo, ts.includedMetrics, ts.inHostNamespace, ts.client)
101+
handler, err := newMesosContainerHandler(ts.name, ts.cgroupSubsystems, ts.machineInfoFactory, ts.fsInfo, ts.includedMetrics, ts.inHostNamespace, ts.metadataEnvs, ts.client)
99102
if ts.hasErr {
100103
as.NotNil(err)
101104
if ts.errContains != "" {

container/containerd/factory.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ const k8sContainerdNamespace = "containerd"
4141
// --cgroup-parent have another prefix than 'containerd'
4242
var containerdCgroupRegexp = regexp.MustCompile(`([a-z0-9]{64})`)
4343

44-
var containerdEnvWhitelist = flag.String("containerd_env_metadata_whitelist", "", "a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containerd containers")
45-
4644
type containerdFactory struct {
4745
machineInfoFactory info.MachineInfoFactory
4846
client ContainerdClient
@@ -58,14 +56,12 @@ func (f *containerdFactory) String() string {
5856
return k8sContainerdNamespace
5957
}
6058

61-
func (f *containerdFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
59+
func (f *containerdFactory) NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
6260
client, err := Client(*ArgContainerdEndpoint, *ArgContainerdNamespace)
6361
if err != nil {
6462
return
6563
}
6664

67-
metadataEnvs := strings.Split(*containerdEnvWhitelist, ",")
68-
6965
return newContainerdContainerHandler(
7066
client,
7167
name,

container/crio/factory.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ func (f *crioFactory) String() string {
6464
return CrioNamespace
6565
}
6666

67-
func (f *crioFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
67+
func (f *crioFactory) NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
6868
client, err := Client()
6969
if err != nil {
7070
return
7171
}
72-
// TODO are there any env vars we need to white list, if so, do it here...
73-
metadataEnvs := []string{}
7472
handler, err = newCrioContainerHandler(
7573
client,
7674
name,

container/docker/factory.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,13 @@ const DockerNamespace = "docker"
5353
// The retry times for getting docker root dir
5454
const rootDirRetries = 5
5555

56-
//The retry period for getting docker root dir, Millisecond
56+
// The retry period for getting docker root dir, Millisecond
5757
const rootDirRetryPeriod time.Duration = 1000 * time.Millisecond
5858

5959
// Regexp that identifies docker cgroups, containers started with
6060
// --cgroup-parent have another prefix than 'docker'
6161
var dockerCgroupRegexp = regexp.MustCompile(`([a-z0-9]{64})`)
6262

63-
var dockerEnvWhitelist = flag.String("docker_env_metadata_whitelist", "", "a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for docker containers")
64-
6563
var (
6664
// Basepath to all container specific information that libcontainer stores.
6765
dockerRootDir string
@@ -136,14 +134,12 @@ func (f *dockerFactory) String() string {
136134
return DockerNamespace
137135
}
138136

139-
func (f *dockerFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
137+
func (f *dockerFactory) NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
140138
client, err := Client()
141139
if err != nil {
142140
return
143141
}
144142

145-
metadataEnvs := strings.Split(*dockerEnvWhitelist, ",")
146-
147143
handler, err = newDockerContainerHandler(
148144
client,
149145
name,

container/factory.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929

3030
type ContainerHandlerFactory interface {
3131
// Create a new ContainerHandler using this factory. CanHandleAndAccept() must have returned true.
32-
NewContainerHandler(name string, inHostNamespace bool) (c ContainerHandler, err error)
32+
NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (c ContainerHandler, err error)
3333

3434
// Returns whether this factory can handle and accept the specified container.
3535
CanHandleAndAccept(name string) (handle bool, accept bool, err error)
@@ -227,7 +227,7 @@ func HasFactories() bool {
227227
}
228228

229229
// Create a new ContainerHandler for the specified container.
230-
func NewContainerHandler(name string, watchType watcher.ContainerWatchSource, inHostNamespace bool) (ContainerHandler, bool, error) {
230+
func NewContainerHandler(name string, watchType watcher.ContainerWatchSource, metadataEnvs []string, inHostNamespace bool) (ContainerHandler, bool, error) {
231231
factoriesLock.RLock()
232232
defer factoriesLock.RUnlock()
233233

@@ -243,7 +243,7 @@ func NewContainerHandler(name string, watchType watcher.ContainerWatchSource, in
243243
return nil, false, nil
244244
}
245245
klog.V(3).Infof("Using factory %q for container %q", factory, name)
246-
handle, err := factory.NewContainerHandler(name, inHostNamespace)
246+
handle, err := factory.NewContainerHandler(name, metadataEnvs, inHostNamespace)
247247
return handle, canAccept, err
248248
}
249249
klog.V(4).Infof("Factory %q was unable to handle container %q", factory, name)

container/factory_test.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ func (f *mockContainerHandlerFactory) CanHandleAndAccept(name string) (bool, boo
4343
return f.CanHandleValue, f.CanAcceptValue, nil
4444
}
4545

46-
func (f *mockContainerHandlerFactory) NewContainerHandler(name string, isHostNamespace bool) (container.ContainerHandler, error) {
46+
func (f *mockContainerHandlerFactory) NewContainerHandler(name string, metadataEnvs []string, isHostNamespace bool) (container.ContainerHandler, error) {
4747
args := f.Called(name)
4848
return args.Get(0).(container.ContainerHandler), args.Error(1)
4949
}
5050

5151
const testContainerName = "/test"
5252

53+
var testMetadataEnvs = []string{}
54+
5355
var mockFactory containertest.FactoryForMockContainerHandler
5456

5557
func TestNewContainerHandler_FirstMatches(t *testing.T) {
@@ -64,13 +66,13 @@ func TestNewContainerHandler_FirstMatches(t *testing.T) {
6466
container.RegisterContainerHandlerFactory(allwaysYes, []watcher.ContainerWatchSource{watcher.Raw})
6567

6668
// The yes factory should be asked to create the ContainerHandler.
67-
mockContainer, err := mockFactory.NewContainerHandler(testContainerName, true)
69+
mockContainer, err := mockFactory.NewContainerHandler(testContainerName, testMetadataEnvs, true)
6870
if err != nil {
6971
t.Error(err)
7072
}
7173
allwaysYes.On("NewContainerHandler", testContainerName).Return(mockContainer, nil)
7274

73-
cont, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, true)
75+
cont, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, testMetadataEnvs, true)
7476
if err != nil {
7577
t.Error(err)
7678
}
@@ -97,13 +99,13 @@ func TestNewContainerHandler_SecondMatches(t *testing.T) {
9799
container.RegisterContainerHandlerFactory(allwaysYes, []watcher.ContainerWatchSource{watcher.Raw})
98100

99101
// The yes factory should be asked to create the ContainerHandler.
100-
mockContainer, err := mockFactory.NewContainerHandler(testContainerName, true)
102+
mockContainer, err := mockFactory.NewContainerHandler(testContainerName, testMetadataEnvs, true)
101103
if err != nil {
102104
t.Error(err)
103105
}
104106
allwaysYes.On("NewContainerHandler", testContainerName).Return(mockContainer, nil)
105107

106-
cont, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, true)
108+
cont, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, testMetadataEnvs, true)
107109
if err != nil {
108110
t.Error(err)
109111
}
@@ -129,7 +131,7 @@ func TestNewContainerHandler_NoneMatch(t *testing.T) {
129131
}
130132
container.RegisterContainerHandlerFactory(allwaysNo2, []watcher.ContainerWatchSource{watcher.Raw})
131133

132-
_, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, true)
134+
_, _, err := container.NewContainerHandler(testContainerName, watcher.Raw, testMetadataEnvs, true)
133135
if err == nil {
134136
t.Error("Expected NewContainerHandler to fail")
135137
}
@@ -152,7 +154,7 @@ func TestNewContainerHandler_Accept(t *testing.T) {
152154
}
153155
container.RegisterContainerHandlerFactory(cannotAccept, []watcher.ContainerWatchSource{watcher.Raw})
154156

155-
_, accept, err := container.NewContainerHandler(testContainerName, watcher.Raw, true)
157+
_, accept, err := container.NewContainerHandler(testContainerName, watcher.Raw, testMetadataEnvs, true)
156158
if err != nil {
157159
t.Error("Expected NewContainerHandler to succeed")
158160
}

container/raw/factory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (f *rawFactory) String() string {
5656
return "raw"
5757
}
5858

59-
func (f *rawFactory) NewContainerHandler(name string, inHostNamespace bool) (container.ContainerHandler, error) {
59+
func (f *rawFactory) NewContainerHandler(name string, metadataEnvs []string, inHostNamespace bool) (container.ContainerHandler, error) {
6060
rootFs := "/"
6161
if !inHostNamespace {
6262
rootFs = "/rootfs"

0 commit comments

Comments
 (0)