• Docker容器日志查看与清理的方式


    美国第三任总统(托马斯.杰弗逊)曾说过:“不要因为别的人相信或否定了什么东西,你也就去相信它或否定它。上帝赠予你一个用来判断真理和谬误的头脑。那你就去运用它吧!”。

    在没有陪你奔跑的日子,努力加油哦!

    发现

        正常使用docker部署测试环境程序,一直部署不上去。最后发现docker容器运行产生日志过多,导致了系统存储爆满,服务无法正常访问。(服务中开启了最高日志级别debugger)。

        遇到了问题,那就想办法解决呗,百度了哈,最终找到了解决方案。在此做下记录。

    日志分类

    日志分为两类,一类是Docker引擎日志;另一类是容器日志。

    • Docker引擎日志
      Docker引擎日志一般是交给了Upstart(Ubuntu14.04)或者systemd(CentOS 7,Ubuntu 16.04)。前者一般位于/var/log/upstart/docker.log下,后者一般通过 jounarlctl -u docker来读取。不同系统的位置都不一样,参考如下:
    系统 日志位置
    Ubuntu(14.04) /var/log/upstart/docker.log
    Ubuntu(16.04) journalctl -u docker.service
    CentOS 7/RHEL 7/Fedora journalctl -u docker.service
    CoreOS journalctl -u docker.service
    OpenSuSE journalctl -u docker.service
    OSX ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d‌​ocker.log
    Debian GNU/Linux 7 /var/log/daemon.log
    Debian GNU/Linux 8 journalctl -u docker.service
    Boot2Docker /var/log/docker.log
    • Docker容器日志
      每个容器的日志默认都会以json-file的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log下。
    1. 查找全部容器的日志文件
    find /var/lib/docker/containers -name *.log
    
    1. 查看日志位置
    docker inspect --format='{{.LogPath}}' <container_name>
    
    1. 实时查询内容
    tail -f `docker inspect --format='{{.LogPath}}' <container_name>`
    
    • 编写脚本查看、清理日志
           既然我们知道了怎么来查看docker产生的日志和文件的存储位置,那么就开始编写脚本吧。参考如下:
    1. 查看容器日志大小 --- logs_file_size.sh
    echo "======== docker containers logs file size ========"
    logs=$(find /var/lib/docker/containers/ -name *-json.log)
    for log in $logs
            do
                 ls -lh $log
            done
    
    1. 清理日志 --- clean_containers_logs.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 ========"
    

    cat /dev/null > $log 表示将$log的文件内容清空

    可通过 sh logs_file_size.sh 和 sh clean_containers_logs.sh 运行两个shell脚本。

    参考文章:
    https://wxnacy.com/2018/06/14/docker-log/
    https://www.cnblogs.com/YatHo/p/7866029.html
    https://www.choupangxia.com/2019/09/15/linux-centos-var-lib-docker-container

    充满鲜花的世界到底在哪里
  • 相关阅读:
    Oracle关于快速缓存区应用原理
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext
    速记const 指针与指向const的指针
    bzoj3992【SDOI2015】序列统计
    ubuntu 1204 安装mysql
    解决getOutputStream() has already been called for this response
    把一个project相关的jar放到project的lib文件夹中
    解决eclipse偶尔无视breakpoint的行为
    解决eclipse无法打开:Failed to load the JNI shared library
    挣值管理公式集合
  • 原文地址:https://www.cnblogs.com/aliases/p/13232384.html
Copyright © 2020-2023  润新知