Docker 日志自动轮转和清理配置

docker,日志,自动,轮转,清理,配置 · 浏览次数 : 51

小编点评

**步骤 1:配置 Docker 日志驱动** * 编辑 `docker.json` 配置文件,设置 `log-driver` 到 `json-file`,并指定日志最大大小为 `100m`。 * 重新启动 Docker 服务:`sudo systemctl daemon-reload && systemctl restart docker` **步骤 2:安装和配置 logrotate** * 使用 `apt` 或 `yum` 安装 `logrotate` 工具。 * 编辑 `/etc/logrotate.conf` 文件,添加以下配置: * `/var/lib/docker/containers/*/*.log`:指定日志文件存储位置。 * `weekly`:日志轮转周期,每周一次。 * `rotate 10`:保留 10 个旧日志文件。 * `size 100M`:当日志文件大小达到 100MB 时触发轮转。 * `compress`:启用压缩旧日志。 * `delaycompress`:在压缩之前保留一个未压缩的副本。 * `notifempty`:仅在日志文件非空时轮转。 * 保存配置文件并测试:`sudo logrotate -d /etc/logrotate.conf` **步骤 3:编辑 Cron 作业** * 编辑 `/etc/crontab` 或 `/etc/cron.d` 目录的 Cron 作业文件,添加以下指令: * `0 0 * * * root /usr/sbin/logrotate -f /etc/logrotate.conf`:每一天午夜(00:00)运行 `logrotate`。 * 保存配置文件。 **步骤 4:重启 Cron 服务** * 使用 `sudo systemctl restart cron` 或 `sudo service cron restart` 命令重启 Cron 服务。 **步骤 5:验证 Cron 作业** * 使用 `crontab -l` 命令列出当前配置的 Cron 作业。 * 验证日志文件是否按预期按轮被清理。

正文

设置 Docker 日志大小和自动删除旧日志:通过配置 Docker 使用 json-file 日志驱动,同时使用 logrotate 工具,可以设置日志的最大大小(例如100MB),并在达到该大小时自动删除旧日志。这可帮助管理 Docker 日志文件大小和保持存储空间整洁。


步骤 1:配置 Docker 日志驱动

在 Docker 的配置文件中,通常是 /etc/docker/daemon.json,可以指定使用 json-file 日志驱动并设置日志的最大大小。编辑配置文件并添加以下内容:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "10"
  }
}
  • max-size:指定日志文件的最大大小,这里设置为 100MB。
  • max-file:指定保留的旧日志文件数,这里设置为 10。

保存配置文件并重新启动 Docker 服务以应用更改:

sudo systemctl daemon-reload && systemctl restart  docker

步骤 2:安装和配置 logrotate

现在,需要安装和配置 logrotate 工具,以定期轮转 Docker 日志文件。在大多数 Linux 发行版中,logrotate 工具已经安装。可以使用以下命令来编辑 logrotate 配置文件:

sudo nano /etc/logrotate.conf

在配置文件中,可以添加一个新的日志轮转配置,以定期清理 Docker 日志文件:

/var/lib/docker/containers/*/*.log {
    missingok
    weekly
    rotate 10
    size 100M
    compress
    delaycompress
    notifempty
    copytruncate
}
  • /var/lib/docker/containers/*/*.log:这是 Docker 日志文件的默认存储位置。确保路径与的系统中的实际路径匹配。
  • weekly:日志轮转周期,这里设置为每周。
  • rotate 10:保留的旧日志文件数,与 Docker 日志驱动配置的 max-file 一致。
  • size 100M:日志文件大小达到 100MB 时触发轮转。
  • compress:启用压缩旧日志。
  • delaycompress:在压缩之前保留一个未压缩的副本。
  • notifempty:仅在日志文件非空时轮转。
  • copytruncate:使用 copytruncate 选项避免中断正在写入的日志文件。

保存配置文件并测试 logrotate:

sudo logrotate -d /etc/logrotate.conf

这将模拟日志轮转并显示轮转操作的详细信息。如果一切正常,可以将其设置为定期自动运行:

sudo logrotate -f /etc/logrotate.conf

现在,Docker 日志将根据配置定期轮转,并在达到指定的最大大小时删除旧日志。

