docker原生支持众多的日志引擎,适用于各种不同的应用场景,本篇文档对其作一个简单的说明。

Docker日志引擎说明

docker支持的日志引擎如下:

  • none:关闭docker的回显日志, docker logs 看不到任何输出。使用这种方式也就意味着无法查看任何容器输出的日志

  • json-file:把每个容器的回显日志打到每个容器的内部, 形式为json 文件。在实际使用中, 有些容器在启动后有大量的回显日志, 尤其在程序内部报错时打出的日志信息尤其巨大, 很可能会因为某几个容器的json 日志过大而撑爆整个宿主机的磁盘

  • syslog:把所有容器的回显日志打到系统的syslog中。

    目前harbor私有镜像仓库使用docker-compose方式启动的话,就默认使用的这种方式。将所有容器的日志都集中收集到一个harbor-log的容器中,在执行docker logs的时候会提示"logs" command is supported only for "json-file" and "journald" loggin drivers (got: syslog)

  • journald:把所有容器的回显日志打到系统的journald服务中,这是推荐的方式。

  • fluentd:把所有容器的回显日志打到fluentd服务中

  • gelf 把所有容器的回显日志打到支持 GELF(Graylog Extended Log Format) 格式的服务中, 比如Graylog或Logstash

修改docker日志引擎

  1. 修改docker配置文件/etc/docker/daemon.json如下:
    {
    "log-driver": "journald"
    }
  2. 在容器运行时指定其日志引擎:
    docker run --log-driver=journald alpint /bin/sh

journald配置说明

journald配置文件说明

# /etc/systemd/jornald.conf示例:

[Journal]
#Storage=auto 存储为自动模式, 其他模式有无日志模式, 纯内存模式和纯磁盘模式
#Compress=yes 默认启动压缩功能
#Seal=yes 默认加密, 日志文件为二进制文件, 无法 vim或tail 查看
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=1000
#SystemMaxUse= 精确设置日志可以占用的最大磁盘空间
#SystemKeepFree= 保证系统剩余的空间大小
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

journald 默认配置下, 默认日志最大限制为所在文件系统容量的 10%

默认配置下, journald 的日志存放在 /var/log/journal 下, 如果该目录在根分区下, 且根分区空间大小为10G, 那么 journald 存放日志最大的大小为1G, 超出1G 后将删除最早的日志

也可以精确指定占用的空间大小:

SystemMaxUse=50M

journalctl基本用法

  • journalctl 从头查看所有日志

  • journalctl -b 查看本次开机后的所有系统引导日志

  • journalctl -b -1 显示上次开机后的系统引导日志, 以此类推

  • journalctl -f 类似于 tail -f或tailf

  • journalctl /usr/bin/dockerd 后加程序的绝对路径,可以显示该程序的所有日志信息

  • journalctl -xe systemd 启动程序失败时会提示你使用这个命令查看错误信息, 其中x 表示在日志输出中增加一些解释性的短文本, e表示立即跳转至日志的尾部

journald注意事项

journald配置中,有两个非常重要的优化项目:

ForwardToSyslog=yes
ForwardToWall=yes

以上两个参数默认都是 yes 意味着 journald 收集日志后还会转发到 syslog 中

由此造成的影响是: journald 虽然可以乖乖的按照上面的配置进行日志的清理, 但是 syslog 却不在 journald 的控制范围之内

在日志量很大的情况下,syslog中的日志量也变得巨大,所以我们需要把上面两个参数的值改为no

重启journald服务:

systemctl restart systemd-journald.service

参考:https://docs.lvrui.io/2017/02/19/更改docker的日志引擎为-journald/

