CloudWatch LogsのS3エクスポート

2017.05.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

個人的に好きなAWSのサービスのひとつがCloudWatch Logsです。 各サーバに保存されるログを保存するだけでなく、簡易検索や保存期間の指定ができるため、ロギングに関する最低限の要件を満たすことができます。 利用方法もEC2インスタンスであればエージェントをインストールするだけという手軽さもポイントですね。 Lambdaを組み合わせれば簡単なログ監視もできます。

本日はCloudWatch Logsで保存されたログを他のソフトウェアなどで利用する時に便利なS3エクスポート機能を紹介します。

S3へのエクスポート機能

S3へのエクスポート機能は文字通り、ログをS3に転送して保存します。 この時、エクスポートするログの時刻(範囲)を指定します。 簡易検索でログを絞り込んでのエクスポートはサポートされていないのでご注意ください。

S3バケットの準備

はじめにエクスポートする対象のS3バケットを準備します。 この時、S3バケットのリージョンとCloudWatch Logsのリージョンが一致していなければなりません。 また、次のようにバケットポリシーを追加してください(東京リージョンの場合)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::[YOUR-BUCKET-NAME]"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[YOUR-BUCKET-NAME]/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

ログのエクスポート

CloudWatch Logsのログは、原則としてロググループ単位にエクスポートします。 出力するロググループを選択し、アクションから「S3へのエクスポート」を選択してください。

CloudWatchLogs

出力するログストリームを制限したい場合は、詳細(アドバンス)設定で指定します。

export

エクスポートを開始し、しばらくすればS3バケットにgz形式でログが圧縮され、オブジェクトが作成されます。

まとめ

CloudWatch Logsは単体で、ログの保管・ログの検索を行える手軽なサービスです。 Lambdaなどとストリーム連携することによりリアルタイム分析や監視 を行うことができます。 リアルタイム性が不要な場合はエクスポート機能 が適しています。 エクスポートをLambdaなどで定期的に実行し、S3のイベントでログを分析する処理が走るなど応用してみてください。 2017年5月1日時点では東京リージョンで利用できませんが、Atheanaとの連携も面白いでしょう。