From ae0c827a6c031687393b52b3570787cf693b59ce Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Mon, 6 Dec 2021 23:36:27 +0000 Subject: [PATCH] Support Docker running under CGroups v1 and v2 Docker supports either CGroups v1 or v2 and while running under v2 the memory stat details change slightly. To account for FS cache we need to subtract out `memory_stats.stats.inactive_file` instead of `memory_stats.stats.total_cache` under v1. We found this despondency when running the latest `dockerd` on Debian Bullseye. --- check_docker/check_docker.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/check_docker/check_docker.py b/check_docker/check_docker.py index 1a9d754..37bdd5d 100755 --- a/check_docker/check_docker.py +++ b/check_docker/check_docker.py @@ -520,7 +520,14 @@ def check_memory(container, thresholds): inspection = get_stats(container) # Subtracting cache to match what `docker stats` does. - adjusted_usage = inspection['memory_stats']['usage'] - inspection['memory_stats']['stats']['total_cache'] + adjusted_usage = inspection['memory_stats']['usage'] + if 'total_cache' in inspection['memory_stats']['stats']: + # CGroups v1 - https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt + adjusted_usage -= inspection['memory_stats']['stats']['total_cache'] + elif 'inactive_file' in inspection['memory_stats']['stats']: + # CGroups v2 - https://www.kernel.org/doc/Documentation/cgroup-v2.txt + adjusted_usage -= inspection['memory_stats']['stats']['inactive_file'] + if thresholds.units == '%': max = 100 usage = int(100 * adjusted_usage / inspection['memory_stats']['limit'])