我正在研究從遠程機器讀取事件日誌(應用程序)的應用程序。我正在使用.net中的EventLog類,然後在日誌條目上迭代,但這非常慢。在某些情況下,某些機器具有40000多個日誌條目,並且需要幾個小時來遍歷條目。 完成此任務的最佳方式是什麼? .net中是否有更快的或其他技術的其他類?什麼是在遠程機器上讀取事件日誌的最快方法?
回答
也許WMI可以幫助你:
也許是遠程計算機可以做計算的一點點。所以這樣你的服務器只會處理相關的信息。這將是一種使用遠程計算機進行光過濾的集羣,服務器將分析部分。
您是否嘗試過使用PowerShell 2.0中的遠程處理功能?它們允許您在遠程機器上執行cmdlet(如讀取事件日誌)並將結果(當然是對象)返回給調用會話。
您可以在那些將日誌保存到文件並將其發送到您的web應用程序的機器上放置一個程序,我認爲這將更快,因爲您可以做循環本地,但我不知道如何做到這一點,所以我不能確定你的任何代碼:(
男人,我覺得你的痛苦。我們有完全相同的問題,在我們的應用程序。
解決方案必須根據什麼服務器版本你正在運行一個分支,什麼服務器版本的「目標」機器正在運行
如果您在Vista或Windows Server 2008上都運行過,那麼您應該看看在System.Diagnostics.Eventing.Reader.EventLogQuery
和System.Diagnostics.Eventing.Reader.EventLogReader
。這些在.net 3.5中是新的。
基本上,您可以使用XML構建查詢並將其發送到遠程計算機上運行。也許你只是在尋找特定類型的事件,或者只是從特定時間點開始新事件。搜索在遠程機器上運行,然後您只需返回匹配事件。新的類比舊的.net 2.0方式快得多,但是它們只能在Vista或Windows Server 2008上支持。
對於我們的應用程序,當目標不在Vista/Win2008上時,我們下載了原始程序。 evt文件從遠程系統,然後使用它的二進制格式解析文件。關於.evt文件的事件日誌格式(Vista之前)有幾個數據源,其中包括link text以及我在codeproject.com上回憶的一些有c#代碼的文章。
Vista和Windows Server 2008計算機使用新的.evtx格式,這是一種新格式,因此您無法在所有版本中使用相同的二進制分析方法。但是新的EventLogQuery和EventLogReader類非常快,您不需要。現在只需使用內置類即可快速完成。
事件日誌讀取器非常慢......太慢了。跆拳道微軟?
使用LogParser 2.2 - 在Internet上搜索C#和LogParser(或者可以使用命令行中的日誌解析器命令)。我不想重複已經由他人貢獻的工作。
我通過將日誌導出爲EVTX文件來從遠程系統中取出日誌。然後我從遠程系統複製文件。這個過程非常快 - 即使是跨越地球的網絡(我在將日誌導出到網絡資源時遇到了問題)。一旦你擁有本地的,你可以做你的搜索和處理。
有EVTX有多種原因 - 我不會深入理解爲什麼我們這樣做。
以下是保存EVTX日誌副本的代碼示例: (注意:「device」是網絡主機名或IP,「LogName」是所需日誌的名稱: 「System」,「Security」或「Application」。outputPathOnRemoteSystem是遠程計算機上的路徑,例如「c:\ temp \%hostname%。%LogName%。%YYYYMMDD_HH.MM%.evtx」。)
static public bool DumpLog(string device, string LogName, string outputPathOnRemoteSystem, out string errMessage)
{
bool wasExported = false;
string errorMessage = "";
try
{
System.Diagnostics.Eventing.Reader.EventLogSession els = new System.Diagnostics.Eventing.Reader.EventLogSession(device);
els.ExportLogAndMessages(LogName, PathType.LogName, "*", outputPathOnRemoteSystem);
wasExported = true;
}
catch (UnauthorizedAccessException e)
{
errorMessage = "Unauthorized - Access Denied: " + e.Message;
}
catch (EventLogNotFoundException e)
{
errorMessage = "Event Log Not Found: " + e.Message;
}
catch (EventLogException e)
{
errorMessage = "Export Failed: " + e.Message + ", Log: " + LogName + ", Device: " + device;
}
errMessage = errorMessage;
return wasExported;
}
一個很好的解釋/範例可以在MSDN找到。
EventLogSession session = new EventLogSession(Environment.MachineName);
// [System/Level=2] filters out the errors
// Where "Log" is the log you want to get data from.
EventLogQuery query = new EventLogQuery("Log", PathType.LogName, "*[System/Level=2]");
EventLogReader reader = new EventLogReader(query);
for (EventRecord eventInstance = reader.ReadEvent();
null != eventInstance;
eventInstance = reader.ReadEvent())
{
// Output or save your event data here.
}
當用老的代碼等待5-20分鐘時,這個在不到10秒內完成。
- 1. 從遠程機器收集日誌文件的最佳方法?
- 2. 在Delphi中讀取大文件的最快方法是什麼?
- 3. 在PHP中讀取文件的最快方法是什麼?
- 4. 在Ruby中讀取大文件的最快方法是什麼?
- 5. 在.NET中讀取滾動日誌文件的最佳方法是什麼?
- 6. 什麼是從遠程機器使用c讀取事件日誌的快速和新方法(基於高性能)?#
- 7. 什麼是逐行讀取文件的最快方法?
- 8. 無法讀取遠程系統事件日誌
- 9. 寫入事件日誌條目的最佳方式是什麼?
- 10. 什麼是在java中讀取日誌文件的最有效方式?
- 11. 什麼是從Java中讀取System.in的最快方法?
- 12. 什麼是從DbDataReader讀取數據的最快方法?
- 13. 使用.NET遠程讀取事件日誌
- 14. 讀取事件日誌
- 15. 在遠程主機上讀取文件
- 16. 從遠程計算機讀取事件日誌而不通過憑據
- 17. 在iPhone上寫大文件的最快方法是什麼?
- 18. 從遠程XP機器收集事件日誌
- 19. 從遠程服務器收集日誌的最佳方法
- 20. 讀取/寫入隨機存取文件的最快方法?
- 21. 讀取文件的最快方法
- 22. 在PHP中讀取大文件的最佳方法是什麼?
- 23. 從Java中的文本文件中讀取最快的方法是什麼?
- 24. 在遠程機器上使用Intel Advisor的正確方法是什麼?
- 25. 在div上處理onchange事件的最佳方法是什麼?
- 26. 什麼是從文件中讀取字符串的最快方法?
- 27. 從iPhone獲取日誌文件的最簡單方法是什麼?
- 28. C - 獲取文件大小的最快方法是什麼?
- 29. 在Linux機器上MFCC提取最快的方法
- 30. MongoDB - 獲取特定日期的最新值的最快方法是什麼?
我不知道什麼是最好的閱讀事件日誌項目的方式,但我建議你重新考慮你的架構!你應該使用其他一些日誌技術!我會使用企業庫日誌應用程序塊。然後,您可以輕鬆登錄數據庫(也可以登錄到事件日誌中)。然後,您可以輕鬆地對數據庫運行查詢。 – 2009-06-01 12:52:12