一、清理系统日志

du -h /var/log

这是系统默认的日志目录,如果不改 SSH 端口,和禁用密码登陆,必然会产生大量日志,btmp、syslog、auth.log 这几个日志能大到占用 G 以上的空间。
你要用的是 echo 来清空日志,这样就可以马上释放被占用的空间

echo > /var/log/btmp
echo > /var/log/syslog
echo > /var/log/auth.log

此外,即便你已经修改了 SSH 端口和禁用了密码登陆,没有上面 3 个日志占用空间,也会出现是 /var/log/journal 在吃硬盘,可以通过以下命令限制占用大小,下面 100M 就是限制日志最大为 100M(可以根据你个人情况修改)

journalctl --vacuum-time=1d && journalctl --vacuum-size=1M && systemctl restart systemd-journald.service

二、清理 Docker 日志

1. 查看各个容器的 log 文件大小

find /var/lib/docker/containers/ -name *-json.log |xargs du -sh

867526-20190313092250861-607053282.png

2. 执行清理

$ cat /dev/null > /var/lib/docker/containers/dfe25896671f0def031c5ffeb12dd335f7f54212c6ca5d3aca1c3f50b5e1eec4/dfe25896671f0def031c5ffeb12dd335f7f54212c6ca5d3aca1c3f50b5e1eec4-json.log

3. 脚本化清理

#!/bin/sh 

echo "======== start clean docker containers logs ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  

echo "======== end clean docker containers logs ========"  
chmod +x clean_docker_log.sh
./clean_docker_log.sh

备注:如果 docker 容器正在运行,那么使用 rm -rf 方式删除日志后,通过 df -h 会发现磁盘空间并没有释放。原因是在 Linux 或者 Unix 系统中,通过 rm -rf 或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是 cat /dev/null > *-json.log,当然你也可以通过 rm -rf 删除后重启 docker。

4. 设置 Docker 容器日志大小

1.新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

# vim /etc/docker/daemon.json

{
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}

max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

2.然后重启docker的守护线程

命令如下:

systemctl daemon-reload
systemctl restart docker

【需要注意的是:设置的日志大小规则,只对新建的容器有效】