你真的了解 Docker 日志吗?

news2024/11/28 6:09:16

dockerlogs


目录

    • 前言
    • 排查
    • 总结


前言

今天服务器发送了磁盘告警通知,于是打开了尘封已久的电脑连上了公司服务器,服务器跑的是一个 Docker Swarm 集群(正是集群中的某一台服务器发生告警),告警的服务器上运行了多个游戏后台程序。一看到捕鱼游戏的程序,想都不用想(连打一条鱼都能产生日志的游戏),肯定就是它在搞鬼。于是进入该模块的数据持久化目录下查看其磁盘占用情况,结果发现就占用了 4 个多 G 不到 5 个 G,且其他容器(模块)的日志也是比较小的(几百兆)。

于是就去查看 Docker 的引擎日志,结果就是 Docker 引擎日志占用的服务器磁盘空间,接下来看看具体的排查步骤。

排查

1、先查看各游戏模块的数据持久化目录数据大小

其他模块日志的大小均小于当前查询模块的值,所以排除容器日志占用的服务器磁盘空间。

du -h --max-depth=1 ./

image-20230909204323801

2、接着查看 Docker 引擎日志(或叫驱动程序日志)

整体来说,Docker 日志无非就两类 => 容器日志驱动程序日志,第一步排查的就属于容器日志

驱动程序位于 Docker 服务的数据目录下的 container 目录下(我当前 Docker 服务的数据目录位于 /data/docker/ 下)。

进入对应目录后,查看该目录下对应的目录大小,下图可见 container 就是 Docker 的驱动程序日志目录,占了 140G。

du -h --max-depth=1 ./

image-20230909203829748

3、进入 container 目录并查看具体是哪个容器服务产生的大数据量的驱动程序日志

首先你要清楚的是,缺省情况下的 Docker 日志驱动程序为 json-file,常见的驱动程序还有 syslog、fluentd、gelf 等。

下图可见,容器 ID 为 d99611... 产生了 128 G 的驱动程序日志(这里要清楚的是每个容器都会产生驱动程序日志)。

du -sh * | sort -nr | head

image-20230909210007786

4、进入该容器 ID 目录并再次确认日志大小

很显然,我的日志驱动程序是 json-file 类型的,我们只需清空该日志即可释放其占用的磁盘空间

du -sh * | sort -nr | head

image-20230909210310815

5、清空该程序驱动日志

这里要注意:尽量不要使用 rm -rf 来删除日志文件(可能空间没有真正的释放,需重启 Docker 服务)。

因此我们使用一个空值进行覆盖即可(无需重启)释放磁盘空间占用。

清理后我们可见日志文件大小瞬间变为 16K。

image-20230909210520944

总结

1、Docker 日志分类

  • 容器的 stdout 和 stderr

    这些日志由在 Docker 容器中运行的应用程序生成。stdout 通常包含应用程序的正常输出,而 stderr 包含错误和异常信息。这些日志是最常见的 Docker 日志,它们可以通过 Docker 命令或 Docker API 进行访问。

  • Docker 守护进程日志

    Docker 守护进程本身也会生成日志,用于记录容器的创建、启动、停止等活动。这些日志通常包含 Docker 守护进程的运行状态和错误信息。它们通常被记录在守护进程的日志文件中,文件位置因操作系统而异(如 /var/log/docker.log)。

  • 容器日志文件

    Docker 容器内部的日志通常存储在容器的文件系统中。这些日志文件由容器内运行的应用程序生成,其位置和格式取决于应用程序的配置。你可以通过进入容器并查看这些文件来访问容器内部的日志。

  • Docker 日志驱动程序

    Docker 支持不同的日志驱动程序,用于将容器的日志输出发送到不同的目标。常见的日志驱动程序包括 json-file、journald、syslog、fluentd、gelf、splunk 等。每个驱动程序都有自己的配置选项和目标,允许你将日志发送到特定的日志聚合工具或目标。

2、如何查看你 Docker 当前的日志驱动程序

全局查看 Docker 的日志驱动程序

docker info
# 或
docker info |grep "Logging Driver"
# 或
docker info --format '{{.LoggingDriver}}'

image-20230909205808530

如何查看某个容器的日志驱动程序呢?

docker inspect -f '{{.HostConfig.LogConfig.Type}}' <你的容器ID>

