LoginSignup
1
0

More than 5 years have passed since last update.

Linuxサーバ上の日次ログファイルを圧縮してS3の年月ディレクトリにアップロードする

Last updated at Posted at 2018-10-23

前提

  • aws cliがインストールされていること
  • バックアップ先S3に書き込み権限を持つIAMユーザのプロファイルが実行端末に設定されていること($ aws configure --profile プロファイル名)
  • ログファイルはローテーションされていてファイル名にタイムスタンプが付与されていること。(本スクリプトはファイル名にタイムスタンプを付与しません)

環境

  • Amazon Linux AMI release 2018.03
  • aws-cli/1.15.83
  • Python/2.7.14
  • Linux/4.14.42-52.37.amzn1.x86_64
  • botocore/1.10.82

実行結果

スクリプト内定義で指定したファイルが圧縮されてバックアップ先S3のバックアップ先ルートの年/月フォルダの下に格納されます。
(例. mybucket/backup/logs/2018/10/application.2018-10-10.zip)

元のファイルは所定日数(KEEP_DAYSで指定)を経過すると削除します。

※月をまたぐ時に前月分が当月にまざります。

bashスクリプト

#!/bin/bash
set -Ceu

export AWS_PROFILE=<プロファイル名>

AWS_CLI=/usr/bin/aws   # $ which aws  の実行結果を設定

TARGET_DIR=<バックアップ対象ログファイルが格納されているディレクトリのフルパス>
TARGET_FILE='application.20*.log'  # ファイル名(正規表現)

# 元ファイル(および圧縮ファイル)の保持期間
KEEP_DAYS=2

# バックアップ先(年月はスクリプトで付与するので含めない)
S3_BACKUP_ROOT_DIR=<バケット名>/path/to

# 圧縮
find $TARGET_DIR -name $TARGET_FILE -type f -exec zip -r {}.zip {} \;

# S3ディレクトリと同期する。圧縮前のファイル(拡張子log)は同期しない
DIR_YEAR=`date '+%Y'`
DIR_MONTH=`date '+%m'`
$AWS_CLI s3 sync ${TARGET_DIR} s3://$S3_BACKUP_ROOT_DIR/$DIR_YEAR/$DIR_MONTH/ --acl private --exclude '*.log'

# 古いファイルの削除
find ${TARGET_DIR} -mtime +$KEEP_DAYS -exec rm -f {} \;
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0