docker限制容器日志大小

文章目录

    • 业务场景
    • 问题排查
    • 彻底解决

业务场景

  • 我们公司做交通相关业务,我们部门主要负责信控服务,卖信号机的硬件产品和配套的信控平台

  • 由于有部分小项目,可能只有几十个路口,客户预算有限,只给我们老旧的Windows server服务器,我们平台需要Linux环境,就在里面部署虚拟机

  • 我们使用CentOS7虚拟机部署信控平台,我们建立的虚拟机,系统目录root默认分配了50G内存,一般情况下是够用的

  • 为了保持环境统一,我们使用docker部署平台服务,使用docker-compose管理配置文件

  • docker服务,默认目录在/var/lib/docker,属于/dev/mapper/centos-root文件系统,docker服务的镜像、容器、卷等都在这个目录下
    在这里插入图片描述

  • 早上九点部署测试环境服务时,顺手使用df -hl检查磁盘占用情况,发现centos-root目录已使用93%(46.5G),磁盘空间即将不足

  • 正常情况下,我们的centos-root目录一般空间占用在17-20G左右,肯定是有哪个服务有问题

问题排查

  • 磁盘使用问题,出现异常占用,首先就要看看有没有大文件
  • 使用find命令,查找大文件
find / -type f -size +500M -exec ls -lh {} \; | awk '{ print $9 ":" $5 }';
  • 结果发现一个服务的日志/var/lib/docker/containers/25f900b388614288704640a1fe2e556a95c5440b4dcc1b8bf227926400c006f4/25f900b388614288704640a1fe2e556a95c5440b4dcc1b8bf227926400c006f4-json.log大小为28G(刚好是多出来的部分,46.5-28=18.5)
  • 通过路径/var/lib/docker/containers,就可以知道,这个一个docker容器,后面的容器id
  • 使用命令docker ps -a,查看所有的服务和容器id
  • 根据容器id,找到对应的服务为data-collection,我们的雷达采集服务
    在这里插入图片描述
  • 我们的docker服务日志,会使用脚本每天凌晨0点压缩存储,循环存储最近七天日志。有兴趣的可以参考这篇博客:定时压缩存储和清理docker容器的日志
  • 由于我们每天定时处理,按理说不会有这么大的日志文件
  • 查看了这个日志内容,全是数据库连接报错,看了下,测试环境ck数据库未启动,而这个服务一直接收雷达数据进行写库操作
  • 数据写入很频繁,写入就会抛出报错堆栈,日志累计很快,9个小时就累计了28G
  • 先将服务暂停,日志清空。将ck数据库启动后,重新启动data-collection服务,没有报错了
  • 临时解决很简单,清空容器日志,再将clickhouse正常启动起来,重启容器服务就行,但这是治标不治本的做法
  • 虽然做了定时任务每天凌晨处理容器日志,但是当某个日志在一天内就能撑爆服务器磁盘时,就起不到作用了

彻底解决

  • 这次报错场景,在生产环境几乎不会遇到,但也不排除clickhouse异常宕机
  • 如异常断电,断电恢复后,服务器重启,其他服务正常,clickhouse无法启动,有兴趣的参考
    • 服务器异常断电导致文件损坏,clickhouse启动报错:filesystem error Structure needs cleaning
    • 服务器强制关闭、异常断电等导致clickhouse数据损坏Suspiciously many broken parts to remove
  • 要通过修改配置,在容器配置里,通过设置参数log-opt限制最大日志大小,彻底解决这个问题
docker run --log-driver=json-file --log-opt max-size=<max_size> --log-opt max-file=<max_file_count> <image_name>
  • 如果是使用docker-compose,在yml配置文件里,对需要配置的容器配置即可
  data-collection-app:image: data-collectioncontainer_name: data-collectionvolumes:- /etc/localtime:/etc/localtimeports:- 7854:7854depends_on:- postgresql- kafka- redis- clickhouseenvironment:- _JAVA_OPTIONS=-Xmx512m -Xms256m- SERVER_PORT=8484- SPRING_PROFILES_ACTIVE=prod,api-docs,no-liquibase- SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/core- SPRING_DATASOURCE_USERNAME=xx- SPRING_DATASOURCE_PASSWORD=xxxx- radar_clickhouse_url=jdbc:clickhouse://clickhouse:8123/radar- radar_clickhouse_username=xxxx- radar_clickhouse_password=xxxxxx- spring_kafka_bootstrapServers=kafka:9092- SPRING_REDIS_HOST=redis- SPRING_REDIS_PASSWORD=xxxxxxx- SOCKETIO_PORT=7854logging:driver: "json-file"   #默认的文件日志驱动options:max-size: "500m" # 单个日志文件大小限制max-file: "3"  # 保留的日志数量
  • 其实docker支持全局配置,设置下就可以了,所有容器都生效,文件为:/etc/docker/daemon.json,没有创建一个即可
{"log-driver": "json-file","log-opts": {"max-size": "500m","max-file": "3"}
}
  • 当然,如果单个服务业配置了,会以单个服务的私有配置为准

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

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

相关文章

Handler及相关的理论知识

前言 学安卓的都接触过Handler&#xff0c;许多老java项目中也有很多使用Handler进行网络通讯&#xff0c;或许现在我们都用kotlin&#xff0c;用协程&#xff0c;但咱也不能就把Handler忘了&#xff0c;本篇文章特此巩固Handler相关知识 是什么 Handler主要用于异步消息的处…

SCSS 学习笔记 和 vscode下载live sass compiler插件配置

1、下载livelive sass compiler插件并配置 // 在 已有代码 下面 添加下面 代码&#xff0c;一般刚刚下载打开最后一行是&#xff1a;// "liveSassCompile.settings.autoprefix": [],// 所以直接 把下面复制进去保存就行"liveSassCompile.settings.autoprefix&qu…

