Docker统计数据持续n秒



我正在从shell脚本运行docker stats $CONTAINER_ID,以在1小时内监控我的Docker容器内存和CPU使用情况。我有下面的shell脚本。

#!/bin/sh
# First, start the container
CONTAINER_ID=abcadsasdasd
# Then start watching that it's running (with inspect)
while [ "$(docker inspect -f {{.State.Running}} $CONTAINER_ID 2>/dev/null)" = "true" ]; do
# And while it's running, check stats
#docker stats $CONTAINER_ID 2>&1 | tee "$1"
docker stats --format "table {{.Container}}t{{.CPUPerc}}t{{.MemUsage}}t{{.NetIO}}t{{.BlockIO}}t{{.PIDs}}" $CONTAINER_ID 2>&1 | tee "$1"
sleep 5
done

运行良好。但是,它似乎每时每刻都在运行。我需要它每5秒输出一次。我发现并没有像用docker stats命令指定时间段这样的选项。请求一些建议来实现它。看来睡眠5没有任何效果。

编辑

即使有1秒的延迟,我的日志文件中也会有60行,而在5秒的情况下,我预计在1分钟内会有12行。但是,我在1分钟内已经接近150行了。

在没有睡眠的情况下,只需从文件中读取当前值($1(,并在您选择的每个周期对其进行平均:

#!/bin/bash
multiLine="";
format="table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}";
docker stats --all --format "$format" --no-trunc | (while read line; do
sedLine=$(echo "$line" | sed "s/^.*name.*cpu.*mem.*$/_divider_/i")
if [ "$sedLine" != "_divider_" ];
then
multiLine="${multiLine}"'n'"${line}";
else
echo -e $multiLine > $1;
multiLine="";
fi;
done);

docker stats $container在运行时不会退出,因此您的sleep 5没有机会执行。

对你来说,你应该使用下一个:

--no-stream       Disable streaming stats and only pull the first result

然后,你可以使用类似下一个假代码的东西来控制速率:

while xxx; do
docker stats $container --no-stream
sleep 5
done

最新更新