使用Docker中的nginx和Redis将日志挂载到主机上进行日志轮转
AWS Workspace提供了一种虚拟桌面环境,
Amazon Linux2是其中的操作系统版本,
nginx 1.16.1是使用的Web服务器软件版本,
Redis 5.0.7是使用的数据库软件版本,
blacklabelops/logrotate是用于日志轮转的工具。
mkdir -p log/nginx
mkdir -p log/redis
chmod 777 log/redis
docker run -d \
--name nginx \
-p 81:80 \
-v $(pwd)/log/nginx:/var/log/nginx \
nginx:1.16.1
docker run -d \
--name redis \
-p 6379:6379 \
-v $(pwd)/log/redis:/var/log/redis \
redis:5.0.7 bash -c "mkdir -p /var/log/redis && touch /var/log/redis/redis.log && redis-server --logfile /var/log/redis/redis.log"
docker run -d \
--name logrotate \
-v $(pwd)/log/nginx:/var/log/nginx \
-v $(pwd)/log/redis:/var/log/redis \
-e "LOGS_DIRECTORIES=/var/log/nginx/*.log /var/log/redis/*.log" \
-e "LOGROTATE_COMPRESSION=compress" \
-e "LOGROTATE_INTERVAL=hourly" \
-e "LOGROTATE_CRONSCHEDULE=*/1 * * * * *" \
-e "LOGROTATE_SIZE=10K" \
-e "LOGROTATE_COPIES=3" \
-e "LOGROTATE_DATEFORMAT=%Y%m%d%H%M%S" \
blacklabelops/logrotate
检查日志轮换功能
nginx重复访问浏览器
Redis重复执行docker restart redis
ls log/nginx
access.log
access.log20191212171100
access.log20191212170255.gz
error.log
error.log20191212171056
error.log20191212170254.gz
ls log/redis
redis.log
redis.log20191212171228
redis.log20191212170728.gz
在logrotate的Docker容器内创建的文件。
我正在使用copytruncate。它不是通过重命名文件来处理,而是通过复制文件并清空原文件的”内容”来实现的。由于复制和删除过程中存在一些时间差,如果频繁进行写入操作,有可能会导致数据丢失的风险。
# deactivate mail
nomail
# move the log files to another directory?
/var/log/nginx/access.log {
su root root
rotate 3
missingok
compress
delaycompress
copytruncate
hourly
size 10K
dateext
dateformat %Y%m%d%H%M%S
}
/var/log/nginx/error.log {
su root root
rotate 3
missingok
compress
delaycompress
copytruncate
hourly
size 10K
dateext
dateformat %Y%m%d%H%M%S
}
/var/log/redis/redis.log {
su root root
rotate 3
missingok
compress
delaycompress
copytruncate
hourly
size 10K
dateext
dateformat %Y%m%d%H%M%S
}