logrotate: перемещать только новые сжатые файлы в S3 - PullRequest
0 голосов
/ 31 января 2019

У меня есть приложение, генерирующее выходные данные и журналы ошибок.Мне нужно сжать их и сохранить 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 вместо sync ?

Например: я печатаю аргументы в конце и получаю:

/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

1 Ответ

0 голосов
/ 31 января 2019

Я нашел решение ...

Я добавил - исключить --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
}
...