diff --git a/cadvisor.go b/cadvisor.go index 33de78e4..ca5dd1de 100644 --- a/cadvisor.go +++ b/cadvisor.go @@ -65,6 +65,8 @@ var whitelistedContainerLabels = flag.String("whitelisted_container_labels", "", var urlBasePrefix = flag.String("url_base_prefix", "", "prefix path that will be prepended to all paths to support some reverse proxies") +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") + var ( // Metrics to be ignored. // Tcp metrics are ignored by default. @@ -145,7 +147,7 @@ func main() { collectorHttpClient := createCollectorHttpClient(*collectorCert, *collectorKey) - containerManager, err := manager.New(memoryStorage, sysFs, *maxHousekeepingInterval, *allowDynamicHousekeeping, includedMetrics, &collectorHttpClient, []string{"/"}) + containerManager, err := manager.New(memoryStorage, sysFs, *maxHousekeepingInterval, *allowDynamicHousekeeping, includedMetrics, &collectorHttpClient, strings.Split(*rawCgroupPrefixWhiteList,",")) if err != nil { klog.Fatalf("Failed to create a Container Manager: %s", err) } diff --git a/container/raw/factory.go b/container/raw/factory.go index 7863da50..c42e473f 100644 --- a/container/raw/factory.go +++ b/container/raw/factory.go @@ -63,17 +63,20 @@ func (self *rawFactory) NewContainerHandler(name string, inHostNamespace bool) ( return newRawContainerHandler(name, self.cgroupSubsystems, self.machineInfoFactory, self.fsInfo, self.watcher, rootFs, self.includedMetrics) } -// The raw factory can handle any container. If --docker_only is set to false, non-docker containers are ignored. +// The raw factory can handle any container. If --docker_only is set to true, non-docker containers are ignored except for "/" and those whitelisted by raw_cgroup_prefix_whitelist flag. func (self *rawFactory) CanHandleAndAccept(name string) (bool, bool, error) { - accept := name == "/" || !*dockerOnly - + if name == "/" { + return true, true, nil + } + if *dockerOnly && self.rawPrefixWhiteList[0] == "" { + return true, false, nil + } for _, prefix := range self.rawPrefixWhiteList { if strings.HasPrefix(name, prefix) { - accept = true - break + return true, true, nil } } - return true, accept, nil + return true, false, nil } func (self *rawFactory) DebugInfo() map[string][]string {