質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

5回答

13583閲覧

Webサービスのログはファイルに保存するべきでしょうか?DBに保存するべきでしょうか?

jimyo

総合スコア243

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

2グッド

2クリップ

投稿2016/05/18 09:03

現在、個人でWebサービスを開発しています。
ユーザーの行動(ログインやアクティビティ)をログに出力したいと考えています。
そこで質問です。
このようなログはファイルに保存するべきなのでしょうか?それともDBに保存するべきなのでしょうか?
個人なので定番といいますか、ベストプラクティスがわかりません。

現状はJavaのLogger.getLoggerを使ってロガーを取得し、ファイルにログをためていますがどうなのでしょうか?

stereo_code👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

用途によります。

保存するアクティビティを頻繁に、もしくはリアルタイムに利用するのであれば発生した時点でDBに保存するのがいいでしょうし、そうで無いのであればファイルに追記しておいて必要な時に整理した方がコストの節約になります。
用途によってはキーバリューデータベースに投げ込んでおくのも悪く無い気がします。

もっとクリティカルな用途、例えば業務システムでの監査に使う様な用途であれば、改竄検知が出来る・冗長性が確保されているような方法で保存する必要があります。

ということで、想定している使い方を出来るだけ詳細にして、それに許されるコストも明確にしてみるとそれに合わせた設計が出来るかと思いますよ。

投稿2016/05/18 09:26

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私の意見としては、ログをDBに保存するのはあまりおすすめはしません。
というのも、何らかの行動がある度にUPDATE, INSERTのSQLを発行していると、大量のSQLが発生しDBトラブルを誘発しかねないからです。
(昔、中規模のWebサービスの開発に携わっていた時に、それが原因でDBのレプリケーションが追いつかず、障害を起こした事があります)

ただ、アクションや目的が明確な場合はDBに保存する場合もあります。
例:会員テーブルに「最終ログイン日時」のカラムを設け、実際に会員がログインをした時に「最終ログイン日時」を更新する。
この「最終ログイン日時」は、管理画面の会員詳細で確認できるようにするために、DBに保存している。

勿論、使用用途やログの発生頻度にもよりますので、よく吟味されることをおすすめします。

投稿2016/05/18 09:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

使用用途によるのでは?
例えば、一ヶ月に一回ログを取り出し、整理する必要があれば、ログファイルにして一ヶ月ごとにローテーションさせたほうがイイでしょうし、全体を検索することが多いようであれば、DBに突っ込んでおいたほうが良いと思うので。
ログの使い方を記載すると、もっと良いアドバイスが来ると思います。

投稿2016/05/18 09:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ログの種類、要求要件によります。

管理画面から参照するようなログの場合は、DB上で保管したほうが良いでしょう。
そうでないなら、ファイルでいいと思います。

後で何か検索などをする可能性があるのなら、とりあえずDBのほうがいいかもしれません。
確かに、ログは多量のレコードが挿入されますのでパフォーマンスやデータ容量の影響が出てきてしまいますが、適切に設定、設計(古いログは定期的に削除したりアーガイブ化する。ログテーブルはむやみにインデックスを張らないなど)すれば大丈夫かと思います。

投稿2016/05/24 05:06

CodeLab

総合スコア1939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ユーザーの行動(ログインやアクティビティ)をログに出力したいと考えています。

そのログをどう使うか想像してみてください。
例えばAWSヘビーユーザーである東急ハンズでは、レジの売上げデータをKinesisやLambda、SQSに突っ込んで動的に解析しているようです。

そこまででは無いにしろ、今日のログインユーザーを瞬時にだすとか、
データマイニングのようなことをするのであればSQLiteやキーバリュー型のデータベースを採用する価値はありそうですね。

レコード数が多くなると目に見えてInsert時のパフォーマンスは落ちますし、
昨今のWebサーバーのストレージは低容量で高速なSSDが主流ですので、何も考えず書き出し続けるとサーバーの容量がいっぱいになるリスクもあります。
手作業の運用はエンジニアの時間を奪う癌ですので、Cronを仕込んで古いファイルを消去する等、何かしらの対策をとる必要があります。

投稿2016/05/20 02:08

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問