ウェブアプリケーションの開発と運用において、ユーザーの行動を把握し、パフォーマンスを最適化するためにはどうしても避けては通れないのが「アクセスログ」です。アクセスログは実際にユーザーがどのような操作を行ったのか、どのページでどれだけの時間を過ごしたのか、どの機能がよく使われているのかなど、運用に必要不可欠な情報を提供してくれます。
今回の記事では、Laravelフレームワークを使用したアクセスログの取得方法について詳しく解説していきます。Laravelのミドルウェアと新たに導入されたコンテクストを活用して、効率的にアクセスログを収集する手法をご紹介します。また、ログの保存先についても触れています。
これらの情報を元に、自身のウェブアプリケーションの運用をより効果的に行っていただければ幸いです。
前提条件
実装
ゲストユーザにIDを付与するミドルウェアを作成
ユーザがログインしていない状態(ゲストユーザ)でも、一定期間のアクセスログを紐付けるために、ゲストユーザに一意のIDを付与します。このIDはセッションの終了時に破棄され、新たなセッション開始時に新しいIDが付与されます。このIDは、Cookieにも保存することでフロントエンドでの使用も可能にしています。
-
ミドルウェアを作成する
-
ミドルウェアを実装する
リクエスト情報を付与するミドルウェアを作成
次に、アクセスログに必要な情報を付与するミドルウェアを作成します。ここではリクエスト情報(URLやメソッド、ユーザーエージェントなど)を付与します。
また、パフォーマンスの観点から、リクエストの開始時間と終了時間、処理にかかった時間、メモリ使用量なども記録します。これらの情報はパフォーマンスチューニングに役立つデータとなります。
-
ログから除外する項目を
config/logging.php
に設定する
-
ミドルウェアを作成する
-
ミドルウェアを実装する
アクセスログを保存するテーブルとモデルを作成
💡
ログの保存先として、NoSQLや専用のサービスへ保存するのがベストですが、今回はRDSへ保存するようにしています。
アクセスログを保存するためのテーブルとそのテーブルを操作するモデルを作成します。テーブルは月ごとにパーティションを分けることで、大量のログが溜まったとしても検索性能を維持できます。
-
モデルとマイグレーションファイルの作成
-
マイグレーションファイルの実装
-
モデルの実装
アクセスログを保存するミドルウェアを実装
最後に、前述のミドルウェアで付与した情報をもとに、アクセスログを保存するミドルウェアを実装します。リクエストの処理が終了した後、ログ情報をデータベースに保存します。
-
ミドルウェアの作成
-
ミドルウェアの実装
ミドルウェアを登録
💡
apiルートではセッションが無効になっているのでAssignIdToGuestUserは登録しないこと
作成したミドルウェアは、Laravelのアプリケーションに登録することで有効になります。ここではwebとapiの両方のルートにミドルウェアを登録していますが、必要に応じて適切なルートに登録してください。
さいごに
この記事では、Laravelのミドルウェアとコンテクストを活用してアクセスログを取得する方法を解説しました。アクセスログはウェブアプリケーションの運用にあたって重要な情報を提供します。特に、ユーザーの行動を把握するためや、パフォーマンスチューニングのための情報源として利用することが可能です。
ただし、アクセスログの取得にはプライバシー保護の観点から注意が必要です。ユーザーの個人情報を適切に保護し、法令遵守に努めるようにしましょう。
今回の実装例は一例であり、アプリケーションの要件に応じて適宜カスタマイズして使用することが可能です。また、今回はRDBへの保存を例示しましたが、大量のログを扱う場合はNoSQLやログ専用のサービスへの保存も検討してみてください。