Soms kan het decoderen van MongoDB-foutlogboeken lastig zijn en een groot deel van uw kostbare tijd in beslag nemen. In dit artikel leren we hoe we de MongoDB-foutlogboeken kunnen onderzoeken door elk deel van de logboekberichten te ontleden.
Algemeen formaat voor MongoDB-logregels
Hier is het log-lijnpatroon voor versie 3.0 en hoger...
<timestamp> <severity> <component> [<context>] <message>
Loglijnpatroon voor eerdere versies van MongoDB alleen inbegrepen:
<timestamp> [<context>] <message>
Laten we naar elke tag kijken.
Tijdstempels
Tijdstempelveld van logbericht slaat de exacte tijd op waarop een logbericht in het logbestand is ingevoegd. Er worden 4 soorten tijdstempels ondersteund door MongoDB. Het standaardformaat is:iso8601-local. U kunt dit wijzigen met de parameter --timeStampFormat.
Naam tijdstempelformaat | Voorbeeld |
---|---|
iso8601-local | 1969-12-31T19:00:00.000+0500 |
iso8601-utc | 1970-01-01T00:00:00.000Z |
ctime | Wo 31 Dec 19:00:00.000 |
ctime-no-ms | Wo 31 Dec 19:00:00 |
Ernst
De volgende tabel beschrijft de betekenis van alle mogelijke ernstniveaus.
Ernstniveau | Beschrijving |
---|---|
F | Fataal- Door de databasefout is de database niet langer toegankelijk |
E | Fout - Databasefouten die de uitvoering van de DB zullen stoppen. |
W | Waarschuwing - Databaseberichten die mogelijk schadelijk gedrag van DB verklaren. |
Ik | Informatief - Berichten alleen ter informatie, zoals 'Een nieuwe verbinding geaccepteerd'. |
D | Debug - Meestal handig voor het opsporen van fouten in de database |
Onderdeel
Na versie 3.0 bevatten logberichten nu "component" om een functionele categorisering van de berichten te bieden. Hierdoor kunt u uw zoekopdracht gemakkelijk verfijnen door naar de specifieke componenten te kijken.
Onderdeel | Foutbeschrijving |
---|---|
Toegang | Gerelateerd aan toegangscontrole |
Opdracht | Gerelateerd aan databasecommando's |
Besturing | Gerelateerd aan controleactiviteiten |
FTDC | Gerelateerd aan activiteiten voor het verzamelen van diagnostische gegevens |
Geo | Gerelateerd aan het ontleden van geospatiale vormen |
Index | In verband met indexeringsoperaties |
Netwerk | Gerelateerd aan netwerkactiviteiten |
Query | Gerelateerd aan zoekopdrachten |
REPL | Gerelateerd aan replicasets |
REPL_HB | Gerelateerd aan hartslagen van replicasets |
Terugdraaien | In verband met het terugdraaien van db-bewerkingen |
Sharden | Gerelateerd aan sharding |
Opslag | Gerelateerd aan opslagactiviteiten |
Journaal | Gerelateerd aan tijdschriftactiviteiten |
Schrijf | Gerelateerd aan db-schrijfbewerkingen |
Context
Het contextgedeelte van het foutbericht bevat over het algemeen de thread of verbindings-ID. Andere waarden kunnen worden initluister. Dit deel is omgeven door vierkante haken. Logberichten van een nieuwe verbinding met MongoDB hebben een contextwaarde als initandlisten, voor alle andere logberichten is dit ofwel een thread-ID of een verbindings-ID. Voor bijv.
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)
Bericht
Bevat het eigenlijke logbericht.
Locatie logbestand
De standaardlocatie op de server is:/var/log/mongodb/mongodb.log
Als het logbestand op deze locatie niet aanwezig is, kunt u het MongoDB-configuratiebestand inchecken. U kunt het MongoDB-configuratiebestand op een van deze twee locaties vinden.
/etc/mongod.conf or /yourMongoDBpath/mongod.conf
Nadat u het configuratiebestand hebt geopend, zoekt u naar de optie logpath erin. logpath-optie vertelt MongoDB waar alle berichten moeten worden gelogd.
Een eenvoudig logbericht analyseren
Hier is een voorbeeld van een typische MongoDB-foutmelding...
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
Tijdstempel:2014-11-03T18:28:32.450-0500
Severity:I
Component:NETWORK
Context:[initandlisten]
Bericht:wachten op verbindingen op poort 27017
Het belangrijkste onderdeel van deze fout is het berichtgedeelte. In de meeste gevallen kunt u de fout achterhalen door naar dit veld te kijken. Soms is de boodschap voor u niet duidelijk, dan kunt u voor het onderdeel gaan. Voor dit bericht is de waarde van Component Netwerk, wat betekent dat het logbericht gerelateerd is aan een netwerkprobleem.
Als u uw fout niet kunt oplossen, kunt u de ernst van het logbericht controleren waarin staat dat dit bericht voor informatieve doeleinden is. Verder kun je ook andere delen van het logbericht bekijken, zoals tijdstempel of context, om de volledige hoofdoorzaak te vinden.
Decodering van algemene foutenlogboekberichten
-
Bericht:
2018-05-10T21:19:46.942 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
Oplossing: Maak een admin-gebruiker aan in de authenticatiedatabase
-
Bericht:
2018-05-10T21:19:46.942 E COMMAND [initandlisten] ** ERROR: getMore command failed. Cursor not found
Oplossing: Verwijder de time-out van de cursor of vergroot de batchgrootte van de cursor.
-
Bericht:
2018-05-10T21:19:46.942 E INDEX [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }
Oplossing: Overtreding van een unieke sleutelbeperking. Probeer een document met een andere sleutel in te voegen.
-
Bericht:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR:Timed out connecting to localhost:27017.
Oplossing: De latentie tussen de driver en de server is te groot, de driver kan het opgeven. U kunt de instelling wijzigen door de optie connectionTimeout toe te voegen aan de verbindingsreeks.
-
Bericht:
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 }
Oplossing: Verwijder duplicatie van _id veldwaarde uit conflicterende documenten.
-
Bericht:
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
Oplossing: Een van beide servers draait niet op poort 27017 of probeer de server opnieuw op te starten met de juiste host en poort.
Hulpprogramma's voor logbeheer
MongoDB 3.0 heeft zijn logboekfuncties bijgewerkt om betere inzichten te bieden voor alle database-activiteiten. Er zijn veel tools voor logboekbeheer op de markt beschikbaar, zoals MongoDB Ops Manager, logboekitems, mtools enz.
Conclusie
Logging is net zo belangrijk als Replicatie of Sharding voor goed en correct databasebeheer. Voor een beter databasebeheer moet men de logs gemakkelijk kunnen decoderen om de uitzonderingen/fouten snel te corrigeren. Ik hoop dat je je na het lezen van deze tutorial meer op je gemak zult voelen bij het analyseren van complexe MongoDB-logboeken.