AWS LightSailのApacheログをS3に転送する
こんにちは。ゆーろんです。 今回はAWS LightSailのWordPreess構成におけるApacheのログをS3に転送する方法を1つを紹介します。
目次 LightSailのログをS3に転送する方法 今回の目的 設定手順 Apacheのアクセスログを日付ベースで作成させる AWSにてS3転送用のIAMユーザを作成する aws cliにS3転送用IAMユーザ情報を登録する 任意のフォルダにShellScriptを作成する CrontabにShellScriptを登録する LightSailのログをS3に転送する方法 LightSailのログをS3に転送する方法はいくつかあります。 私の知る限りの具体例を2つ出してみます。
CloudWatch Agentを利用してCloudWatch logsにログ転送後Lambda+EventBridgeを用いてS3に転送 aws cliを利用したS3転送用のShellScriptを用意してCronやSystem-timerで回す 1の手法の特徴はログの様子をCloudWatchで観測できる点です。 ただ今回の場合、インスタンスはLightSailですから、AWSリソースも多く使用する必要があること、目的がS3に送ることなのに関して構成が回りくどいことから不採用にします。
2の手法はログをaws cli経由でS3に転送するといった単純なものです。 設定もS3転送用のIAMユーザの作成、aws cliのインストールやShellScriptの用意と定期実行系への登録で済みます。以上のことからこの手法を今回は採用します。
今回の目的 Apacheのaccess_logを日付毎に取得/生成し、それをS3に転送することを目的とします。
設定手順 Apacheのアクセスログを日付ベースで作成させる デフォルトではApacheのログはaccess_logに書き続けられます。 そのため日毎のaccess_log.日付などを生成しそこにログを書いてもらう必要があります。
LightSailのWordPress構成の場合Bitnami環境で構築されています。 設定ファイルは/opt/bitnami/apache/conf/httpd.confとなります。 このファイルをviやvimで開いてもらってCustomLog “logs/access_log” commmonの記述部分を以下のように変更します。
CustomLog "|/opt/bitnami/apache/bin/rotatelogs /opt/bitnami/apache/logs/access_log-%Y%m%d 864000 540" combined 上記記述はApacheの機能でログをローテーションさせています。 具体的には「access_log-20220314のようにログファイルを1日(864000秒)に1回、UTC+9時間(540分)のオフセットでcombined(commonにリファラやagent情報を含める)モードで作成/ログを保存する」という記述になります。
設定を保存後、以下コマンドでapacheを再起動します。
sudo /opt/bitnami/ctlscript.sh restart apache AWSにてS3転送用のIAMユーザを作成する AWS Console等でS3転送用のIAMユーザを作成します。 与える権限はS3に書き込みができるような権限(S3FullAccessなど)を与えます。
またIAMユーザ生成の際に作成したアクセスキー、シークレットキーはメモしておきます。
aws cliにS3転送用IAMユーザ情報を登録する Lightsailのbitnami環境ではaws cliはすでにインストールされています。 以下コマンドを入力してaws cliにS3転送用IAMユーザ情報を登録します。
aws configure その後、コンソールに表示される情報に従って、アクセスキー、シークレットキー、AWSのリージョン情報(例: ap-northeast-1)、デフォルトの保存形式(.txt, .logなど)を登録します。
任意のフォルダにShellScriptを作成する 任意のフォルダにtouchコマンド等でShellScriptを作成します。今の回例では“send_accesslog_s3.sh“と作成しました。 以下に記述例を示します。