テキストファイルまたはデータベースにログインしますか?


25

いつログにデータベースを使用し、テキストファイルを使用する必要がありますか?
WebサーバーとWebフレームワーク(アプリが内部で使用するもの)は、通常(常に?)要求とエラーをデフォルトでテキストファイルに記録します。しかし、これらのサーバーやフレームワークを中心にアプリを開発する人々は、データベースにログインすることがあります(外部のアプリではなく、アプリのメインDBでも)。
また、デバッグログ監査ログには違いがあるかもしれません-私はこのサイトのどこかでこの分類を読みました。



これは、あまりにも役立つことstackoverflow.com/questions/3458813/...
ムハンマドラジャ


機密情報をログに記録するべきではありませんが、一部のシステムはそれを必要とする場合があり、これはデータベースへのログ記録に適したケースです。開発者は、機密情報を誤って記録することがあります。この事故を防ぐために、多くのアプリケーション開発者はデータベースにのみログを記録するため、ログメッセージの社会保障番号などは、13の異なるサーバー上のプレーンテキストのテキストファイルに保存されません。
グレッグブルクハルト

回答:


16

非常に一般的な用語では、テキストファイルへのログ記録はデータベースへのログ記録よりもはるかに高速です。これが、考慮する必要があるロギングの主な側面です。

DBにログを記録する理由は、結果を照会したいためです-特に、ログエントリをグループ化するために使用できるコンテキスト情報をログに記録する場合、DBで特定のログ情報を検索する方が簡単です。また、通常、セキュリティで保護されていてアクセスできないサーバー上のログファイルよりも中央のDBにアクセスする方が簡単です。

理想は、ローカルでファイルにログを記録し、その後、必要に応じて検査のためにこのデータをDBに移行することです。

現在、監査はまったく別の獣です。概念はロギングと似ていますが、監査は通常、長時間保持する必要があります(デバッグやトレースに使用されるログファイルは気まぐれに削除される可能性があります)。監査は重要な情報を示すためにあります。記録する監査情報は通常のログよりもはるかに少なく、頻度も少ないため、パフォーマンスは問題になりません。このため、この監査情報を中央DBに書き込む利点が見られます。


1
私が見た別の取り決めは、ログが最初にローカルに書き込まれ、その後何らかの種類のバックグラウンドジョブによってDBにプッシュされることです。
ロビーディー

@RobbieDee私はこのアイデアが好きです。私は一種の重複した質問があります:限られた期間のログファイル(たとえば過去30日間のみ)が一般的ですが、ログがデータベースにプッシュされると(たとえば毎週)、すべてのログがデータベースに保存されます=>ログファイルが機能しますバッファのみのように、すべての読み取り操作はデータベースで実行されますか?DBへの書き込みが遅れるので、パフォーマンスの心配はありません。
アル・アン

9

すべてのアプローチに適合するサイズはありません。復元力のために、複数のアプローチを使用することがあります。たとえば、デバッグログをファイルに隠し、監査ログをDBに保存することができます。

アプリケーションのパンくずリスト

長所:実装が簡単で、すぐにユーザーに見える

短所:情報はアプリケーションが起動している間のみ持続します

テキストファイル

長所:実装が簡単

短所:ファイルのロックが発生しないようにする必要があります。ログドライブのディスク領域が不足した場合の対処方法

イベントログ

長所:実装が簡単

短所:正しく設定されていない場合、または保持ポリシー/クリアダウンにより古いログが失われる可能性がある場合、イベントログがいっぱいになる可能性があります。

データベース

長所:実装が簡単

短所:より多くのDBトラフィック。DBの損失または他のDBの問題を記録する方法は?

メッセージング(MQ)

長所:発射して忘れる

短所:別のレイヤーがうまくいかない。セットアップが必要


syslogデーモンとSNMPログの宛先を含めることもできます。
-gbjbaanb

@gbjbaanb確かに-一部のOSにはこのような機能が組み込まれています-これは完全なリストではありません。高可用性システムは、ダウンしたときにSMSを送信する場合もあります。
ロビーディー

2

監査ログは、データベースの内容を完全に正当化することを目的として、監査目的で長時間にわたって操作の完全なトレーサビリティを確保する必要があります。

いくつかの場合(金融アプリケーションなど)、これらのログは、保持(一部の国では10年間)や変更不可などの法的要件への準拠を保証する必要があります。これらのログはアプリケーションレベルでdbの内容を正当化する必要があるため、dbに保存するのが一般的な方法です。dbでアクセスを制御し、不正な変更を回避できます。

監視ログやセキュリティログなどの他のログは、パフォーマンスとボリュームの制約に対処する必要が頻繁にあります。これらは一般にファイルに書き込まれます。これは、書き込みが高速(トランザクション管理のオーバーヘッドなし)でオフラインでのアーカイブが容易であり、外部監視SIEMツールとの統合が容易だからです。

これらの種類のログは監査ログの信頼性を示すために使用できますが(たとえば、不正アクセスがない)、一般的に保持期間が短くなります(たとえば、通信ログの法執行目的で6か月から2年)制約がある場合。


1

デバッグロギングにdbを使用する多くの理由の1つは、イベントビューアーまたはテキストファイルを表示するためにアプリケーションまたはWebサーバーにアクセスできない場合です。

監査ログは異なり、Webアプリケーションのコンテキストでデバッグログがあります。一部のアプリケーションでは、簡単に取得できるようにデータベースにアクセスする必要があるため、エンドユーザーに表示する必要がある場合があります。

DBツールを使用して、フィルタリングと簡単な表示を行うこともできます。


サーバーログファイルへの書き込みは、同時実行性の高いシステムの唯一のオプションではありません。多くの場合、これらのログはクライアントデバイスに書き込まれ、問題が発生した場合にサポートのためにプッシュされます。また、同時実行性が高いため、これは単一のデータベースへの書き込みに適さない場合があります。
ロビーディー

@RobbieDee WebサーバーとWebアプリケーションも同様ですか?それがOPが私が信じていることを求めているように
ムハンマド・ラジャ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.