Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@s-katsumata

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

前提

  • 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 {} \;
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?