3、如何指定设置 Docker 容器的日志驱动程序?

  • 运行容器时指定日志驱动

    场景:在运行少量容器服务时可这样操作

    注意:该操作的优先级高于全局配置的优先级

    docker run -it --log-driver none alpine ash
    
    # --log-driver:指定驱动程序
    # none:驱动程序名
    
  • 在 Docker 服务进行全局配置

    场景:在运行大量容器服务时可这样操作

    注意1:修改后需重新启动 Docker 以使更改对新创建的容器生效。现有容器不使用新的日志记录配置。

    注意2:daemon.json 配置文件中的 log-opts 配置必须以字符串类型的方式配置(因此数字也必须引号引起来)。

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3",
        "labels": "production_status",
        "env": "os,customer"
      }
    }
    
    # 说明
    # log-driver:指定日志驱动程序
    # log-opts:配置日志文件大小、文件个数及相关自定义标签等
    # max-size:限制日志文件最大大小
    # max-file:限制日志文件最多个数
    

4、Docker 支持的日志记录驱动程序

看官方文档:https://docs.docker.com/config/containers/logging/configure/

image-20230909211948220

在生产环境中,通常会将容器的日志输出发送到集中式日志系统,以便集中存储、分析和监控。常见的集中式日志系统包括Elasticsearch、Logstash、Kibana(ELK堆栈)、Fluentd、Graylog、Splunk 等。

比如将 Docker 驱动程序日志发送到 ELK,可这样配置:

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "udp://<logstash-host>:<logstash-port>"
  }
}

—END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密室逃脱小游戏

欢迎来到程序小院 密室逃脱 玩法&#xff1a; 判断可生存的空间&#xff0c;鼠标点击屏幕进行人物左右移动&#xff0c;躲避闸道进行生存&#xff0c;每进行一次关卡都会有分数统计&#xff0c;赶紧去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/176 html <c…

L1 项目概述与Hadoop部署

1.技术栈&#xff1a;HadoopHiveSqoopFlumeAzkaban Flume采集Nginx web服务器上的日志&#xff0c;采集完成后存储到Hadoop的平台&#xff0c;最终存储到HDFS上&#xff0c;处理和分析采用Hive的方式&#xff0c;处理完之后利用Sqoop导出到Mysql中&#xff0c;最终利用一个Java…

开源电商项目 Mall:构建高效电商系统的终极选择

文章目录 Mall 项目概览前台商城系统后台管理系统系统架构图业务架构图 模块介绍后台管理系统 mall-admin商品管理&#xff1a;功能结构图-商品订单管理&#xff1a;功能结构图-订单促销管理&#xff1a;功能结构图-促销内容管理&#xff1a;功能结构图-内容用户管理&#xff1…

日常中出现msvcp140.dll丢失的5个解决方法与msvcp140.dll详细解析

前几天&#xff0c;我在使用电脑时遇到了一个奇怪的问题&#xff1a;打开某些程序时&#xff0c;系统提示找不到msvcp140.dll文件。这让我非常困惑&#xff0c;因为我之前从未遇到过这样的问题。为了解决这个问题&#xff0c;我在网上查找了许多关于解决msvcp140.dll丢失的信息…

IDEA插件Mybatis Log Plugin的安装及其使用教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 插件概述 Mybatis Log Plugin插件用于查看Mybatis所执行的完整SQL语句。在此教程中详细介绍IDEA插件Mybatis Log Plugin的安装及其使用。 安装过程 请搜索并安装Mybatis …

kafka学习-基本概念与简单实战

目录 1、核心概念 消息和批次 Topic和Partition Replicas Offset broker和集群 生产者和消费者 2、开发实战 2.1、消息发送 介绍 代码实现 2.2、消息消费 介绍 代码实现 2.3、SpringBoot Kafka pom application.yaml KafkaConfig producer consumer 1、核心…

C++项目实战——基于多设计模式下的同步异步日志系统-③-前置知识补充-设计模式

文章目录 专栏导读六大原则单例模式饿汉模式懒汉模式 工厂模式简单工厂模式工厂方法模式抽象工厂模式 建造者模式代理模式 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿…

LP(六十九)智能文档助手升级

本文在笔者之前研发的大模型智能文档问答项目中&#xff0c;开发更进一步&#xff0c;支持多种类型文档和URL链接&#xff0c;支持多种大模型接入&#xff0c;且使用更方便、高效。 项目介绍 在文章NLP&#xff08;六十一&#xff09;使用Baichuan-13B-Chat模型构建智能文档中…

