Někdy může být dekódování protokolů chyb MongoDB složité a může spotřebovat velké kusy vašeho drahocenného času. V tomto článku se naučíme, jak prozkoumat protokoly chyb MongoDB rozebráním každé části zpráv protokolu.
Běžný formát pro MongoDB Log Lines
Zde je vzor řádku protokolu pro verzi 3.0 a vyšší...
<timestamp> <severity> <component> [<context>] <message>
Vzor čáry protokolu pro předchozí verze MongoDB obsahuje pouze:
<timestamp> [<context>] <message>
Podívejme se na každý tag.
Časová razítka
Pole Časové razítko zprávy protokolu ukládá přesný čas, kdy byla zpráva protokolu vložena do souboru protokolu. MongoDB podporuje 4 typy časových razítek. Výchozí formát je:iso8601-local. Můžete jej změnit pomocí parametru --timeStampFormat.
Název formátu časového razítka | Příklad |
---|---|
iso8601-local | 1969-12-31T19:00:00.000+0500 |
iso8601-utc | 1970-01-01T00:00:00.000Z |
ctime | St 31. prosince 19:00:00 000 |
ctime-no-ms | St 31. prosince 19:00:00 |
Závažnost
Následující tabulka popisuje význam všech možných úrovní závažnosti.
Úroveň závažnosti | Popis |
---|---|
F | Závažná- Chyba databáze způsobila, že databáze již není přístupná |
E | Chyba – Chyby databáze, které zastaví provádění DB. |
W | Varování – Databázové zprávy, které vysvětlují potenciálně škodlivé chování DB. |
Já | Informační – zprávy pouze pro informační účely, jako je „Nové připojení přijato“. |
D | Ladění – většinou užitečné pro ladění chyb DB |
Komponenta
Po verzi 3.0 nyní zprávy protokolu obsahují „komponentu“, která poskytuje funkční kategorizaci zpráv. To vám umožní snadno zúžit vyhledávání pohledem na konkrétní komponenty.
Komponenta | Popis chyby |
---|---|
Přístup | Související s řízením přístupu |
Příkaz | Související s databázovými příkazy |
Kontrola | Související s kontrolními aktivitami |
FTDC | Související s činnostmi shromažďování diagnostických dat |
Geo | Souvisí s analýzou geoprostorových tvarů |
Index | Související s operacemi indexování |
Síť | Související se síťovými aktivitami |
Dotaz | Související s dotazy |
REPL | Související se sadami replik |
REPL_HB | Související s prezenčními signály replikových sad |
Vrácení zpět | Souvisí s operacemi rollback db |
Sharding | Souvisí se sdílením |
Úložiště | Související s aktivitami úložiště |
Deník | Související s aktivitami deníku |
Napište | Souvisí s operacemi zápisu db |
Kontext
Kontextová část chybové zprávy obecně obsahuje vlákno nebo ID připojení. Jiné hodnoty mohou být initandlist. Tato část je ohraničena hranatými závorkami. Zprávy protokolu jakéhokoli nového připojení k MongoDB budou mít hodnotu kontextu jako initandlisten, pro všechny ostatní zprávy protokolu to bude buď ID vlákna nebo ID připojení. Například
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)
Zpráva
Obsahuje skutečnou zprávu protokolu.
Umístění souboru protokolu
Výchozí umístění na serveru je:/var/log/mongodb/mongodb.log
Pokud se soubor protokolu v tomto umístění nenachází, můžete se podívat do konfiguračního souboru MongoDB. Konfigurační soubor MongoDB můžete najít na kterémkoli z těchto dvou umístění.
/etc/mongod.conf or /yourMongoDBpath/mongod.conf
Jakmile otevřete konfigurační soubor, vyhledejte v něm možnost logpath. možnost logpath říká MongoDB, kam má zaznamenat všechny zprávy.
Analýza jednoduché zprávy protokolu
Zde je příklad typické chybové zprávy MongoDB...
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
Časové razítko:2014-11-03T18:28:32.450-0500
Závažnost:I
Komponenta:NETWORK
Kontext:[initandlisten]
Zpráva:čekání na připojení na portu 27017
Nejdůležitější částí této chyby je část zprávy. Ve většině případů můžete chybu zjistit pohledem na toto pole. Někdy, pokud vám zpráva není jasná, můžete přejít na součást. Pro tuto zprávu je hodnota komponenty Network, což znamená, že zpráva protokolu souvisí s problémem sítě.
Pokud nejste schopni chybu vyřešit, můžete zkontrolovat závažnost zprávy protokolu, která říká, že tato zpráva je informativní. Dále si také můžete prohlédnout další části zprávy protokolu, jako je časové razítko nebo kontext, abyste našli úplnou hlavní příčinu.
Dekódování běžných chybových zpráv
-
Zpráva:
2018-05-10T21:19:46.942 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
Rozlišení: Vytvořte administrátora v ověřovací databázi
-
Zpráva:
2018-05-10T21:19:46.942 E COMMAND [initandlisten] ** ERROR: getMore command failed. Cursor not found
Rozlišení: Odstraňte časový limit z kurzoru nebo zvyšte velikost dávky kurzoru.
-
Zpráva:
2018-05-10T21:19:46.942 E INDEX [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }
Rozlišení: Porušení omezení jedinečného klíče. Zkuste vložit dokument s jiným klíčem.
-
Zpráva:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR:Timed out connecting to localhost:27017.
Rozlišení: Latence mezi ovladačem a serverem je příliš velká, ovladač to může vzdát. Nastavení můžete změnit přidáním možnosti connectionTimeout do připojovacího řetězce.
-
Zpráva:
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 }
Rozlišení: Odstraňte duplikaci hodnoty pole _id z konfliktních dokumentů.
-
Zpráva:
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
Rozlišení: Buď server neběží na portu 27017, nebo zkuste server restartovat se správným hostitelem a portem.
Nástroje pro správu protokolů
MongoDB 3.0 aktualizoval své funkce protokolování, aby poskytoval lepší přehled o všech databázových aktivitách. Na trhu je k dispozici mnoho nástrojů pro správu protokolů, jako je MongoDB Ops Manager, položky protokolu, mtools atd.
Závěr
Protokolování je pro dobrou a správnou správu databáze stejně důležité jako replikace nebo sdílení. Pro lepší správu databáze by člověk měl být schopen snadno dekódovat protokoly, aby bylo možné rychle opravit výjimky/chyby. Doufám, že po přečtení tohoto návodu se budete při analýze složitých protokolů MongoDB cítit pohodlněji.