Skip to content

Commit 19df107

Browse files
authored
Merge pull request #2900 from Creatone/creatone/disable-metrics
Fix cAdvisor constantly polls data that has been disabled
2 parents efe3df6 + de4c2e2 commit 19df107

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

build/integration.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ printf "" # Refresh sudo credentials if necessary.
2626
function start {
2727
set +e # We want to handle errors if cAdvisor crashes.
2828
echo ">> starting cAdvisor locally"
29-
GORACE="halt_on_error=1" ./cadvisor --docker_env_metadata_whitelist=TEST_VAR --v=6 --logtostderr $CADVISOR_ARGS &> "$log_file"
29+
# This cpuset, percpu, memory, disk, diskIO, network, perf_event metrics should be enabled.
30+
GORACE="halt_on_error=1" ./cadvisor --enable_metrics="cpuset,percpu,memory,disk,diskIO,network,perf_event" --docker_env_metadata_whitelist=TEST_VAR --v=6 --logtostderr $CADVISOR_ARGS &> "$log_file"
3031
if [ $? != 0 ]; then
3132
echo "!! cAdvisor exited unexpectedly with Exit $?"
3233
kill $TEST_PID # cAdvisor crashed: abort testing.

container/libcontainer/helpers.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,27 @@ func GetCgroupSubsystems(includedMetrics container.MetricSet) (CgroupSubsystems,
4848

4949
disableCgroups := map[string]struct{}{}
5050

51-
//currently we only support disable blkio subsystem
5251
if !includedMetrics.Has(container.DiskIOMetrics) {
5352
disableCgroups["blkio"] = struct{}{}
5453
disableCgroups["io"] = struct{}{}
5554
}
55+
56+
if !includedMetrics.Has(container.CPUSetMetrics) {
57+
disableCgroups["cpuset"] = struct{}{}
58+
}
59+
60+
if !includedMetrics.Has(container.HugetlbUsageMetrics) {
61+
disableCgroups["hugetlb"] = struct{}{}
62+
}
63+
64+
if !includedMetrics.Has(container.MemoryUsageMetrics) {
65+
disableCgroups["memory"] = struct{}{}
66+
}
67+
68+
if !includedMetrics.Has(container.PerfMetrics) {
69+
disableCgroups["perf_event"] = struct{}{}
70+
}
71+
5672
return getCgroupSubsystemsHelper(allCgroups, disableCgroups)
5773
}
5874

manager/manager.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -939,10 +939,12 @@ func (m *manager) createContainerLocked(containerName string, watchSource watche
939939
}
940940

941941
if cgroups.IsCgroup2UnifiedMode() {
942-
perfCgroupPath := path.Join(fs2.UnifiedMountpoint, containerName)
943-
cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath)
944-
if err != nil {
945-
klog.Errorf("Perf event metrics will not be available for container %q: %v", containerName, err)
942+
if m.includedMetrics.Has(container.PerfMetrics) {
943+
perfCgroupPath := path.Join(fs2.UnifiedMountpoint, containerName)
944+
cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath)
945+
if err != nil {
946+
klog.Errorf("Perf event metrics will not be available for container %q: %v", containerName, err)
947+
}
946948
}
947949
} else {
948950
devicesCgroupPath, err := handler.GetCgroupPath("devices")
@@ -954,13 +956,15 @@ func (m *manager) createContainerLocked(containerName string, watchSource watche
954956
klog.V(4).Infof("GPU metrics may be unavailable/incomplete for container %s: %s", cont.info.Name, err)
955957
}
956958
}
957-
perfCgroupPath, err := handler.GetCgroupPath("perf_event")
958-
if err != nil {
959-
klog.Warningf("Error getting perf_event cgroup path: %q", err)
960-
} else {
961-
cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath)
959+
if m.includedMetrics.Has(container.PerfMetrics) {
960+
perfCgroupPath, err := handler.GetCgroupPath("perf_event")
962961
if err != nil {
963-
klog.Errorf("Perf event metrics will not be available for container %q: %v", containerName, err)
962+
klog.Warningf("Error getting perf_event cgroup path: %q", err)
963+
} else {
964+
cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath)
965+
if err != nil {
966+
klog.Errorf("Perf event metrics will not be available for container %q: %v", containerName, err)
967+
}
964968
}
965969
}
966970
}

0 commit comments

Comments
 (0)