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
-
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
-
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.
-
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.
-
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.
-
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.
-
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.