isun
docker
浏览:1,054
五月 8, 2020
容器日志如果直接输出到标准输入输出可以通过配置docker日志为滚动方式避免写爆磁盘,但是直接输出到容器中的日志等文件仍然可能撑爆容器(默认容器根目录可用空间为10G)。
下述脚本通过docker system df -v获取到各个容器磁盘空间使用量,将磁盘使用量大于1G的容器信息输出,包括主机ip,容器id,镜像名。
check-container-size.sh
#!/bin/sh
# 首先获取默认路由对应的网络设备名,要求各个主机有ip命令,yum install net-tools -y
host_if=$(ip route|grep default|cut -d' ' -f5)
# 根据网络设备名筛选出设备对应IP
host_ip=$(ip a|grep "$host_if$"|awk '{print $2}'|cut -d'/' -f1)
echo "Host IP: $host_ip"
# 获取所有docker组件磁盘使用信息
docker system df -v >ctnr.tmp
# 截取关键字之间的容器信息
sed -i -n "/^Containers space usage/,/^Local Volumes space usage/p" ctnr.tmp
# 删除前3行:
# Containers space usage
# 空行
# CONTAINER ID ...
sed -i '1,3d' ctnr.tmp
# 删除最后两行:
# 空行
# Local Volumes space usage
linenum=`cat ctnr.tmp |wc -l`
# 倒数第2行号
linenum_last2=`expr $linenum - 1`
sed -i ''"$linenum_last2"','"$linenum"'d' ctnr.tmp
# 容器信息格式,仅仅处理容器空间在GB以上的并且处于运行中的容器
# 4fd4ab3e9463 i.harbor.com/tomcat:v8 "catalina.sh run" 0 1.57 GB 14 hours ago Up c36bf34f-7ecd-4665-b811-bc61b56d6a06
# 告警大小,单位GB
warnSizeGB=1
# 仅查询运行中容器
cat ctnr.tmp |grep GB |grep Up |awk -F '"' '{print $1 $3}' |awk '{if($4 >= "'$warnSizeGB'") print "'$host_ip' "$1" "$2" "$4" "$5}'
# 查询所有容器
#cat ctnr.tmp |grep GB | awk -F '"' '{print $1 $3}' |awk '{if($4 >= "'$warnSizeGB'") print "'$host_ip' "$1" "$2" "$4" "$5}'
可以在管理主机上通过ansible查询所有主机上空间使用量大于1Gb的所有容器
ansible all -m script -a "/data/check-container-size.sh"