docker日志引擎说明的更多相关文章

  1. Docker 日志都在哪里?怎么收集?

    https://www.cnblogs.com/YatHo/p/7866029.html 日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日 ...

  2. docker 日志分析

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

  3. docker 日志清理

    首先确认 docker 使用的存储引擎 docker info 如果使用 Logging Driver: json-file, 那么日志默认在 /var/lib/docker/contains/xxx ...

  4. Docker -- 日志

    docker 的两总日志 引擎日志 容器日志 引擎日志 简介: Docker 引擎日志就是 dockerd 运行时的日志 在CentOS 7系统中,Docker 引擎日志一般是交给 systemd来管 ...

  5. docker 日志位置

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

  6. Docker 日志管理最佳实践

    开源Linux 回复"读书",挑选书籍资料~ Docker-CE Server Version: 18.09.6 Storage Driver: overlay2 Kernel V ...

  7. Docker 存储引擎

      可插拔存储引擎架构   这种可插拔式的存储架构.可以让你很灵活的去选择适合自己环境的存储引擎. 每个存储引擎都是以Linux 文件系统为基础的.此外,每个存储引擎都以自己的方式自由的管理image ...

  8. docker日志输出文件大小设置以及文件个数限制

    问题描述: 今天有同事运行了一个docker容器,不多时就导致宿主机硬盘直接撑爆,消耗了120G,发生的很是突然. 问题排查: 后续查阅资料,发现是因为docker中的某个进程一直在持续输出,而这些输 ...

  9. 【转帖】技术选型之Docker容器引擎

    技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...

随机推荐

  1. js备忘录2

    JavaScript 的类型分为两类,分别是原始类型和对象类型 其中原始类型中只有数字.字符串和布尔型,和java中的有些不一样 null和undefined不是基本数据类型中的某一种 对象是prop ...

  2. Java每日编程day2

    Java每日编程day2 第一题 package com.pcx.day2; /* * 九九乘法表并逆序 */ public class JiuJiu { public static void mai ...

  3. 使用exe4j将jar包导出为exe

    Exe4J使用方法 此工具是将Java程序包装成exe格式文件工具.(点击exe4j\bin\exe4j.exe文件)启动后如下图所示 如果未注册,则可使用这个注册码:A-XVK209982F-1y0 ...

  4. Shiro异常1:java.lang.IllegalArgumentException: Line argument must contain a key and a value. Only one

    按照开涛shiro的事例 ,老是出这个异常 原因在于ini文件格式错误,为什么我也不知道 我是这样改的:找到其他可以的(换行的时候能右移两下的)在换行处复制粘贴得到那个格式,新建一个ini文件,把刚刚 ...

  5. Teamwork(The third day of the team)

    在确定了第一个spring后我们就开始了各自的工作,不过由于大家都在专注于自己的工作并且由于近段时间的作业及各方面的事情都很多,没有来得及每天都更新一个博客,因此,我们现在把落下的博客都补上,很多事情 ...

  6. 【Coursera】高斯混合模型

    一.高斯混合模型 软分类算法,即对每一个样本,计算其属于各个分布的概率,概率值最大的就是这个样本所属的分类. 对于训练样本的分布,看成为多个高斯分布加权得到的.其中每个高斯分布即为某一特定的类. 高斯 ...

  7. golang数据类型转换

    int--string //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_in ...

  8. PROFIBUS-DP现场总线的结构及应用

    PROFIBUS的最大优点在于具有稳定的国际标准EN50170作保证,并经实际应用验证具有普遍性.目前已广泛应用于制造业自动化.流程工业自动化和楼宇.交通电力等领域. PROFIBUS由3个兼容部分组 ...

  9. python调用Sikuliapi

    Sikuli是由MIT(麻省理工学院) 研究团队发布的一种图形化编程技术(编程小白的福音),使用Sikuli你只需要会写HelloWorld这种最基本的编程技能即可,用Sikuli不需要去写出一行行复 ...

  10. [转帖]通俗解释 AWS 云服务每个组件的作用

    你有听说过 ContainerCache,ElastiCast 和 QR72 这些 AWS 的新服务吗? 没有就对了,这些都是我编的:) 不过,AWS 有 50 多个服务,从名称也不能看出这些服务是做 ...