2016-07-21 2 views
2

Wir haben derzeit ein benutzerdefiniertes Protokollierungssystem. Es ist eine einzige DLL, die Protokolle an den Microsoft SQL-Server sendet. Diese Protokolle werden über eine Webseite mit erweiterten Sortierung/Filterung/Paging/Download angezeigt. Ich habe das System von Grund auf neu entwickelt und ich war neu in Entity Framework und bin nicht sehr stark in SQL.Event Log Praktikabilität

Ein Mitarbeiter besteht darauf, dass das Windows-Ereignisprotokoll eine bessere Wahl als der SQL-Server ist, da es Bandbreite spart und daher schneller ist. Auch, dass es eine bewährte Lösung ist.

Ich befrage die Praktikabilität der Verwendung von Windows Event Log für unsere umfangreiche Protokollierung. Derzeit haben wir in SQL eine einzige Log-Tabelle, die etwa 150 Millionen Logs enthält, die von ~ 100 verschiedenen Maschinen über ~ 600 Anwendungen empfangen wurden und insgesamt etwa 90 GB ausmachen.

Verwendet Windows Event Log eine praktikable Lösung für diese Art von Last? Dann erstellen Sie einen Weg für einen Admin-Server/Benutzer, diese Protokolle ohne zwischengeschaltetes SQL anzufordern, zu sortieren, zu filtern oder zu pagen. Oder bin ich nur geblendet, weil ich das aktuelle System gebaut habe?

Zusätzliche Informationen

Log ist ein Single-Table Log (Id, AppId, Typ, Lvl, Quelle, Msg, Zeit)

150 Millionen Protokolle Fehler für 7 Tage umfasst, alles andere für 3 Tage

Normalisieren Source und Msg würde die Größe der Tabelle drastisch reduzieren, da es viele doppelte Nachrichten gibt.

Die meisten Beschwerden über das aktuelle System bestehen darin, dass die Webseite bei bestimmten Protokollen bei der Anforderung von Protokollen das Zeitlimit überschreitet. Die Zeitüberschreitung beträgt immer noch 30 Sekunden. Die Anzahl der Protokolle ist auf 10.000 begrenzt. Zu diesem Zeitpunkt müssen Sie Ihre Suche verfeinern. Die Zeitüberschreitung tritt nur bei Anwendungen auf, die durchschnittlich 800k + Protokolle enthalten. Andere Apps geben Ergebnisse mit einem Durchschnitt von maximal 10 Sekunden zurück.

Ich mache Änderungen an Indizes und habe darüber nachgedacht, die Tabelle zu normalisieren, um die Effizienz zu erhöhen, aber es ist ein fortlaufender Prozess. Wenn Windows Event Log eine bessere Lösung ist, würde ich lieber meine Zeit damit verbringen, dies zu implementieren.

+1

Ich würde empfehlen, Ihre Lösung zu optimieren, vielleicht durch Partitionierung der Protokolltabelle für die Leistung. –

+2

Wenn Sie lokal in Windows-Ereignisprotokoll schreiben können (nicht über das Netzwerk), um Bandbreite zu sparen, können Sie auch [SQL Server ohne Netzwerk ausführen] (https://msdn.microsoft.com/de-de us/library/ms187078.aspx) und auch Bandbreite sparen. Ich habe eine Ahnung, dass das Windows Event Log nicht in der Lage sein wird ~ 300 Millionen Logs pro Woche zu verarbeiten, und wenn es das tut, bekomme ich nicht, wie es/fliter/etc .. schneller als SQL sortieren würde. edit: Gerade gesehen, es ist 100 Maschinen, Ihr Kollege schlägt vor, Sie speichern Protokolle an 100 verschiedenen Standorten? Auch wenn EventLog das Schreiben aus der Ferne unterstützt, gibt es keine bessere Lösung als sql. – Quantic

+2

So 100 Maschinen in ihre eigenen Ereignisprotokolle schreiben? Wie würdest du sie zusammentragen? Wenn Sie Protokolle an einen zentralen Standort senden, wie würde das die Bandbreite verbessern? - Das Ereignisprotokoll ist keine optimierte Datenbank und wird nicht annähernd so gut funktionieren. –

Antwort

3

Das ist meine einzige eigene Meinung

Windows-Ereignis für verteilte Systeme Anmeldung ist eine schlechte Idee.

Ihre Idee, Ihre Protokolle für Ihre Anwendungen zu zentralisieren, ist großartig. Dies wird Ihnen helfen, Statistiken zu machen, Sie haben einen Backup-Mechanismus, können Sie SQL Server für Clustering, etc.

Wenn Menschen über Leistungsprobleme beschweren, wäre es vielleicht Zeit zu prüfen, in der Optimierung Ihrer Lösung. Indizes vielleicht? Schau dir an, was indiziert werden könnte. Stellen Sie sicher, dass SQL Server bei der Verwendung von WHERE-Bedingungen Ihre Suchargumente (SARGS) verwenden kann.

Können Sie Ihre Daten in mehrere Tabellen aufteilen? Vielleicht sollte eine Normalisierung Ihrer Daten in Betracht gezogen werden.

Sie auch in vorgefertigte Filter, die Ihre Benutzer verwenden aussehen könnten und sie zur Verfügung stellen und

Dies ist nur ein Anfang auf ihnen (Performance) arbeiten.Es gibt wahrscheinlich Details, die wir nicht kennen und die Sie nicht offenlegen können

Verwandte Themen