Module: check_mk
Branch: master
Commit: 888ca6b4cba951b1388889f7a46b558ce4ac4e7f
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=888ca6b4cba951…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Apr 19 19:01:03 2018 +0200
docker_container_cpu: Fixed calculation of CPU utilization
Change-Id: Ibf81448856fb28b1a1c19ccb9f55d6d00435f282
---
agents/check_mk_agent.linux | 16 ++++++++++------
checks/docker_container_cpu | 22 +++++++++++++++++-----
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/agents/check_mk_agent.linux b/agents/check_mk_agent.linux
index 4f912dc..9df613a 100755
--- a/agents/check_mk_agent.linux
+++ b/agents/check_mk_agent.linux
@@ -125,16 +125,20 @@ function section_mem()
function section_cpu()
{
+ if [ "$(uname -m)" = "armv7l" ]; then
+ CPU_REGEX='^processor'
+ else
+ CPU_REGEX='^CPU|^processor'
+ fi
+ NUM_CPUS=$(grep -c -E $CPU_REGEX < /proc/cpuinfo)
+
if [ -z "$MK_IN_CONTAINER" ]; then
echo '<<<cpu>>>'
- if [ "$(uname -m)" = "armv7l" ]; then
- CPU_REGEX='^processor'
- else
- CPU_REGEX='^CPU|^processor'
- fi
- echo "$(cat /proc/loadavg) $(grep -c -E $CPU_REGEX <
/proc/cpuinfo)"
+ echo "$(cat /proc/loadavg) $NUM_CPUS"
else
echo '<<<docker_container_cpu>>>'
+ grep "^cpu " /proc/stat
+ echo "num_cpus $NUM_CPUS"
cat /sys/fs/cgroup/cpu/cpuacct.stat
fi
}
diff --git a/checks/docker_container_cpu b/checks/docker_container_cpu
index bef4b4c..aa99a2d 100644
--- a/checks/docker_container_cpu
+++ b/checks/docker_container_cpu
@@ -33,11 +33,23 @@ def check_docker_container_cpu(_no_item, params, info):
if not params:
params = {}
- # user, nice, system, idle, iowait, hw-int, sw-int, steal
- ticks = dict(info)
- values = [ int(ticks["user"]), 0, int(ticks["system"]), 0, 0, 0,
0, 0 ]
+ ticks = {}
+ for line in info:
+ if line[0] == "cpu":
+ ticks["total"] = sum(map(int, line[1:]))
+ else:
+ ticks[line[0]] = int(line[1])
- return check_cpu_util_unix(values, params)
+ this_time = time.time()
+ node_delta = get_rate("node_total", this_time, ticks["total"])
+ container_delta = get_rate("container", this_time, ticks["user"]
+ ticks["system"])
+
+ if not node_delta or not container_delta:
+ raise MKCounterWrapped("Too short time difference since last check")
+
+ cpu_usage = (container_delta / node_delta) * ticks["num_cpus"] * 100.0
+
+ return check_cpu_util(cpu_usage, params)
check_info["docker_container_cpu"] = {
@@ -46,5 +58,5 @@ check_info["docker_container_cpu"] = {
"service_description": "CPU utilization",
"has_perfdata": True,
"includes": ["cpu_util.include"],
- "group": "cpu_iowait",
+ "group": "cpu_utilization_os",
}