问题描述
在使用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"
}
}
以上是两种常见的解决方案,你可以根据自己的需求选择适合你的方法。
正文完