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"}
}
- 当然,如果单个服务业配置了,会以单个服务的私有配置为准
相关文章:
docker限制容器日志大小
文章目录 业务场景问题排查彻底解决 业务场景 我们公司做交通相关业务,我们部门主要负责信控服务,卖信号机的硬件产品和配套的信控平台 由于有部分小项目,可能只有几十个路口,客户预算有限,只给我们老旧的Windows ser…...
底层驱动实现数码管显示温湿度数值功能
开发板:STM32MP157A 温湿度传感器:si7006 显示器(数码管):m74hc595 遇到的问题:循环采集温湿度传感器数值,并将数值发送给数码管的时候两者存在竞态关系,导致数码管显示亮度很暗 …...
03架构管理之测试管理
专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理…...
30、devtools 依赖关于自动重启(自动加载页面)的知识
devtools 依赖关于自动重启的知识 ★ 自动重启 devtools会监控类加载路径中的文件(尤其是*.class文件),只要这些文件发生了改变, devtools就会自动重启Spring Boot应用。▲ 不同工具触发自动重启的方式:Eclipse&…...
ES6 Promise/Async/Await使用
Promise应用 在工作中, 我们经常会遇到用异步请求数据, 查询一个结果, 然后把返回的参数放入到下一个执行的异步函数像这样: $.ajax({..., success(resp)>{$.ajax({..., resp.id, success(resp)>{$.ajax({..., resp.name success(resp)>{//多层嵌套的情况, 看着是不…...
Word中对象方法(Methods)的理解及示例(上)
【分享成果,随喜正能量】奋斗没有终点,任何时候都是一个起点,沉潜是为了蓄势待发,沉潜是为了等待因缘。鲸豚沉潜于大海,幽兰深藏于山谷,能够经得起沉潜的人,才会有更高的成就。正如一年的树木只能当柴烧&am…...
AutoDev 1.1.3 登场,个性化 AI 辅助:私有化大模型、自主设计 prompt、定义独特规则...
在过去的半个月里,我们为开源辅助编程工具 AutoDev 添加了更强大的自定义能力,现在你可以: 使用自己部署的开源大模型自己配置 Intellij IDEA 中的行为自定义开发过程中的规范 当然了,如果您自身拥有开发能力的话,建议…...
win11 python 调用edge调试过程
1、下载对应版本的驱动程序: https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/ 2、和系统版本对应的exe文件(x86、x64要对应)放置的固定的目录,我放到了system32下了; 3、PATH路径添加windows/system32目录&#x…...
DS-排序回顾
快速排序相比于堆排序的优点有: 效率更高:快速排序的平均时间复杂度为 O(nlogn),而堆排序的时间复杂度为 O(nlogn)。虽然它们的时间复杂度相同,但是在实际情况下,快速排序往往比堆排序更快,因为快速排序具有…...
clion软件ide的安装和环境配置@ubuntu
1.官网: Download CLion 2.安装Clion 直接在官网下载并安装即可,过程很简单 https://www.jetbrains.com/clion/ https://www.jetbrains.com/clion/download/#sectionlinux 3.激活码 4.配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©…...
Cpp学习——类与对象3
目录 一,初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二,单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…...
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&a…...
ahooks.js:一款强大的React Hooks库及其API使用教程(四)
一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程51. useResetState52. useUpdateLayoutEffect53. useDeepCompareLayoutEffect54. useRafInterval55. useRafTimeout56. useTimeout57. useLockFn58. useDocumentVisibility59. useDrop60. useDrag 一、…...
FOSSASIA Summit 2023 - 开源亚洲行
作者 Ted 致歉:本来这篇博客早就该发出,但是由于前几个月频繁差旅导致精神不佳,再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress,以及 7/29-30 台北的 COSCUP23,干脆三篇连发&#x…...
QT 基本对话框
包括: 1.标准文件对话框 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QTextCodec> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QFr…...
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022&…...
Azure静态网站托管
什么是静态网站托管 Azure Blob的静态网站托管是一项功能,它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能,您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中,并直接通过提供的URL访问这些资源。 官…...
LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表
题目一: 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求: 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可…...
常用消息中间件介绍
RocketMQ 阿里开源,阿里参照kafka设计的,Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现,非常重量级,更适…...
装饰器读取不到被装饰函数的参数-已解决
def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
