今天跟大家聊聊docker的日志!

Docker日志概念

如果时光可以倒流,现实世界的每一步都可以分解到最小,记录下来,就是日志。万物即日志。

面对历史,审视日志,可以选择忘却,也可以选择铭记;经历过的,可以选择珍藏,同样也可以让它尘封。

Docker 容器又何尝不是?日志就像一根时间轴,你在或者不在,他都在那。有人对其善意,有人却对其随意。如若不信,可以回忆,自己是否善待 Docker 容器的日志

  1. 传统应用的日志

    • stdout标准输出日志
    • 通过log4j等工具直接写入硬盘的日志
  2. Docker 时代的日志

所有的容器通过Docker Daemon启动,实际上属于Docker的一个子进程, 它可以拿到你的容器里面进程的标准输出,然后拿到标准输出之后,会通过它自身的一个叫做LogDriver的模块来处理,LogDriver就是Docker用来处理容器标准输出的一个模块。 Docker支持很多种不同的处理方式,比如你的标准输出之后,在某一种情况下会把它写到一个日志里面。

  1. Docker日志如何使用

    1. 项目中使用log4j等工具写入到容器中某个目录,然后通过启动启动时候去挂载到主机目录,这是一种常见的使用手段(本文不探讨这种方式)

    2. 项目中所有日志stdout标准输出,此时我们利用Docker的日志系统去收集日志

如何查看Docker日志?

可以通过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分钟)

下列为Docker常用的一些日志命令:

  • 查看指定时间后的日志,只显示最后10行:
$ docker logs -f -t --since="2021-04-01" --tail=10 CONTAINER_ID

  • 查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
  • 查看某时间之后的日志:
$ docker logs -t --since="2021-04-01T13:23:37" CONTAINER_ID
  • 查看某时间段日志:
$ docker logs -t --since="2021-04-01T13:23:37" --until "2021-04-01T16:23:37" CONTAINER_ID

Docker日志存储在哪里?

Dcoker默认的存储目录在 /var/lib/docker下,我们可以通过修改命令修改存储目录:

vim /etc/docker/daemon.json 
#修改到/opt目录下
{
  "data-root": "/opt/docker"
}

查看某个容器的日志目录在哪里:

$  docker inspect -f {{".LogPath"}}  CONTAINER_ID

/var/lib/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log

/var/lib/docker/containers: 默认容器存储地址 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad:容器id 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log:容器的日志文件,格式为默认的json-file

Docker日志驱动分类

  • 驱动类型选择
选项描述
none 不使用日志
local 自定义日志驱动
json-file 默认json存储的日志
syslog 日志写入到指定的syslog地址
journald 日志写入到指定jounald
fluentd 日志写入到指定fluentd服务
awslogs 日志发送到指定的Amazon CloudWatch Logs
splunk 日志发送到指定的splunk服务
gcplogs 日志发送到Google Cloud日志系统
logentries 日志发送到Rapid7 Logentries
  • 如何使用驱动?

    1. 修改Docker Daemon, 这样会对所有容器生效, fluentd:

      dockerd --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224  
    2. 在容器启动时加上配置项, 这样配置只会对当前容器生效:

    docker run --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224  nginx

结束

下篇讲解Docker-Swarm如何在微服务项目中使用!

欢迎关注公众号! 公众号回复:入群 ,扫码加入我们交流群! 扫码关注公众号获取更多学习资料

posted on 2021-04-02 16:34  coding途中  阅读(748)  评论(0编辑  收藏  举报

导航