Manchmal kann das Decodieren von MongoDB-Fehlerprotokollen schwierig sein und große Teile Ihrer wertvollen Zeit in Anspruch nehmen. In diesem Artikel erfahren Sie, wie Sie die MongoDB-Fehlerprotokolle untersuchen, indem Sie jeden Teil der Protokollmeldungen analysieren.
Gemeinsames Format für MongoDB-Protokollzeilen
Hier ist das Protokollzeilenmuster für Version 3.0 und höher...
<timestamp> <severity> <component> [<context>] <message>
Protokollzeilenmuster nur für frühere Versionen von MongoDB enthalten:
<timestamp> [<context>] <message>
Sehen wir uns die einzelnen Tags an.
Zeitstempel
Das Zeitstempelfeld der Protokollnachricht speichert den genauen Zeitpunkt, zu dem eine Protokollnachricht in die Protokolldatei eingefügt wurde. Es gibt 4 Arten von Zeitstempeln, die von MongoDB unterstützt werden. Das Standardformat ist:iso8601-local. Sie können es mit dem Parameter --timeStampFormat ändern.
Name des Zeitstempelformats | Beispiel |
---|---|
iso8601-lokal | 1969-12-31T19:00:00.000+0500 |
iso8601-utc | 1970-01-01T00:00:00.000Z |
ctime | Mittwoch 31. Dez. 19:00:00.000 |
ctime-no-ms | Mittwoch 31. Dez. 19:00:00 |
Schweregrad
Die folgende Tabelle beschreibt die Bedeutung aller möglichen Schweregrade.
Schweregrad | Beschreibung |
---|---|
F | Schwerwiegend – Der Datenbankfehler hat dazu geführt, dass auf die Datenbank nicht mehr zugegriffen werden kann |
E | Fehler – Datenbankfehler, die die DB-Ausführung stoppen. |
W | Warnung - Datenbankmeldungen, die potenziell schädliches Verhalten von DB erklären. |
Ich | Information – Nachrichten nur zu Informationszwecken wie „Eine neue Verbindung akzeptiert“. |
D | Debug - Meistens nützlich zum Debuggen von DB-Fehlern |
Komponente
Nach Version 3.0 enthalten Protokollmeldungen jetzt „Komponente“, um eine funktionale Kategorisierung der Meldungen bereitzustellen. Auf diese Weise können Sie Ihre Suche einfach eingrenzen, indem Sie sich die spezifischen Komponenten ansehen.
Komponente | Fehlerbeschreibung |
---|---|
Zugriff | Im Zusammenhang mit der Zugriffskontrolle |
Befehl | Im Zusammenhang mit Datenbankbefehlen |
Steuerung | Im Zusammenhang mit Kontrollaktivitäten |
FTDC | Im Zusammenhang mit diagnostischen Datenerfassungsaktivitäten |
Geo | Im Zusammenhang mit dem Parsen von Geodaten |
Index | Im Zusammenhang mit Indizierungsvorgängen |
Netzwerk | Im Zusammenhang mit Netzwerkaktivitäten |
Abfrage | Im Zusammenhang mit Abfragen |
REPL | Im Zusammenhang mit Replikatsätzen |
REPL_HB | Im Zusammenhang mit Replikat-Sets-Heartbeats |
Zurücksetzen | Im Zusammenhang mit Rollback-Datenbankoperationen |
Sharding | Im Zusammenhang mit Sharding |
Speicherung | Im Zusammenhang mit Speicheraktivitäten |
Journal | Im Zusammenhang mit Zeitschriftenaktivitäten |
Schreiben | Im Zusammenhang mit DB-Schreiboperationen |
Kontext
Der Kontextteil der Fehlermeldung enthält im Allgemeinen die Thread- oder Verbindungs-ID. Andere Werte können initandlisten sein. Dieser Teil ist von eckigen Klammern umgeben. Protokollmeldungen jeder neuen Verbindung zu MongoDB haben den Kontextwert „initandlisten“, für alle anderen Protokollmeldungen ist dies entweder die Thread-ID oder die Verbindungs-ID. Für z.B.
2018-05-29T19:06:29.731+0000 [initandlisten] connection accepted from 127.0.0.1:27017 #1000 (13 connections now open)
2018-05-29T19:06:35.770+0000 [conn1000] end connection 127.0.0.1:27017 (12 connections now open)
Nachricht
Enthält die eigentliche Protokollnachricht.
Speicherort der Protokolldatei
Der Standardspeicherort auf dem Server ist:/var/log/mongodb/mongodb.log
Wenn die Protokolldatei an diesem Speicherort nicht vorhanden ist, können Sie die MongoDB-Konfigurationsdatei einchecken. Sie finden die MongoDB-Konfigurationsdatei an einem dieser beiden Orte.
/etc/mongod.conf or /yourMongoDBpath/mongod.conf
Suchen Sie nach dem Öffnen der Konfigurationsdatei nach der Option logpath darin. Die logpath-Option teilt MongoDB mit, wo alle Nachrichten protokolliert werden sollen.
Analysieren einer einfachen Protokollnachricht
Hier ist ein Beispiel für eine typische MongoDB-Fehlermeldung...
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
Zeitstempel:2014-11-03T18:28:32.450-0500
Schweregrad:I
Komponente:NETWORK
Kontext:[initandlisten]
Meldung:Warten auf Verbindungen auf Port 27017
Der wichtigste Teil dieses Fehlers ist der Nachrichtenteil. In den meisten Fällen können Sie den Fehler herausfinden, indem Sie sich dieses Feld ansehen. Manchmal, wenn Ihnen die Botschaft nicht klar ist, können Sie sich für das Komponententeil entscheiden. Für diese Nachricht ist der Wert der Komponente Network, was bedeutet, dass die Protokollnachricht mit einem Netzwerkproblem zusammenhängt.
Wenn Sie Ihren Fehler nicht beheben können, können Sie den Schweregrad der Protokollnachricht überprüfen, die besagt, dass diese Nachricht zu Informationszwecken dient. Darüber hinaus können Sie auch andere Teile der Protokollnachricht wie Zeitstempel oder Kontext überprüfen, um die vollständige Grundursache zu finden.
Häufige Fehlerprotokollmeldungen entschlüsseln
-
Nachricht:
2018-05-10T21:19:46.942 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
Lösung: Admin-Benutzer in der Authentifizierungsdatenbank erstellen
-
Nachricht:
2018-05-10T21:19:46.942 E COMMAND [initandlisten] ** ERROR: getMore command failed. Cursor not found
Lösung: Entfernen Sie die Zeitüberschreitung vom Cursor oder erhöhen Sie die Stapelgröße des Cursors.
-
Nachricht:
2018-05-10T21:19:46.942 E INDEX [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }
Lösung: Verletzung der Eindeutigkeitsschlüsseleinschränkung. Versuchen Sie, ein Dokument mit einem anderen Schlüssel einzufügen.
-
Nachricht:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR:Timed out connecting to localhost:27017.
Lösung: Die Latenz zwischen dem Treiber und dem Server ist zu groß, der Treiber kann aufgeben. Sie können die Einstellung ändern, indem Sie die Option connectionTimeout in der Verbindungszeichenfolge hinzufügen.
-
Nachricht:
2018-05-10T21:19:46.942 E WRITE [initandlisten] ** ERROR: A write operation resulted in an error. E11000 duplicate key error index: test.people.$_id_ dup key: { : 0 }
Lösung: Entfernen Sie die Duplizierung des _id-Feldwerts aus widersprüchlichen Dokumenten.
-
Nachricht:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR: No connection could be made because the target machine actively refused it 127.0.0.1:27017 at System.Net.Sockets.Socket.EndConnect
Lösung: Entweder läuft der Server nicht auf Port 27017 oder versuchen Sie, den Server mit dem richtigen Host und Port neu zu starten.
Protokollverwaltungstools
MongoDB 3.0 hat seine Protokollierungsfunktionen aktualisiert, um bessere Einblicke in alle Datenbankaktivitäten zu bieten. Es gibt viele Protokollverwaltungstools auf dem Markt, wie MongoDB Ops Manager, Protokolleinträge, mtools usw.
Schlussfolgerung
Die Protokollierung ist für eine gute und ordnungsgemäße Datenbankverwaltung genauso wichtig wie die Replikation oder das Sharding. Für eine bessere Datenbankverwaltung sollte man in der Lage sein, die Protokolle einfach zu decodieren, um die Ausnahmen/Fehler schnell zu beheben. Ich hoffe, dass Sie sich nach dem Lesen dieses Tutorials beim Analysieren komplexer MongoDB-Protokolle wohler fühlen werden.