In Textdatei oder Datenbank einloggen?

25

Wann sollte ich die Datenbank für die Protokollierung verwenden und wann für Textdateien?
Ich sehe, dass Webserver und Webframeworks (die Ihre App intern verwendet) normalerweise (immer?) Anfragen und Fehler standardmäßig in Textdateien protokollieren. Aber ich sehe, dass sich Leute, die ihre App um diese Server und Frameworks herum entwickeln, manchmal in die Datenbank einloggen (sogar die Hauptdatenbank der App, keine externe).
Vielleicht gibt es auch einen Unterschied zwischen Debug-Protokollen und Audit-Protokollen - ich habe diese Klassifizierung irgendwo auf dieser Site gelesen.

Nakilon
quelle
Dies kann auch helfen stackoverflow.com/questions/3458813/…
Muhammad Raja
2
Mögliches Duplikat von Protokoll in Datei oder in Datenbanktabelle?
gnat
Während Sie keine vertraulichen Informationen protokollieren sollten, benötigen einige Systeme diese möglicherweise. Dies ist ein guter Fall für die Protokollierung in der Datenbank. Manchmal protokollieren Entwickler versehentlich vertrauliche Informationen. Um sich vor diesem Unfall zu schützen, melden sich viele Anwendungsentwickler nur in einer Datenbank an, sodass Dinge wie Sozialversicherungsnummern in Protokollnachrichten nicht in einer Textdatei im Klartext auf 13 verschiedenen Servern gespeichert werden.
Greg Burghardt

Antworten:

16

Im Allgemeinen ist die Protokollierung in einer Textdatei viel schneller als die Protokollierung in einer Datenbank. Dies ist der Hauptaspekt der Protokollierung, den Sie berücksichtigen müssen.

Der Grund, warum Sie sich bei einer Datenbank anmelden, liegt eher darin, dass Sie die Ergebnisse abfragen möchten. Die Suche nach bestimmten Protokollinformationen ist in einer Datenbank einfacher, insbesondere wenn Sie Kontextinformationen protokollieren, die zum Gruppieren von Protokolleinträgen verwendet werden können. Normalerweise ist es auch einfacher, auf eine zentrale Datenbank zuzugreifen, als auf eine Protokolldatei auf einem Server, der möglicherweise gesichert ist und auf den nicht zugegriffen werden kann.

Ideal wäre es, lokal in einer Datei zu protokollieren und diese Daten anschließend zur Überprüfung in eine Datenbank zu migrieren, falls dies später erforderlich ist.

Jetzt ist Auditing ein ganz anderes Biest. Obwohl das Konzept der Protokollierung ähnlich ist, muss die Überwachung in der Regel über einen längeren Zeitraum aufbewahrt werden (im Gegensatz zu Protokolldateien, die zum Debuggen oder Nachverfolgen verwendet werden und die nach Belieben gelöscht werden können). Audits sollen wichtige Informationen anzeigen. Sie protokollieren weit weniger Überwachungsinformationen und weniger häufig als bei der normalen Protokollierung, sodass die Leistung kein Problem darstellt. Aus diesem Grund werden die Vorteile des Schreibens dieser Prüfinformationen in eine zentrale Datenbank deutlich.

gbjbaanb
quelle
1
Eine andere Anordnung, die ich gesehen habe, besteht darin, dass Protokolle zunächst lokal geschrieben und dann von einer Art Hintergrundjob in die DB übertragen werden.
Robbie Dee
@ RobbieDee Ich mag diese Idee. Ich habe eine Art doppelte Frage: Ist es üblich, dass Protokolldateien von begrenzter Dauer vorliegen (z. B. nur die letzten 30 Tage), aber wenn Protokolle in die Datenbank verschoben werden (z. B. wöchentlich), werden alle Protokolle in der Datenbank gespeichert => die Protokolldateien werden ausgeführt nur wie ein Puffer und alle Lesevorgänge werden auf der Datenbank durchgeführt? Da sich das Schreiben in DB verzögert, besteht keine Sorge um die Leistung, nicht wahr?
Al-un
9

Es gibt keinen einheitlichen Ansatz und aus Gründen der Ausfallsicherheit möchten Sie manchmal mehrere Ansätze verwenden. In Ihrem Beispiel möchten Sie möglicherweise Debug-Protokolle in einer Datei speichern und Überwachungsprotokolle in einer Datenbank speichern.

Anwendung Paniermehl

Vorteile: Einfach zu implementieren und für den Benutzer sofort sichtbar

