本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。监控和日志历来都是系统稳定运行和问题排查的关键,在微服务架构中,数量众多的容器以及快速变化的特性使得一套集中式的日志管理系统变成了生产环境中一个不可获取的部分。此次话题我们会集中在日志管理方面,本篇会介绍Docker自带的logs子命令以及其Logging driver。

一、Docker logs子命令

  默认情况下,Docker的日志会发送到容器的标准输出设备(STDOUT)和标准错误设备(STDERR),其中STDOUT和STDERR实际上就是容器的控制台终端。

  我们可以通过logs子命令来查看具体某个容器的日志输出:

docker logs edc-k8s-demo

  这时看到的日志是静态的,截止到目前为止的日志。如果想要持续看到新打印出的日志信息,那么可以加上 -f 参数,如:

docker logs -f edc-k8s-demo

二、Docker logging driver

  刚刚我们学习了默认配置下,Docker日志会发送到STDOUT和STDERR。但实际上,Docker还提供了其他的一些机制允许我们从运行的容器中提取日志,这些机制统称为 logging driver。

  对Docker而言,其默认的logging driver是json-file,如果在启动时没有特别指定,都会使用这个默认的logging driver。

  json-file会将我们在控制台通过docker logs命名看到的日志都保存在一个json文件中,我们可以在服务器Host上的容器目录中找到这个json文件。

容器日志路径:/var/lib/docker/containers/<container-id>/<container-id>-json.log

  例如我们可以查看一个exceptionless-api容器的json日志:

  一个快速查看某个容器的日志文件路径的方法:

docker inspect exceptionless_api_1

  通过inspect命令,可以查到该容器的ID及一系列配置信息,我们重点关注LogPath即可:

  查到LogPath后,即可复制其后面的日志路径了,打开这个json文件你就可以看到输出的容器日志了。

  除了json-file,Docker还支持以下多种logging dirver,来源:Configure logging drivers

  其中,none 代表禁用容器日志,不会输出任何容器日志。

  其他几个logging driver解释如下:

  • syslog 与 journald 是Linux上的两种日志管理服务
  • awslog、splunk 与 gcplogs是第三方日志托管服务
  • gelf 与 fluentd 是两种开源的日志管理方案

  我们可以在容器启动时通过加上 --log-driver 来指定使用哪个具体的 logging driver,例如:

docker run -d --log-driver=syslog ......

  如果想要设置默认的logging driver,那么则需要修改Docker daemon的启动脚本,例如:

{
"log-driver": "json-file",
"log-opts": {
"labels": "production_status",
"env": "os,customer"
}
}

  每个logging driver都有一些自己特定的log-opt,使用时可以参考具体官方文档。

三、小结

  本文介绍了Docker自带的logs子命令以及logging driver,默认的logging driver是json-file,当然Docker还支持多个不同机制的logging dirver,我们可以根据自己的需要在使用时进行指定。下一篇,我们会学习流行的开源日志管理三兄弟ELK(ElasticSearch、Logstash、Kibana)。

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

你必须知道的容器日志 (1) Docker logs & logging driver的更多相关文章

  1. 实时查看docker容器日志

    实时查看docker容器日志 $ sudo docker logs -f -t --tail 行数 容器名 例:实时查看docker容器名为s12的最后10行日志 $ sudo docker logs ...

  2. Docker笔记(十三):容器日志采集实践

    日志是服务运行过程中的一个关键环节,借助日志,我们可以排查定位问题,也可以借助集中化的日志管理平台(如ELK)来做一些必要的数据统计分析.在Docker环境中,日志的采集比传统环境更为复杂,因此了解D ...

  3. 你必须知道的容器日志 (2) 开源日志管理方案 ELK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...

  4. 日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

    高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要. 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要.考虑到容器短暂和不固定的生命周期,当我们需 ...

  5. Docker容器日志管理最佳实践

    目录 一 .Docker 引擎日志 二.容器日志 2.1.常用查看日志命令--docker logs 2.2 .Docker 日志 驱动 三. 生产环境中该如何储存容器中的日志 一.当是完全是标准输出 ...

  6. docker容器日志管理(清理)

    原文:docker容器日志管理(清理) 前言 在使用docker容器时候,其日志的管理是我们不得不考虑的事情.因为docker容器的日志文件会占据大量的磁盘空间.下面介绍的就是对docker容器日志的 ...

  7. Docker 容器日志分析

    查看容器日志 先使用  docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine 命令启动一个nginx容器.如果没有异常,会得到容器ID如  d2408 ...

  8. docker容器日志查看

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

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

    Docker 日志 Docker的日志可以分为两类: stdout标准输出日志 stdout就是标准输出里面的日志, 比如程序运行时输出在控制台的内容就会写入标准输出 原理就是当在启动进程的时候,进程 ...

随机推荐

  1. Linux及Windows安装Redis(详细)

    Linux及Windows安装Redis 1.Windows安装教程 1.1下载 https://github.com/MSOpenTech/redis/releases 进入github里下载red ...

  2. 百万年薪python之路 -- 并发编程之 多线程 二

    1. 死锁现象与递归锁 进程也有死锁与递归锁,进程的死锁和递归锁与线程的死锁递归锁同理. 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因为争夺资源而造成的一种互相等待的现象,在无外力的作用 ...

  3. JVM 垃圾收集与内存分配

    判断对象是否还活着 引用计数法 给对象添加引用计数器,添加加1,引用失效减1,如果为0就是不可使用的.问题是不能解决互相引用带来的问题 可达性分析法 以GC Roots为起点,判断到一个对象是否有引用 ...

  4. SoapUI 关联之Property Transfer、JSONPath、Xpath

    进行接口功能测试过程中,经常会碰到,需要获取到上一个请求响应结果中数据,传递到下一个请求中来使用.在soapui中我们通过Property Transfer来实现. 1.Property Transf ...

  5. LNMP与LAMP的工作原理

    LAMP的实现原理 LAMP=Linux+Apache+Mysql+PHP.​#工作原理:浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一 ...

  6. $.ajax.html

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  7. mysql中if函数的正确使用姿势

    --为了今天要写的内容,运行了将近7个小时的程序,在数据库中存储了1千万条数据.-- 今天要说的是mysql数据库的IF()函数的一个实例. 具体场景如下, 先看看表结构: CREATE TABLE ...

  8. Token refresh的实现

    实现原理: 在access_token里加入refresh_token标识,给access_token设置短时间的期限(例如一天),给refresh_token设置长时间的期限(例如七天).当活动用户 ...

  9. 使用Magicodes.SwaggerUI快速配置SwaggerUI以及设置API分组

    Magicodes.SwaggerUI 快速配置和集成SwaggerUI 特点 通过配置文件简单配置即可完成SwaggerUI的API格式JSON生成和集成 支持API分组和隐藏 支持自定义页面和验证 ...

  10. 星空:差分,状压dp

    总算不再是能用暴力卡常/随机化水过的好T3了. 说是打了两个标签,实际上最关键的是题意转化. 如果你丝毫不转化的话也可以: #include<bits/stdc++.h> using na ...