Docker容器中的日志/数据轮转

160次阅读
没有评论

问题描述

在使用Docker容器时,有一个问题是关于如何管理存储在Docker卷中的日志/数据的最佳实践。他担心容器运行了相当长的时间(大约1年),担心主机虚拟机的资源,特别是存储资源。他希望能够轮转存储的数据,以防止主机虚拟机的存储空间耗尽并导致容器崩溃。他还想知道是否有可能从应用程序的角度(InfluxDB和Grafana)对旧数据进行归档。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你可以手动复制实际日志文件/var/lib/docker/containers/<container id>/<container id>-json.log并将其归档,然后手动清除日志(因为你只有2个服务,influxdb和grafana)。这样做不会停止容器。
以下是一个关于清除容器日志的StackOverflow问题的完整和清晰的答案。它还解释了如何配置Docker守护程序来轮转日志。

以下是一个可以运行的一行命令:

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

你也可以将其设置为你的daemon.json文件的一部分,而不是修改启动脚本:

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

请注意,你应该在配置Docker守护程序之前使用这种方法。

方案2

你可以更新daemon.json配置文件,指定正常的syslog驱动程序(假设是Linux),使用正常的syslog日志轮转方法来保留日志文件或将其发送到其他位置。

以下是一个示例配置:

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "udp://localhost:514"
  }
}

以上是两种常见的解决方案,你可以根据自己的需求选择适合你的方法。

正文完