docker限制容器日志大小

这篇具有很好参考价值的文章主要介绍了docker限制容器日志大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

业务场景

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

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

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

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

  • docker服务,默认目录在/var/lib/docker,属于/dev/mapper/centos-root文件系统,docker服务的镜像、容器、卷等都在这个目录下
    docker限制容器日志大小,工具使用,Linux,docker,容器,运维

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

  • 正常情况下,我们的centos-root目录一般空间占用在17-20G左右,肯定是有哪个服务有问题文章来源地址https://www.toymoban.com/news/detail-655577.html

问题排查

  • 磁盘使用问题,出现异常占用,首先就要看看有没有大文件
  • 使用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限制容器日志大小,工具使用,Linux,docker,容器,运维
  • 我们的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-collection
    container_name: data-collection
    volumes:
      - /etc/localtime:/etc/localtime
    ports:
      - 7854:7854
    depends_on:
      - postgresql
      - kafka
      - redis
	  - clickhouse
    environment:
      - _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=7854
    logging:
        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限制容器日志大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker实战07|Docker增加容器资源限制

    上一篇文章中,讲解了Docker run的具体流程以及Docker是如何改变PID为1的底层原理。 具体文章可见《Docker就应该这么学-06》 有需要的小伙伴可以回顾一下。 接下来本文会详细介绍一下Docker 是如何增加容器的资源限制 获取代码 上一节中,已经可以通过命令行  docker run -ti 的方

    2024年02月02日
    浏览(34)
  • docker限制容器内存的方法

    在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪。而对 docker 进行限制后,可以将瘫痪范围控制在 docker 内。 因此,本文将介绍使用 docker 进行容器内存限制的方法。

    2024年02月01日
    浏览(28)
  • Docker中如何限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍如何限制容器可以使用的 CPU 资源。

    2024年02月09日
    浏览(36)
  • 【云原生】Docker容器资源限制(CPU/内存/磁盘)

    目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容器,每个容器都需要 CPU、内存和 IO 资源。对

    2024年02月14日
    浏览(35)
  • 【Docker】限制已运行容器的Cpu和内存

    docker限制已运行容器的Cpu和内存 本文首发于 慕雪的寒舍 最近云服务器的内存经常不够用,而且是 莫名其妙 的增多,在腾讯云的控制台里面看,4g的内存占用了3.2g,就卡到连ssh都连不上了 PS: 已换过网络和设备,确认不是网络问题导致无法ssh 实在没辙了,只能把我的几个不

    2023年04月25日
    浏览(30)
  • Linux运维:系统日志篇

    您可以将系统日志理解为记录系统运行情况的一种日记。它包含了各种级别的信息,从调试信息和错误报告到警告和系统事件等。通过对系统日志进行分析,管理员可以了解系统的状态和运行情况,发现并解决问题,确保系统的正常运行。因此,系统日志是管理和维护 Linux

    2024年02月05日
    浏览(91)
  • 【Python编程工具】【ssh连接Docker容器】如何使用Docker容器里的python环境,如何调试在容器中的代码

    本篇博客将介绍如何在Docker容器中打开SSH连接服务,以及如何使用JetBrains Gateway软件进行代码调试。 JetBrains Gateway是一款紧凑型桌面应用,可让您通过 JetBrains IDE 远程工作,甚至无需下载这些IDE。通过在桌面端安装这款软件,您可以直接调试服务器上的代码。 使用以下命令启

    2024年01月25日
    浏览(53)
  • 使用 Visual Studio Code Docker 工具调试 .NET 容器

    作者:Chet Husk 排版:Alan Wang Visual Studio Code Docker 工具已发布1.26.0版本,这个版本为使用 .NET SDK 构建和调试容器映像提供了内置支持。 Visual Studio Code Docker 工具使开发人员可以轻松入门容器。它提供了 Dockerfile 模板,用于构建、运行和调试从 Dockerfile 生成的容器的集成,并提

    2024年02月12日
    浏览(35)
  • Docker(镜像、容器、仓库)工具安装使用命令行选项及构建、共享和运行容器化应用程序

    👧个人主页:@小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 🔑本章内容:Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序时的主要步骤 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:以下是本篇文章正文内容,下面案例可供参考 以下是在常

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包