書サーバのログファイルをデータベースも考えたんですか?
-
08-07-2019 - |
質問
読み の対象からのオ, と思っていいスタックオーバーフローを考察するものとする。
解決
ローカルにディスクに書き込み、その後定期的にデータベースにバッチ挿入します(ログのロールオーバー時など)。別の優先度の低いプロセスでそれを行います。より効率的で堅牢な...
(データベースログテーブルに、「ログイベントの発生元のマシン」の列が含まれていることを確認してください-非常に便利です)
他のヒント
いいえ、サーバーエラーのかなりの割合がデータベースとの通信に関係していることを考えると、いいえと思います。データベースが別のマシン上にある場合、ネットワーク接続は、記録できないエラーの別の原因になります。
サーバーエラーをデータベースに記録する場合、データベースにアクセスできない場合に備えて、ローカルに(イベントログまたはファイルなどに)書き込むバックアップロガーを用意することが重要です。
可能な場合はDBにログを記録しますが、DBが遅くなることはありません:)
これは、ログファイルよりもDBで何かを見つける方が高速です。特に、必要なものを先に考える場合。 dbにログインすると、次のようにログテーブルを照会できます。
select * from logs
where log_name = 'wcf' and log_level = 'error'
エラーが見つかったら、このエラーにつながるパス全体を見ることができます
select * from logs
where contextId = 'what you get from previous select' order by timestamp
この情報をテキストファイルに記録する場合、どのように取得しますか?
編集: JonSkeetが示唆したように、dbへのロギングを非同期にすることを検討すべきだと述べた場合、この回答の方が良いでしょう。だから私はそれを述べる:)私はそれを必要としなかった。たとえば、その方法については、「Ultra Fast ASP.NET」をチェックできます。リチャード・キーシグによる。
場合は、データベースの生産データベースは、この恐ろしいアイデアです。す ま ての課題のバックアップ、複製、回復しました。様以上での貯蔵のためのDBは、レプリカがある場合には、バックアップしております。時間をセットアップし、再複製、時間の確認バックアップ時間の回復DBからのバックアップしております。
データベースにログを記録することはおそらく悪い考えではありませんが、多くのログファイルエントリがある場合は記事のアドバイスに従わないことをお勧めします。主な問題は、データベースはもちろん、忙しいサイトからのログにファイルシステムが追いつくのに問題があることです。本当にこれを行いたい場合は、ログファイルが最初にディスクに書き込まれた後、データベースにログファイルを読み込むことを検討します。
読み取りと書き込みにRAMを使用する適切にセットアップされたデータベースについて考えてみませんか?これは、ディスクへの書き込みよりもはるかに高速であり、利用可能なすべてのIOを使用している現在実行中のスレッドで待機するようOSが指示するためにスレッドがロックダウンするときに発生する多数のクライアントにサービスを提供するときに表示されるディスクIOボトルネックは発生しませんハンドル。
このデータを証明するベンチマークはありませんが、私の最新のアプリケーションはデータベースロギングを使用しています。これらの応答のいずれかで述べたように、これにはフェイルセーフがあります。データベース接続を作成できない場合は、ローカルデータベースを作成し(おそらくh2?)、それに書き込みます。その後、接続を再確立し、ローカルデータベースをダンプして、リモートデータベースにプッシュするデータベース接続の定期的なチェックを行うことができます。
これは、H-Aサイトがない場合、営業時間外に行うことができます。
将来的には、ベンチマークを開発して自分の主張を実証したいと考えています。
幸運!