Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

前提

  • 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 {} \;
s-katsumata
東京在住の二児の父。絶賛育児中。業界歴21年、フリーランス歴13年。在宅でシステム開発(受託、自社パッケージ)に従事。生涯コード書いていたいアラフィフプログラマ。悩みは老眼。ミッションはスクラッチ開発した「みなたび」を使って地域で頑張る人を応援
https://nyango.com/services/travel
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした