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.
Ich würde empfehlen, Ihre Lösung zu optimieren, vielleicht durch Partitionierung der Protokolltabelle für die Leistung. –
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
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. –