4

現在、Windows イベント ログ ビューアを構築しており、かなりの数の Window Server 2003 ボックスがあります。EventLogReader クラスを使用してクエリを実行していますが、Vista 以降が必要なため、Windows Server 2003 では実行できません。EventLog クラスは使用できますが、非常に低速です。他に選択肢はありますか?

更新: すべてのイベント ログをクエリしているわけではありません。代わりに、日付範囲のイベント ログをクエリしています。イベント ログが特定の範囲に収まる必要があるだけで、高速化する方法はありますか? 現在、EventLog クラスを使用すると、ローカル ボックスでも非常に遅く、リモート ボックスでは耐えられません。

4

4 に答える 4

2

EventLog クラスは遅いです。アクセス速度は、イベント ログのサイズによって異なります。ほとんどのサーバー シナリオでは、アーカイブする前に非常に大きくなることが許可されています。ネイティブの Windows イベント ビューアは、リモート ログの表示もサポートしており、リモート ログの表示がいかに遅いかを示すことができます。

EventLog の Entries プロパティは日付順に並んでいる可能性が高いと思います。つまり、エントリのバイナリ検索 (Linq はデフォルトでは実行しません) を実装して、処理を大幅に高速化できます。バイナリ検索拡張機能の例を次に示します。コレクションが順序付けされている場合、LINQ はバイナリ検索を使用できますか?

于 2013-01-11T02:05:47.373 に答える
2

logparserで遊んだところです。以前に提案した Log Parser Studio は、これらの一連のタスクの UI です。

以下は logparser クエリです。

logparser.exe -i:EVT “SELECT TimeGenerated,EventID,EventType,EventTypeName,EventCategory,EventCategoryName,SourceName,
Strings,ComputerName,SID,Message FROM \\servername\Application WHERE TimeGenerated > ’2012-07-12 00:00:00′ AND EventType IN (1;2) ORDER BY TimeGenerated DESC” -o:CSV -q:ON -stats:OFF >> c:\temp\Events.csv

「\servername\Application」をサーバーの詳細に置き換えます。

-i:EVT は、イベント ログを照会するように指示します。

これは、私が使用する簡単なLogParser リファレンスです。

于 2013-01-11T01:27:53.153 に答える
1

これは、どちらのアプローチが C# で Windows イベント ログを読み取るのに適しているかの重複です。WMI または EventLog

上記のリンクで提供される情報に加えて、ログ ファイル イベントがロールオーバーされる前に、情報の量を制限することを検討してください。

于 2013-01-07T00:37:16.757 に答える
1

logparser 用に私が書いたツールをチェックアウトできます。SQL に似た作成画面があり、使用できるクエリの例が表示されます。

アプリケーションに LogParser を含める場合は、デプロイ方法に注意してください: logparser binaries distribution、個別に含めたことがわかります。

#1 EventLogReader が Win Server 2003 でサポートされていないため、EventLog クラスにこだわる理由

Visual Log Parserからコードを借りることをお勧めします。

#2 一度に複数のサーバーに対してクエリを実行する必要がある

LogParser は、複数のサーバーと複数のログのクエリに最適です。すべてのログをまとめて表示し、時間ごとに並べ替えたり、発生ごとにグループ化したりすることは非常に便利です。

#3すべてのイベントログをクエリしているわけではなく、日付範囲のイベントログをクエリしています。イベントログが特定の範囲に収まるだけでよい場合、高速化する方法はありますか?

はい、LogParser はフル オン フライで、疾走する列車よりも高速です! DateRange で Evt ログをクエリする方法は次のとおりです。

SELECT Extract_FileName(EventLog) AS EventLog, RecordNumber, TimeGenerated, EventID, EventType, EventTypeName, EventCategoryName, SourceName, ComputerName, Message FROM
\\servername\Application
WHERE TimeWritten > '2011-01-25 12:01:00'
AND TimeWritten < '2012-01-25 12:01:00'

#4 試してみたところ、Log Parser Studio はローカル システムやリモート サーバーではなく、ログ ファイルでのみ動作するようです。

Log Parser Studio は logparser の単なる GUI です。動作するはずです。ドメイン内のすべてのログを取得するには、この生のクエリを (LP Studio で LogParser を直接使用せずに) 試してください。

LogParser "SELECT SourceName,TimeGenerated,TimeWritten,Message INTO filename.csv FROM \\Server\Application where Message Like '%mydomain.com%'" -o:CSV
于 2013-01-11T02:01:42.077 に答える