• Docker容器日志的种类以及存储


    Docker 日志

    Docker的日志可以分为两类:

    • stdout标准输出日志

      stdout就是标准输出里面的日志, 比如程序运行时输出在控制台的内容就会写入标准输出

      原理就是当在启动进程的时候,进程之间有一个父子关系,父进程可以拿到子进程的标准输出

    • 文件日志

      直接写入磁盘的日志, 例如java使用log4j框架直接将日志落盘(不在控制台输出)就是典型的文件日志

    所有的容器通过Docker Daemon启动,实际上属于Docker的一个子进程, 它可以拿到你的容器里面进程的标准输出,然后拿到标准输出之后,会通过它自身的一个叫做LogDriver的模块来处理.

    LogDriver就是Docker用来处理容器标准输出的一个模块。 Docker支持很多种不同的处理方式,比如你的标准输出之后,在某一种情况下会把它写到一个日志里面.

    1. 查看日志

    可以通过docker logs [containerID]命令查看容器的日志

    $ docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
    

    例子:

    查看指定时间后的日志,只显示最后100行:

    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
    

    查看最近30分钟的日志:

    $ docker logs --since 30m CONTAINER_ID
    

    查看某时间之后的日志:

    $ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
    

    查看某时间段日志:

    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
    

    2. 日志在哪?

    日志一般都会落盘在宿主机的/var/lib/docker文件夹下, 具体的信息可以通过docker inspect命令查看:

    $ docker inspect [OPTIONS] CONTAINER
    

    例如:

    $ docker inspect -f {{".LogPath"}} 2be
    

    输出:

    /data/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log
    

    这就是这个容器的日志记录文件了

    日志文件相关信息

    日志记录系统一般都可以对日志文件进行拆分, 比如按日期, 按大小等.在Docker的日志记录系统下也是可以实现的, 默认情况下一个容器会产生一个日志文件, 没有大小限制, 不会根据日期拆分, 即从容器启动到容器销毁, 日志文件永远是那一个.

    也可以通过一些配置项进行配置, 例如json-file模式:

    选项 描述 示例值
    max-size 日志文件的最大大小, 默认为-1(无限制) --log-opt max-size=10m
    max-file 可以存在的最大日志文件数。如果滚动日志会创建多余的文件,则会删除最早的文件。仅在max-size设置时有效。一个正整数。默认为1。 --log-opt max-file=3
    labels 在启动Docker守护程序时适用。该守护程序接受的与日志记录相关的标签的逗号分隔列表。用于高级日志标签选项 --log-opt labels=production_status,geo
    env 在启动Docker守护程序时适用。该守护程序接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标签选项 --log-opt env=os,customer
    env-regex 与相似并兼容env。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标签选项 `--log-opt env-regex=^(os
    compress 切换旋转日志的压缩。默认值为disabled --log-opt compress=true

    3. 配置LogDriver

    Docker官方目前支持这些log driver, 默认使用的是json-file模式:

    Driver Description
    none 丢弃容器输出
    local 日志以自定义格式存储
    json-file 日志存储格式为json, 默认的logdriver驱动
    syslog 日志写入到指定的syslog地址
    journald 日志写入到指定jounald
    gelf 以gelf格式发送日志
    fluentd 日志发送到指定的fluentd服务
    awslogs 日志发送到指定的Amazon CloudWatch Logs
    splunk 日志发送到指定的splunk服务
    etwlogs 日志发送到Event Tracing for Windows, 仅支持windows平台
    gcplogs 日志发送到Google Cloud日志系统
    logentries 日志发送到Rapid7 Logentries

    有两种方法可以修改docker的LogDriver

    • 修改Docker Daemon, 这样会对所有容器生效, 以syslog为例:

      dockerd --log-driver=syslog --log-opt syslog-address=127.0.0.1:514
      
    • 在容器启动时加上配置项, 这样配置只会对当前容器生效:

      docker run --log-driver=syslog --log-opt syslog-address=127.0.0.1:514 nginx:laster
      

    除了上述的这些logdriver, 也可以自定义logdriver, 并且通过docker plugin install进行安装, 详情可见:

    使用日志记录驱动程序插件

  • 相关阅读:
    随时间的反向传播算法 BPTT
    实时绘制训练过程中损失和准确率的变化趋势 python keras jupyter notebook
    测试集的准确率为什么高于训练集的准确率?
    Adagrad和Stochastic梯度下降
    使用http-server在本地搭建一个HTTP服务器
    JS Promise
    npm淘宝镜像
    git子模块submodule
    git本地与远程分支
    git别名
  • 原文地址:https://www.cnblogs.com/yisany/p/13725504.html
Copyright © 2020-2023  润新知