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进行安装, 详情可见:
Docker容器日志的种类以及存储的更多相关文章
- docker容器日志收集方案汇总评价总结
docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...
- Docker 容器日志分析
查看容器日志 先使用 docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine 命令启动一个nginx容器.如果没有异常,会得到容器ID如 d2408 ...
- docker容器日志管理
docker容器日志分为两类:docker引擎日志(Docker本身运行的日志)和容器日志(各个容器内产生的日志) 一.Docker引擎日志: Centos系统下的docker引擎日志一般给syste ...
- docker 容器日志集中 ELK + filebeat
docker 容器日志集中 ELK ELK 基于 ovr 网络下 docker-compose.yaml version: '2' networks: network-test: external: ...
- docker容器日志收集方案(方案二 filebeat+syslog本地日志收集)
与方案一一样都是把日志输出到本地文件系统使用filebeat进行扫描采集 不同的是输出的位置是不一样的 我们对docker进行如下设置 sudo docker service update --lo ...
- docker容器日志收集方案(方案一 filebeat+本地日志收集)
filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输. docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上 格式如下: { " ...
- Docker 容器日志格式化
Docker容器的日志文件每一行都是一个json对象,其包含log.stream.time三个属性,下面的HTML从textarea中读取输入的日志信息,格式化为表格显示. <!DOCTYPE ...
- 实时查看docker容器日志
实时查看docker容器日志 $ sudo docker logs -f -t --tail 行数 容器名 例:实时查看docker容器名为s12的最后10行日志 $ sudo docker logs ...
- docker容器日志清理
1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理(治标不治本,log迟早还会大的) 查看各个容器的log文件大小 find /var/lib/dock ...
随机推荐
- JQuery选择器的使用和分类
jQuery选择器 id选择器格式 $("#box") //获取标签里的id是box的标签 类选择器格式 $(".a") //获取标签里的类名是a的标签 标签选 ...
- [开发笔记usbTOcan]软件需求分析和软件架构设计
前面文章进行了系统分析和系统架构设计,手工焊接了一个板子,集合EK-TMC123GXL开发板(请忽略焊接技术) SWE.1 | 软件需求分析 软件需求分析过程的目的是将系统需求的软件相关部分转化为一组 ...
- 【小测试】使用腾讯云上的群集版redis
具体的文档请见:https://cloud.tencent.com/document/product/239/3205 群集版本相当于很多个redis进程构成一个群集,最大支持128个分片(猜测分片就 ...
- 使用Cesium Stories在3D Tilesets中检查Features
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们创建了3D Tiles用以流式化.可视化和分析大量的三维内容 ...
- 一段关于java NIO server端接受客户端socket连接;演示了关于channel,selector等组件的整合使用
public class ReactorDemo { public static void main(String[] args) throws IOException { ServerSocketC ...
- Maven常用设置
1,maven属性设置 <properties>设置maven的常用属性 <properties> 属性设置 <!--maven构建项目使用编码,避免中文乱码--> ...
- Java 锁 概念介绍
一 Java中的锁是什么? /* * 一 Java锁定义? * 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制. * 锁旨在强制 ...
- ApacheCN PHP 译文集 20211101 更新
PHP 入门指南 零.序言 一.PHP 入门 二.数组和循环 三.函数和类 四.数据操作 五.构建 PHP Web 应用 六.搭建 PHP 框架 七.认证与用户管理 八.建立联系人管理系统 使用 PH ...
- Github上点赞90k的计算机基础、操作系统、网络笔记,赶紧收藏
最近,有粉丝发消息给我,说想要好好学习计算机,但是找不到门路啊,所以小编打算给大家推荐一些很奈斯的计算机学习的资料,希望大家赶紧收藏起来好好学习. 资料分为四份,给大家展示了部分内容,头条受限,无法全 ...
- Java--这张线程瓜图保熟,不进来看看?这瓜要是不熟它就Dead掉了
先来看一下线程这张图线程的几种运行状态之间运行流程: 看不懂没关系,慢慢来学习,往下学习来继续了解一下~ 什么是线程? 线程是进程的一部分,是程序执行中的一条执行路线: 进程就是指程序在其自身地址空间 ...