diff --git a/source/tools/monitor/unity/collector/plugin.yaml b/source/tools/monitor/unity/collector/plugin.yaml index 8645fe6e966440f2350ec157cc709946d7067dfd..7bf48d9e4664825079e8c0242faa64ded9066e9d 100644 --- a/source/tools/monitor/unity/collector/plugin.yaml +++ b/source/tools/monitor/unity/collector/plugin.yaml @@ -38,6 +38,16 @@ container: - "kubepods.slice/kubepods-besteffort.slice" - "kubepods.slice/kubepods-burstable.slice" + indirectCgPath1: + - path: "/kubepods.slice" + child1: "/kubepods%-pod" + child2: "/cri%-containerd" + - path: "/kubepods.slice/kubepods-besteffort.slice" + child1: "/kubepods%-besteffort%-pod" + child2: "/cri%-containerd" + - path: "/kubepods.slice/kubepods-burstable.slice" + child1: "/kubepods%-burstable%-pod" + luaPlugins: ["proc_buddyinfo", "proc_diskstats", "proc_meminfo", "proc_mounts", "proc_netdev", "proc_snmp_stat", "proc_sockstat", "proc_stat", "proc_statm", "proc_vmstat", "proc_uptime"] diff --git a/source/tools/monitor/unity/collector/podMan/podFilter.lua b/source/tools/monitor/unity/collector/podMan/podFilter.lua index 7088eed4bb9c4db4c5fc1b22f6669e3fa267638b..a871b49aeaa01bedbfd1b1c1d848f2317c500236 100644 --- a/source/tools/monitor/unity/collector/podMan/podFilter.lua +++ b/source/tools/monitor/unity/collector/podMan/podFilter.lua @@ -79,13 +79,51 @@ function CpodFilter:_init_(resYaml, proto, pffi, mnt) self._mnt = mnt self._ino = Cinotifies.new() - self._dirs = self:walkTops(self._resYaml.container) + self._dirs = self:walkTops1(self._resYaml.container) self._plugins = setupPlugins(self._resYaml, self._proto, self._pffi, self._mnt, self._dirs) print("add " .. #self._plugins) end +function CpodFilter:enum1LDirs(root, format, parent, dirs) + local alldirs = listSrc(root) + for _, file in ipairs(alldirs) + do + local destPath = root..'/'..file + local destentry = parent..'/'..file + if string.match('/'..file, format) then + self._ino:add(destPath) + addDirs(dirs, destentry) + end + end + return dirs +end + +function CpodFilter:walkTops1(resYaml) + local cgroups = {"cpuacct", "memory", "blkio", "perf_event"} + local dirs = system:deepcopy(resYaml.directCgPath) + + for i,cg in ipairs(cgroups) do + for _, value in ipairs(resYaml.indirectCgPath1) do + if nil == value.child1 then + goto continue + end + local level1 = {} + local root = self._top.."/"..cg + self:enum1LDirs(root..value.path, value.child1, value.path, level1) + for _, parent in ipairs(level1) do + addDirs(dirs, parent) + if nil ~= value.child2 then + self:enum1LDirs(root..parent, value.child2, parent, dirs) + end + end + ::continue:: + end + end + return dirs +end + function CpodFilter:walkTops(resYaml) - local topDirs = {"memory", "cpu", "cpuset", "blkio", "perf_event", "cpuacct"} + local topDirs = {"cpuacct", "memory", "blkio", "perf_event"} local dirs = system:deepcopy(resYaml.directCgPath) for _, top in ipairs(topDirs) do @@ -119,7 +157,7 @@ function CpodFilter:proc(elapsed, lines) print("cgroup changed.") local start = lua_local_clock() self._ino = Cinotifies.new() - self._dirs = self:walkTops(self._resYaml.container) + self._dirs = self:walkTops1(self._resYaml.container) self._plugins = setupPlugins(self._resYaml, self._proto, self._pffi, self._mnt, self._dirs) local stop = lua_local_clock() ret, delta = 1, stop - start