CodeJock Active-X / COM v22.1.0 Crack

CodeJock Active-X / COM v22.1.0--这个支持 Unicode 啦&#xff0c; Unicode Unicode 创建专业应用程序&#xff0c;其中包含一整套高度可定制的用户界面组件&#xff0c;包括 Visual Studio 风格的对接窗格和 Office 风格的功能区、工具栏和菜单&#xff0c;为您的应用程序…

电商邮件营销攻略:教你如何有效运营邮件营销策略!

作为一种领先的营销渠道&#xff0c;电子邮件营销已被电子商务公司作为推动客户参与度、促进销售和提高ROI的不可或缺的方式。在这篇文章中&#xff0c;我们将深入探讨电子商务公司为什么要做EDM邮件营销&#xff1f;以及电商公司怎么做邮件营销&#xff1f; 一、电子商务公司…

系统架构设计师(第二版)学习笔记----多媒体技术

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----多媒体技术 文章目录 一、多媒体概述1.1 媒体的分类1.2 多媒体的特征1.3 多媒体系统的基本组成 二、多媒体系统的关键技术2.1 多媒体系统的关键技术2.2 视频技术的内容2.3 音频技术的内容2.4 数据压缩算法…

时序分解 | MATLAB实现基于SSA奇异谱分析的信号分解分量可视化

时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 奇异谱分解奇异谱分析SSA 可直接替换txt数据运行 Matlab 1.包含3D分解效果图 频谱图等…

多路转接之PollEpoll

文章目录 Pollpoll函数接口poll的优缺点poll示例Util.hpp(所用到的函数方法)Server.hppServer.cclog.hpp(日志) Epollepoll的相关系统调用epoll_createepoll_ctlepoll_wait epoll工作原理epoll的优点epoll工作方式对比LT和ETepoll服务器(LT模式)示例Util.hpp(需要调用的函数)Se…

DeepinV20/Ubuntu安装postgresql方法

首先&#xff0c;建议看一下官方的安装文档PostgreSQL: Linux downloads (Ubuntu) PostgreSQL Apt Repository 简单的说&#xff0c;就是Ubuntu下的Apt仓库&#xff0c;可以用来安装任何支持版本的PgSQL。 If the version included in your version of Ubuntu is not the one…

一笑的大型连续剧之第二集

开场白 各位小伙伴们大家晚上好&#xff0c;今天来和大家一起更新一下我的开发之旅的第二集。上周时间也已经匆匆过去了。今天也是周六晚上了&#xff0c;这个周末很充实但是又很空虚。 本周小结 本周完成了我开发旅途中的第一个模块&#xff0c;关于绩效面谈的一个模块的一…

树莓派入门

目录 前言系统烧录使用官方烧录工具选择操作系统选择存储卡配置 Win32DiskImager 有屏幕树莓派开机树莓派关机无屏幕树莓派开机获取树莓派IP地址通过路由器获取共享网络方式获取给树莓派配置静态IP地址查找默认网关分盘给树莓派的IP地址修改树莓派DHCP配置文件 ssh登录 让树莓派…

排序(408)

一、插入排序&#xff08;直接、折半、希尔&#xff09; 【2009统考】若数据元素序列{11,12,13,7,8,9,23,4,5}是采用下列排序方法之一得到的第二趟排序后的结果&#xff0c;则该排序算法只能是&#xff08;B&#xff09; A、冒泡排序 B、插入排序 C、选择排序 …

freemarker模板引擎详解以及使用方法

哈喽&#xff01;大家好&#xff0c;我是旷世奇才李先生 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff0c;回复【项目】获取我为大家准备的项目 文章目录 一、freemarker 介绍1、简介 二、free…

Java 基于 SpringBoot 的酒店管理系统,附源码和数据库

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 一、前言介绍二、系统结构三、系统详细实现3.1用户信息管理3.2会员信息管理3.3客房信息管理3.4收藏…

浅析linux异步io框架 io_uring

前言 Linux内核5.1支持了新的异步IO框架iouring&#xff0c;由Block IO大神也即Fio作者Jens Axboe开发&#xff0c;意在提供一套公用的网络和磁盘异步IO&#xff0c;不过io_uring目前在磁盘方面要比网络方面更加成熟。 目录 背景简介 io_uring 系统API liburing 高级特性…