步骤 3:编辑 Cron 作业

打开 cron 配置文件以编辑 Cron 作业。通常,Cron 作业的配置文件位于 /etc/crontab 或 /etc/cron.d 目录中。
添加一个新的 Cron 作业,以定期运行 logrotate 。以下是一个示例 Cron 作业:

0 0 * * * root /usr/sbin/logrotate -f /etc/logrotate.conf

这个 Cron 作业的含义是在每天午夜(00:00)执行 logrotate。可以根据需要调整时间表。/usr/sbin/logrotate -f /etc/logrotate.conf 是运行 logrotate 的命令。

保存配置文件。

步骤 4:重启 Cron 服务

如果使用的是 systemd,可以使用以下命令重启 Cron 服务:

sudo systemctl restart cron

如果使用的是 SysV init 系统,可以使用以下命令:

sudo service cron restart

步骤 5:验证 Cron 作业

可以使用以下命令列出当前配置的 Cron 作业:

crontab -l

这将显示所有用户的 Cron 作业,包括新添加的 logrotate 作业。

现在,logrotate 将根据在 Cron 作业中设置的时间表定期运行,执行日志轮转操作,以确保日志文件的定期清理和管理。

与Docker 日志自动轮转和清理配置相似的内容:

Docker 日志自动轮转和清理配置

设置 Docker 日志大小和自动删除旧日志:通过配置 Docker 使用 json-file 日志驱动,同时使用 logrotate 工具,可以设置日志的最大大小(例如100MB),并在达到该大小时自动删除旧日志。这可帮助管理 Docker 日志文件大小和保持存储空间整洁。 步骤 1:配置 Doc

使用 Docker 自建一款怀旧游戏之 - 超级马里奥

1)超级马里奥 简介 《 超级马里奥 》(Super Mario)是任天堂公司创造的一款经典游戏系列,是世界上最知名、最成功的游戏之一。这个系列由日本设计师宫本茂于 1985 年创造,最初的游戏名为《超级马里奥兄弟》(Super Mario Bros.),推出后风靡全球。 2)在线部署 2.1)安装

[转帖]docker 日志方案

https://www.cnblogs.com/charlieroro/p/10294450.html docker logs默认会显示命令的标准输出(STDOUT)和标准错误(STDERR)。下面使用echo.sh和Dockerfile创建一个名为echo.v1的镜像,echo.sh会一直输出”h

[转帖]Docker容器日志查看与清理(亲测有效)

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日志一般存放在/var/lib/docker/container

docker查看日志:docker service logs 与 docker container logs

转载请注明出处: docker service logs 和 docker container logs 是两个不同的命令,用于查看 Docker 服务和容器的日志。以下是它们之间的区别: 1.docker service logs 1.1.特性 适用对象:docker service logs 用

connect() failed (113: No route to host) while connecting to upstream

转载请注明出处: 用docker 搭建的服务,今天重启了一个容器之后,请求这个服务的接口都变成了 502, 但通过docker 查看日志,发现没有异常,端口也都是正常,在nginx的日志中看到了这段错误信息 在nginx 的日志中看到:connect() failed (113: No route

使用docker搭建ELK分布式日志同步方案

ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案。ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源。elasticsearch作为日志储存库(数据库),kibana的作用通过elasticsearch的API接口调取其中数据作可视化分析,lo

在docker中查看对应k8s容器日志

最近遇到在不知道k8s环境只知道k8s部署的docker地址时,需要查看服务日志。 docker inspect 容器id | grep log 可查看对应的log地址 阅读如遇样式问题,请前往个人博客浏览: https://www.raokun.top 拥抱ChatGPT:https://ai.t

Docker Compose V2 安装常用数据库MySQL+Mongo

主要增加对容器创建 MySQL、Mongo 时对 数据文件,日志,配置,网络,时区,端口映射,密码 的配置,更贴合生产环境的实际使用

日志采集/分析

目录EFK1. 日志系统2. 部署ElasticSearch2.1 创建handless服务2.2 创建sts3. 部署kibana4. 部署ilogtail(docker-compose)4.1 编写docker-compose4.2 配置ilogtail采集4.3 查看容器采集的日志4.4 采集