Ubuntu本地快速搭建web小游戏网站,并使用内网穿透将其发布到公网上

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互联网&am…

MySQL的基础操作

前言 对MySQL的一些基础操作做一下学习性的总结&#xff0c;基本上是照着视频写的。 MySQL的安装 MySQL的下载 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 配置环境变量 下载之后直接解压&#xff0c…

IDEA启动报错【java.sql.SQLSyntaxErrorException: ORA-00904: “P“.“PRJ_NO“: 标识符无效】

IDEA报错如下&#xff1a; 2023-08-17 11:26:15.535 ERROR [egrant-biz,b48324d82fe23753,b48324d82fe23753,true] 24108 --- [ XNIO-1 task-1] c.i.c.l.c.RestExceptionController : 服务器异常org.springframework.jdbc.BadSqlGrammarException: ### Error queryin…

Vue前端封装一个任务条的组件进行使用

任务条 样式 代码 父组件 <articleSteps :tabs"tabs" :tabs-active-name"tabsActiveName" /><div class"drawer__footer"><el-button v-if"tabsActiveName 1 || tabsActiveName 2" click"backClick">…

【3Ds Max】可编辑多边形“边”层级的简单使用

目录 简介 示例 1. 编辑边 &#xff08;1&#xff09;插入顶点 &#xff08;2&#xff09;移除 &#xff08;3&#xff09;分割 &#xff08;4&#xff09;挤出 &#xff08;5&#xff09;切角 &#xff08;6&#xff09;焊接 &#xff08;7&#xff09;桥 &…

1.jvm和java体系结构

jvm简介 JVM&#xff1a;跨语言的平台 Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了&#xff0c;它更是一个平台、一种文化、一个社区。 ● 作为一个平台&#xff0c;Java虚拟机扮演着举足轻重的…

前端(十三)——JavaScript 闭包的奥秘与高级用法探索

&#x1f636;博主&#xff1a;小猫娃来啦 &#x1f636;文章核心&#xff1a;深入理解 JavaScript 中的闭包 文章目录 不理解闭包&#xff1f;这玩意很难&#xff1f;闭包的定义与原理闭包是什么创建一个闭包 闭包的应用场景闭包与作用域闭包与作用域之间的关系全局作用域、函…

【CHI】(十三)链路层

本章介绍了链路层&#xff0c;链路层为节点之间的基于数据包的通信和跨链路的互连提供了一种简化的机制。它包含以下几部分&#xff1a; IntroductionLinkFlitChannelPortNode interface definitionsIncreasing inter-port bandwidthChannel interface signalsFlit packet defi…

视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

juc概述和Lock接口

目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…

CST HFSS MATLAB参数方程定义曲面绘制

CST HFSS 函数定义曲面绘制 简介环境HFSSCSTMATLAB 简介 若在柱坐标系中半径r随z和phi都会变&#xff0c;无法使用一般的方法绘制&#xff0c;这时可以使用参数方程定义的曲面来绘制。举一个例子如下&#xff0c; r 100 0.5 ( c o s ( 0.2 ∗ p i ∗ z ) − 1 ) c o s ( φ …

定位服务器CPU爆满的具体原因

1、查询CPU消耗的进程 使用top命令查看系统的CPU和内存使用情况 CPU一列是线程占用百分比 2、具体查看某个占分比大的进程 以为PId:7355为例&#xff0c; 执行top -Hp 7355&#xff0c;线程按照CPU使用率排序。 3、将线程PID转化为16进制 执行printf %x 7391&#xff0c;将…

论文阅读 - Understanding Diffusion Models: A Unified Perspective

文章目录 1 概述2 背景知识2.1 直观的例子2.2 Evidence Lower Bound(ELBO)2.3 Variational Autoencoders(VAE)2.4 Hierachical Variational Autoencoders(HVAE) 3 Variational Diffusion Models(VDM)4 三个等价的解释4.1 预测图片4.2 预测噪声4.3 预测分数 5 Guidance5.1 Class…

Istio入门体验系列——基于Istio的灰度发布实践

导言&#xff1a;灰度发布是指在项目迭代的过程中用平滑过渡的方式进行发布。灰度发布可以保证整体系统的稳定性&#xff0c;在初始发布的时候就可以发现、调整问题&#xff0c;以保证其影响度。作为Istio体验系列的第一站&#xff0c;本文基于Istio的流量治理机制&#xff0c;…

MySQL 字符集概念、原理及如何配置 — 图文详解

目录 一、字符集概念 1、字符&#xff08;Character&#xff09; 2、字符编码 3、字符集&#xff08;Character set&#xff09; 二、字符集原理 1、ASCII字符集 2、GB2312 3、GBK 4、GB18030 5、BIG5 6、Unicode 编码 三、字符序 四、MySQL字符集 & 字符序 …

Git标签

Git 中的标签&#xff0c;指的是某个分支某个特定时间点的状态(静态)。通过标签&#xff0c;可以很方便的切换到标记时的状态。 比较有代表性的是人们会使用这个功能来标记发布结点 (v1.0、v1.2等)。 下面是myatis-plus的标签: 1 标签相关命令 命令作用git tag查看标签&…

Go语言入门指南:基础语法和常用特性(下)

上一节&#xff0c;我们了解Go语言特性以及第一个Go语言程序——Hello World&#xff0c;这一节就让我们更深入的了解一下Go语言的**基础语法**吧&#xff01; 一、行分隔符 在 Go 程序中&#xff0c;一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ;…

解决多模块开发中的问题(聚合继承)

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Maven 一、聚合1.1创建Maven模块&#xff0c;设置打包类型…