
実現したいこと
- ユーザーの全ての操作ログを記録したい
前提
Laravelを使って社内で使用するアプリを作成しています。要件としてはユーザーである社員がどういった操作を行ったのかイベント単位で全てのログを記録したいです。
ただログに関しての知識があまりにもないため、どのように実装するのが良いのか判断がつかないでいます。考えていることのいずれもやりたい事自体の実現は出来るとは思っているのですがLaravelでの開発が初めてかつ、経験のある言語でもログの出力方法を検討した事がないため助言頂けないでしょうか。
考えていること
-
愚直にLogファサードで記述する。
-
以下参考にミドルウェアを作成する。
https://e-seventh.com/laravel-middleware-tracelog/
- 以下ライブラリでAOPを実現する。
https://github.com/ytake/Laravel-Aspect
補足情報(FW/ツールのバージョンなど)
Laravel9.x

今時のログの記録は外部サーバーに任せます。例えばElasticsearchのクラスタを立てて、アプリはログを送信するだけにします。こうしないとサーバーが複数あったらそれぞれのサーバーからログを集めてこないといけません。それをマージして検索するくらいなら最初からESに送った方が良いです。
ミドルウェアは綺麗な設計になりますので良いです。ここでローカルのファイルに書き込む代わりにESに送信するようにしましょう。ESが死んでいる場合にはローカルに書き込んで、ESが復活したらESに送信すればなお良いです(ディスク・スピルと言います)。filebeatとかfluentdとかで調べてみてください。ログはJSON形式にした方が後々の拡張が楽です。
KubernetesではログはSTDOUTに書き出すのが最近の流れですね。アプリ12の設計指針のうちの11番目で「アプリケーションは、イベントストリームとしてログを生成し、実行環境に集計を委ねるべき」とあります。 https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology
詳細なご回答ありがとうございます。
知らない事だらけで面食らってますが頂いたリンク先の情報に私が知りたいと思っているようなことが、かなり詰まっているような気がしました。英語があまり読めないので翻訳ツールや邦訳されたものを参考に理解を深めていきたいと思います。
filebeat、fluentdについても調べておきます。
以下個人的メモとなりますのでお気になさらないでください。
- アプリ12の設計指針
https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology
- Best Practices in Implementing a Secure
Microservices Architectureの日本語訳
https://www.cloudsecurityalliance.jp/site/wp-content/uploads/2020/11/best-practices-in-implementing-a-secure-microservices-architecture-J.pdf
- Beyond the Twelve-Factor Appの所感
https://kakakakakku.hatenablog.com/entry/2020/03/09/084833

現実的にはログはローカルファイルに書き込むのが一番安全で簡単ですからまずはそれで実装して先に進むのが良いでしょう。ログをESで管理するのは一種の分散型ですが後から簡単に追加できます。
Beyond the Twelve-Factor Appいいですね。実務で実感していることが言語化されていると思いました。一般論ですがアーキテクチャのトレンドは一方向で発展しているわけでもなくて結構揺り戻しも起きますし、性能、コスト、開発のしやすさ、製品の成熟度などでトレードオフは変わりますから絶対的な正解はないと思っています。
例えばつい最近5月初旬に米国Amazonプライムビデオが分散型サーバーレスマイクロサービスからEC2でモノリスに戻るという発表がありました。皆が薄々感じていたマイクロサービス疲れに応える内容で大きな話題になりましたがAmazonが言うなら真実に違いないと思って古典的モノリスに戻る必要もないですし、どこか中間に落ち着いてまたそこから発展して行くでしょう。
https://www.f5.com/ja_jp/company/blog/monolithic-vs-microservices-architecture-microservices-are-out-monoliths-are-back
https://www.publickey1.jp/blog/23/amazondhhamazonvogels.html
> 現実的にはログはローカルファイルに書き込むのが一番安全で簡単ですからまずはそれで実装して先に進むのが良いでしょう。ログをESで管理するのは一種の分散型ですが後から簡単に追加できます。
後から追加もしやすいんですね。
まずはイメージが湧いているこちらの方法を試していきたいと思います。
ありがとうございます。
どこかで技術は何度もいったりきたりしているように見えて螺旋階段を登っているといったお話を聞いたことがありますが、おっしゃられていることがまさにそうだなと感じました。
半分も理解できてないと思いますがそれでもとても勉強になりました。

回答1件
あなたの回答
tips
プレビュー