gpt4 book ai didi

linux - logrotate:仅将新的压缩文件移动到 S3

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:35 24 4
gpt4 key购买 nike

我有一个生成输出和错误日志的应用程序。我需要压缩它们并在服务器上保留 5 个日志。此外,日志应在压缩后立即复制到 S3 存储桶。

在我看来,lastaction 是我应该编写脚本的正确位置,因为我希望压缩文件。

我的配置文件是这样的:

/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
}

aws s3 sync 的问题是,如果有昨天的旧日志(在旋转文件夹中保存的 5 个日志中),它会再次将它们上传到新文件夹今天的。

有没有办法让 lastaction(或 logroate 提供的其他脚本)只获取现在旋转的文件,但在它们的新位置,所以我可以使用 aws s3 copy 而不是 < em>同步?

例如:我在最后一个 Action 中打印了 args,并得到:

/var/log/nodejs/app-out.log /var/log/nodejs/app-err.log

虽然我想获得新位置:

/var/log/nodejs/rotated/app-out.log-20190131-1548925261.gz /var/log/nodejs/rotated/app-err.log-20190131-1548925261.gz

最佳答案

我找到了解决方案...

我将 --exclude --include 添加到 aws s3 sync 命令。现在我的脚本看起来像:

/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
}

关于linux - logrotate:仅将新的压缩文件移动到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com