Nachteile: Informationen bleiben nur erhalten, solange die Anwendung aktiv ist

Textdatei

Vorteile: Einfach zu implementieren

Nachteile: Es muss sichergestellt werden, dass keine Dateisperrung erfolgt. Was tun, wenn auf dem Protokolllaufwerk nicht mehr genügend Speicherplatz vorhanden ist?

Ereignisprotokoll

Vorteile: Einfach zu implementieren

Nachteile: Das Ereignisprotokoll wird möglicherweise voll, wenn es nicht ordnungsgemäß eingerichtet wurde, oder alte Protokolle können aufgrund von Aufbewahrungsrichtlinien / Löschvorgängen verloren gehen.

Datenbank

Vorteile: Einfach zu implementieren

Nachteile: Mehr DB-Verkehr. Wie melde ich einen DB-Verlust oder ein anderes DB-Problem?

Messaging (MQ)

Vorteile: Feuern und vergessen

Nachteile: Eine weitere Schicht, die schief geht. Benötigt eingerichtet

Robbie Dee
quelle
Möglicherweise möchten Sie auch Syslog-Daemon- und SNMP-Protokollziele einbeziehen.
gbjbaanb
@gbjbaanb Nun, in der Tat - einige Betriebssysteme verfügen über eine solche integrierte Funktionalität - ist dies sicherlich keine vollständige Liste. Systeme mit hoher Verfügbarkeit senden möglicherweise auch SMS, wenn sie ausfallen.
Robbie Dee
2

Überwachungsprotokolle müssen für Überwachungszwecke die vollständige Rückverfolgbarkeit von Vorgängen über einen längeren Zeitraum sicherstellen, mit dem Ziel, den Inhalt Ihrer Datenbank vollständig zu rechtfertigen.

In einigen Fällen (z. B. bei Finanzanträgen) müssen diese Protokolle möglicherweise die Einhaltung gesetzlicher Anforderungen sicherstellen, z. B. Aufbewahrung (in einigen Ländern für 10 Jahre) oder Unveränderlichkeit. Da diese Protokolle den Inhalt der Datenbank auf Anwendungsebene rechtfertigen müssen, ist es üblich, sie in der Datenbank zu speichern, wo der Zugriff kontrolliert werden kann, um unbefugte Änderungen zu vermeiden.

Andere Protokolle , wie Überwachungsprotokolle oder Sicherheitsprotokolle, müssen häufig mit Leistungs- und Datenträgereinschränkungen fertig werden. Diese werden in der Regel in eine Datei geschrieben, da sie schneller zu schreiben sind (kein Transaktionsverwaltungsaufwand), einfacher offline zu archivieren und einfacher in SIEM- Tools für die externe Überwachung zu integrieren sind.

Es wird darauf hingewiesen, dass diese Art von Protokollen zwar zum Nachweis der Zuverlässigkeit von Überwachungsprotokollen verwendet werden kann (z. B. kein unbefugter Zugriff), sie jedoch im Allgemeinen kürzere Aufbewahrungsfristen aufweisen (z. B. zwischen 6 Monaten und 2 Jahren für Strafverfolgungszwecke für Telekommunikationsprotokolle). wenn überhaupt irgendeine Einschränkung.

Christophe
quelle
1

Einer der vielen Gründe, db für die Debug-Protokollierung zu verwenden, ist, wenn Sie keinen Zugriff auf die Anwendung oder den Webserver haben, um die Ereignisanzeige oder Textdateien anzuzeigen

Überwachungsprotokolle unterscheiden sich von Debug-Protokollen im Kontext von Webanwendungen. In einigen Anwendungen müssen Sie sie möglicherweise dem Endbenutzer anzeigen, damit sie zum einfachen Abrufen in die Datenbank gelangen können.

Sie können DB Tools auch zum Filtern und zum einfachen Anzeigen verwenden.

Muhammad Raja
quelle
Das Schreiben in Server-Protokolldateien ist nicht die einzige Option für Systeme mit hoher Parallelität. Diese Protokolle werden häufig auf das Clientgerät geschrieben und dann im Falle eines Problems an den Support weitergeleitet. Hohe Parallelität kann auch dazu führen, dass dies nicht zum Schreiben in eine einzelne Datenbank geeignet ist.
Robbie Dee
@RobbieDee Gilt das auch für Webserver und Webanwendungen? Da dies ist, was OP verlangt, glaube ich
Muhammad Raja