Linux logrotate:仅将新的压缩文件移动到S3
我有一个生成输出和错误日志的应用程序。我需要压缩它们并在服务器上保留5个日志。 此外,日志应该在压缩后立即复制到S3 bucket lastaction在我看来是编写脚本的正确地方,因为我希望压缩文件 我的配置文件如下所示:Linux logrotate:仅将新的压缩文件移动到S3,linux,shell,amazon-s3,aws-cli,logrotate,Linux,Shell,Amazon S3,Aws Cli,Logrotate,我有一个生成输出和错误日志的应用程序。我需要压缩它们并在服务器上保留5个日志。 此外,日志应该在压缩后立即复制到S3 bucket lastaction在我看来是编写脚本的正确地方,因为我希望压缩文件 我的配置文件如下所示: /var/log/nodejs/*out.log /var/log/nodejs/*err.log { size 10M missingok notifempty rotate 5 sharedscripts compress copytrun
/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
size 10M
missingok
notifempty
rotate 5
sharedscripts
compress
copytruncate
dateext
dateformat -%Y%m%d-%s
olddir /var/log/nodejs/rotated
lastaction
echo $@
INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
HOSTNAME=`hostname`
BUCKET="my-logs"
REGION="us-west-2"
read DAY MONTH YEAR <<< `date "+%d %m %Y"`
aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION
endscript
}
虽然我想得到新的位置:
/var/log/nodejs/rotated/app-out.log-20190131-1548925261.gz /var/log/nodejs/rotated/app-err.log-20190131-1548925261.gz
我找到了一个解决办法
我在aws s3 sync命令中添加了--exclude--include。
现在我的脚本看起来像:
/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
size 10M
missingok
notifempty
rotate 5
sharedscripts
compress
copytruncate
dateext
dateformat -%Y%m%d-%s
olddir /var/log/nodejs/rotated
lastaction
echo $@
INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
HOSTNAME=`hostname`
BUCKET="my-logs"
REGION="us-west-2"
read DAY MONTH YEAR <<< `date "+%d %m %Y"`
FORMAT=`date "+%Y%m%d"`
aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION --exclude "*" --include "*.log-$FORMAT*"
endscript
}
/var/log/nodejs/*out.log/var/log/nodejs/*err.log{
尺寸10米
米森戈克
notifempty
轮换5次
共享脚本
压紧
复制截断
dateext
日期格式-%Y%m%d-%s
olddir/var/log/nodejs/rotated
最后行动
回音$@
实例_ID=“`wget-q-O-http://instance-data/latest/meta-data/instance-id`"
HOSTNAME=`HOSTNAME`
BUCKET=“我的日志”
REGION=“美国西部-2”
read DAY MONTH YEAR将当前日期添加到web服务器配置中的日志文件名中。例如,在Apache下,这将出现在网站的
指令CustomLog“|/usr/bin/rotatelogs/var/log/nodejs/app out-%Y-%m-%d.log”
并将logrotate设置为每天旋转。但我希望它每小时旋转一次,因为日志文件应该非常大,然后将小时添加到文件名中并每小时旋转一次?我不能。我希望copytruncate
。
/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
size 10M
missingok
notifempty
rotate 5
sharedscripts
compress
copytruncate
dateext
dateformat -%Y%m%d-%s
olddir /var/log/nodejs/rotated
lastaction
echo $@
INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
HOSTNAME=`hostname`
BUCKET="my-logs"
REGION="us-west-2"
read DAY MONTH YEAR <<< `date "+%d %m %Y"`
FORMAT=`date "+%Y%m%d"`
aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION --exclude "*" --include "*.log-$FORMAT*"
endscript
}