你真的了解 Docker 日志吗?

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.rhkb.cn/news/127034.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测&#xff1b; 2.运行环…

A Yet Another Remainder The 2022 ICPC Asia Regionals Online Contest (II)

PTA | 程序设计类实验辅助教学平台 题目大意&#xff1a;有一个n位长的隐藏数x&#xff0c;从高位到低位依次标号为1到n&#xff0c;sum[i][j]表示从第i为开始每j位上的数的和&#xff0c;有q次询问&#xff0c;每次给出一个100以内除了5以外的质数p&#xff0c;问这个数%p等于…

网络原理,了解xml, json,protobuffer的特点

目录 外卖服务器场景带入 大佬们通用的规范格式 一、&#x1f466; 外卖服务器场景 外面服务器沟通有很多模式——展示商家列表等等&#xff0c;只是其中一个&#xff0c;因此需要一个统一的规划了——不同应用程序&#xff0c;里面的自定义格式是不一样的&#xff0c;这样的…

前端组件库造轮子——Message组件开发教程

前端组件库造轮子——Message组件开发教程 前言 本系列旨在记录前端组件库开发经验&#xff0c;我们的组件库项目目前已在Github开源&#xff0c;下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验&#xff0c;开…

算法刷题记录-其他类型(LeetCode)

57 57. Insert Interval 思路 模拟 用指针去扫 intervals&#xff0c;最多可能有三个阶段&#xff1a; 不重叠的绿区间&#xff0c;在蓝区间的左边有重叠的绿区间不重叠的绿区间&#xff0c;在蓝区间的右边 逐个分析 不重叠&#xff0c;需满足&#xff1a;绿区间的右端&…

JVM之堆和方法区

目录 1.堆 1.1 堆的结构 1.1.1 新生代&#xff08;Young Generation&#xff09; 1.1.2 年老代&#xff08;Old Generation&#xff09; 1.1.3 永久代/元空间&#xff08;Permanent Generation/Metaspace&#xff09; 1.2 堆的内存溢出 1.3 堆内存诊断 1.3.1 jmap 1.3.2…

HTML5-3-表格

文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr&#xff1a;tr 是 table row 的缩写&#xff0c;表示表格的一行。td&#xff1a;td 是 table data 的缩写&#xff0c;表示表格的数据单元格。th&#xff1a;th 是 table header的缩…

黑盒测试中的决策表设计

前言 在软件开发中&#xff0c;测试是不可或缺的一个环节。其中&#xff0c;黑盒测试是一种比较常用的测试方法。它强调测试人员不需要知道程序内部结构&#xff0c;只需根据程序规格说明书来设计测试用例进行测试。本文将介绍黑盒测试中的一种决策表设计方法。 同时&#xf…

Games202(P6、P7)环境光照与PRT全局光照

P6、实时环境光照 RealTime Environment Mapping 不同于全局光照 (1) IBL 我的Blog&#xff1a; QT with OpenGL&#xff08;IBL-漫反射辐照&#xff09;IBL-镜面反射&#xff08;预滤波篇&#xff09;IBL-镜面反射&#xff08;LUT篇&#xff09;QT with OpenGL(IBL-镜面反…

mongodb数据库操作

1、启动mongodb /usr/local/mongodb/bin/mongod --dbpath /var/mongodb/data/--logpath /var/mongodb/logs/log.log &在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二…

2023,软件测试人的未来在哪里?

2023年&#xff0c;IT行业出现空前的萧条&#xff0c;首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水&#xff0c;随之而来的是需求萎缩&#xff0c;HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员&#xff0c;庆幸之余也心有余悸&#xff0…

R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...

全文链接&#xff1a;http://tecdat.cn/?p31162 最近我们被客户要求撰写关于SV模型的研究报告&#xff0c;包括一些图形和统计输出&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 本文做SV模型&#xff0c;选取马尔可夫蒙特卡罗法(MCMC)、正则化广…

App线上网络问题优化策略

在我们App开发过程中&#xff0c;网络是必不可少的&#xff0c;几乎很难想到有哪些app是不需要网络传输的&#xff0c;所以网络问题一般都是线下难以复现&#xff0c;一旦到了用户手里就会碰到很多疑难杂症&#xff0c;所以对于网络的监控是必不可少的&#xff0c;针对用户常见…

打字侠:一款专业的中文打字网站

打字侠第一个正式版发布啦&#xff01;&#xff01;&#xff01; 虽然离期望的样子还有一段路要走&#xff0c;不过能看到它正式发布&#xff0c;我还是很激动哟&#xff01; 打字侠是一款面向中学生和大学生的在线打字软件&#xff0c;它通过合理的课程设计和精美的图形界面帮…

力扣接雨水(解析)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

FFmpeg入门之简单介绍

FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…

基于SSM的家居商城系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

MySQL基础与库的基本操作

目录 1 MySQL基础一种存储解决方案SQL分类查看MySQL存储引擎 2 MySQL 库的操作数据库基本增删认识系统编码校验规则对数据库的影响数据库的查看与删除修改数据库数据库的备份与恢复查看连接情况 1 MySQL基础 一种存储解决方案 mysql本质是一种网络服务 mysql – 数据库服务的…

Stable DIffusion系统教程 | 局部重绘,增删修改的魔法棒

目录 1. 基本操作 1.1 步骤1 补充提示词 1.2 步骤2 绘制蒙版 1.3 步骤3 参数设置 2.局部重绘其他应用 2.1 手绘蒙版 2.2 删除某些东西 之前我们熟悉了AI绘画的各类模型&#xff0c;提示词写法&#xff0c;图像放大等技巧。但我们目前所有的操作都是针对整张图片的。 但…