Windowsイベントログがどれほど効率的かを知っている人はいますか?
毎分多くのイベントがログに記録される可能性があるシナリオがあります。
Windowsイベントログは、多数のイベントを処理するように最適化されていますか?
たとえば、パフォーマンスの点でSQLServerに匹敵しますか。
そして最後に、ログをデータベースに送ることは可能ですか?
Windowsイベントログは1秒あたりの多くのイベントを処理するのに十分堅牢であるため、1分あたりに話しているイベントの数(100000に対して100)と、データを正確に処理する必要があるかどうかは、イベントを使用するかどうかによって異なります。ログに記録するかどうか。イベントログのトラブルシューティングに使用する必要がある場合はそれで十分ですが、データを分析する必要がある場合は、常にデータベースに格納するか、イベントログから取り出して解析することになります。これにはいくつかのツールがありますが、データベースに直接アクセスできる場合は不要な手順です。
正確な仕様はわかりませんが、レコードの挿入を軽くするために、イベントログはローカルSQLサーバーを実行するよりも少ないリソースを消費するはずです。パフォーマンスの観点から、SQLサーバーはイベントログよりもはるかに優れていると思います。イベントログもメモリに保存されていると思います。
イベントログのサイズにも制限があることに注意してください。多数のログを保持する必要がある場合は、自動スクリプトを実行してこれをエクスポートし、情報が失われないようにイベントログの設定が正しいことを確認する必要があります。イベントログが最大サイズの場合、ログがクリアされるまでログは保持されません。
イベントログはデータベースまたはsyslogに記録できますが、正直なところ、お勧めしません。
オプションを比較検討することをお勧めしますが、大量のトランザクションについて話している場合は、データベースを検討してください。
数年前(Windows 2000 Serverが最新)、マイクロソフトのコンサルタントから、イベントログシステムは1秒あたり数イベントに適していると言われましたが、数百をログに記録するのは悪い考えです(ただし、おそらく対処できます)。ロギング量が多い場合は、Event Tracing for Windows(ETW)の方が適していました(ただし、開発者または管理者のいずれかに関する実用的な情報を取得するのは困難です)。
ただし、Vista/2008では、イベントシステムが完全に作り直されたため(より多くのログをサポートし、すべてのログ全体をカーネルメモリにマップするわけではありません)、グッドプラクティスが変更された可能性があります。
また、ETWのサポートは.NETとイベントロギングサブシステムで行われるようになったため、学習曲線は大幅に短縮されました。
外部ホスト(データベースなど)にログを記録する場合は、そのサーバーに接続しているエラーをログに記録する方法を検討してください(つまり、データベースをログに記録する唯一のルートにすることはできません)。
また、イベントの利用者を考慮する必要があります。誰かがステータスをチェックしたり問題を診断したりして必要な情報を抽出する効果的な方法がない場合、ロギング作業全体がその価値を失います。
イベントログをデータベースに移動させるのではなく、事後にインポートすることができます。データの効率的なクエリが必要な場合は、これが最適な方法かもしれません。
基準に基づいてイベントデータをクエリおよび取得する場合、SQLとはまったく比較できず、そのように設計されていません。
イベントデータを一元化されたサーバーに転送する利用可能なアプリケーションはたくさんあります。それらの1つはスネアです: http://www.intersectalliance.com/projects/SnareWindows/index.html
Windows 2008/7/Vistaには、イベントを一元化された「コレクター」に転送する統合機能がありますが、これは実際にはデータベースではありません。これを構成する方法の例を次に示します。
Windowsイベントコレクター
http://msdn.Microsoft.com/en-us/library/bb427443%28v=vs.85%29.aspx
Windowsイベントコレクターがソース開始サブスクリプションをセットアップします。
http://msdn.Microsoft.com/en-us/library/bb870973(v = vs.85).aspx