MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Decodifica dei registri degli errori di MongoDB

A volte la decodifica dei registri degli errori di MongoDB può essere complicata e può consumare gran parte del tuo tempo prezioso. In questo articolo impareremo come esaminare i log degli errori di MongoDB analizzando ogni parte dei messaggi di log.

Formato comune per le righe di registro MongoDB

Ecco lo schema della linea di registro per la versione 3.0 e successive...

<timestamp> <severity> <component> [<context>] <message>

Il modello di riga di registro per le versioni precedenti di MongoDB includeva solo:

<timestamp> [<context>] <message>

Diamo un'occhiata a ciascun tag.

Data e ora

Il campo Timestamp del messaggio di registro memorizza l'ora esatta in cui un messaggio di registro è stato inserito nel file di registro. Ci sono 4 tipi di timestamp supportati da MongoDB. Il formato predefinito è:iso8601-local. Puoi cambiarlo usando il parametro --timeStampFormat.

Nome formato timestamp Esempio
iso8601-local 31-12-1969 T19:00:00.000+0500
iso8601-utc 1970-01-01T00:00:00.000Z
ctime Mer 31 dicembre 19:00:00.000
ctime-no-ms Mer 31 dicembre 19:00:00

Gravità

La tabella seguente descrive il significato di tutti i possibili livelli di gravità.

Livello di gravità Descrizione
F Fatale:l'errore del database ha reso il database non più accessibile
E Errore - Errori del database che interromperanno l'esecuzione del DB.
W Avviso - Messaggi del database che spiegano il comportamento potenzialmente dannoso del DB.
Io Informativo - Messaggi solo a scopo informativo come "Una nuova connessione accettata".
D Debug - Utile soprattutto per il debug degli errori del DB

Componente

Dopo la versione 3.0, i messaggi di registro ora includono "componente" per fornire una categorizzazione funzionale dei messaggi. Ciò ti consente di restringere facilmente la tua ricerca osservando i componenti specifici.

Componente Descrizione errore
Accesso Relativo al controllo degli accessi
Comando Relativo ai comandi del database
Controllo Relativo alle attività di controllo
FTDC Relativo alle attività di raccolta dei dati diagnostici
Geo Relativo all'analisi delle forme geospaziali
Indice Relativo alle operazioni di indicizzazione
Rete Relativo alle attività di rete
Interrogazione Relativo alle query
REPLICA Relativo ai set di repliche
REPL_HB Relativo agli heartbeat dei set di repliche
Ripristino Relativo alle operazioni di rollback db
Sharding Relativo al partizionamento orizzontale
Archiviazione Relativo alle attività di archiviazione
Diario Relativo alle attività del diario
Scrivi Relativo alle operazioni di scrittura db

Contesto

La parte del contesto del messaggio di errore contiene generalmente il thread o l'ID di connessione. Altri valori possono essere avviati e ascoltati. Questa parte è racchiusa tra parentesi quadre. I messaggi di registro di qualsiasi nuova connessione a MongoDB avranno un valore di contesto come initandlisten, per tutti gli altri messaggi di registro, sarà l'id del thread o l'id della connessione. Ad esempio

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)

Messaggio

Contiene il messaggio di registro effettivo.

Posizione del file di registro

La posizione predefinita sul server è:/var/log/mongodb/mongodb.log

Se il file di registro non è presente in questa posizione, puoi controllare il file di configurazione di MongoDB. Puoi trovare il file di configurazione di MongoDB in una di queste due posizioni.

/etc/mongod.conf or /yourMongoDBpath/mongod.conf

Una volta aperto il file di configurazione, cerca l'opzione logpath al suo interno. l'opzione logpath dice a MongoDB dove registrare tutti i messaggi.

Analisi di un semplice messaggio di registro

Ecco un esempio di un tipico messaggio di errore di MongoDB...

2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017

Timestamp:2014-11-03T18:28:32.450-0500
Gravità:I
Componente:RETE
Contesto:[initandlisten]
Messaggio:in attesa di connessioni sulla porta 27017

La parte più importante di questo errore è la parte del messaggio. Nella maggior parte dei casi, puoi capire l'errore guardando questo campo. A volte, se il messaggio non ti è chiaro, puoi scegliere la parte componente. Per questo messaggio, il valore del componente è Rete, il che significa che il messaggio di registro è correlato a un problema di rete.

Se non sei in grado di risolvere il tuo errore, puoi controllare la gravità del messaggio di registro che dice che questo messaggio è a scopo informativo. Inoltre, puoi anche controllare altre parti del messaggio di registro come timestamp o contesto per trovare la causa principale completa.

Decodifica dei messaggi di registro degli errori comuni

  1. Messaggio:

    2018-05-10T21:19:46.942 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

    Risoluzione: Crea utente amministratore nel database di autenticazione

  2. Messaggio:

    2018-05-10T21:19:46.942 E COMMAND  [initandlisten] ** ERROR: getMore command failed. Cursor not found

    Risoluzione: Rimuovere il timeout dal cursore o aumentare le dimensioni del batch del cursore.

  3. Messaggio:

    2018-05-10T21:19:46.942 E INDEX  [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }

    Risoluzione: Violazione del vincolo della chiave univoca. Prova a inserire il documento con chiave diversa.

  4. Messaggio:

    2018-05-10T21:19:46.942 E NETWORK  [initandlisten] ** ERROR:Timed out connecting to localhost:27017.

    Risoluzione: La latenza tra il driver e il server è troppo grande, il driver potrebbe arrendersi. Puoi modificare l'impostazione aggiungendo l'opzione connectionTimeout nella stringa di connessione.

  5. Messaggio:

    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 }

    Risoluzione: Rimuovi la duplicazione del valore del campo _id dai documenti in conflitto.

  6. Messaggio:

    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

    Risoluzione: Uno dei server non è in esecuzione sulla porta 27017 oppure prova a riavviare il server con l'host e la porta corretti.

Strumenti di gestione dei registri

MongoDB 3.0 ha aggiornato le sue funzionalità di registrazione per fornire informazioni migliori per tutte le attività del database. Sul mercato sono disponibili molti strumenti di gestione dei registri come MongoDB Ops Manager, voci di registro, mtools ecc.

Conclusione

La registrazione è importante quanto la replica o il partizionamento orizzontale per una buona e corretta gestione del database. Per una migliore gestione del database, si dovrebbe essere in grado di decodificare facilmente i registri per correggere rapidamente le eccezioni/errori. Spero che dopo aver letto questo tutorial, ti sentirai più a tuo agio durante l'analisi di registri MongoDB complessi.