add raw_cgroup_prefix_whitelist flag and fix issue #2129

This commit is contained in:
viberan 2019-02-03 10:55:06 +02:00 committed by Eugene Brusilovsky
parent 150629c099
commit 7bb8b34a5b
2 changed files with 12 additions and 7 deletions

View File

@ -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 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 ( var (
// Metrics to be ignored. // Metrics to be ignored.
// Tcp metrics are ignored by default. // Tcp metrics are ignored by default.
@ -145,7 +147,7 @@ func main() {
collectorHttpClient := createCollectorHttpClient(*collectorCert, *collectorKey) 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 { if err != nil {
klog.Fatalf("Failed to create a Container Manager: %s", err) klog.Fatalf("Failed to create a Container Manager: %s", err)
} }

View File

@ -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) 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) { 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 { for _, prefix := range self.rawPrefixWhiteList {
if strings.HasPrefix(name, prefix) { if strings.HasPrefix(name, prefix) {
accept = true return true, true, nil
break
} }
} }
return true, accept, nil return true, false, nil
} }
func (self *rawFactory) DebugInfo() map[string][]string { func (self *rawFactory) DebugInfo() map[string][]string {