Às vezes, decodificar os logs de erros do MongoDB pode ser complicado e consumir grandes partes do seu valioso tempo. Neste artigo, aprenderemos como examinar os logs de erros do MongoDB dissecando cada parte das mensagens de log.
Formato comum para linhas de log do MongoDB
Aqui está o padrão de linha de log para a versão 3.0 e superior...
<timestamp> <severity> <component> [<context>] <message>
Padrão de linha de log para versões anteriores do MongoDB incluído apenas:
<timestamp> [<context>] <message>
Vejamos cada etiqueta.
Carimbos de data e hora
O campo Timestamp da mensagem de log armazena a hora exata em que uma mensagem de log foi inserida no arquivo de log. Existem 4 tipos de timestamps suportados pelo MongoDB. O formato padrão é:iso8601-local. Você pode alterá-lo usando o parâmetro --timeStampFormat.
Nome do formato do carimbo de data/hora | Exemplo |
---|---|
iso8601-local | 1969-12-31T19:00:00.000+0500 |
iso8601-utc | 1970-01-01T00:00:00.000Z |
ctime | Qua, 31 de dezembro 19:00:00.000 |
ctime-no-ms | Quarta, 31 de dezembro 19:00:00 |
Gravidade
A tabela a seguir descreve o significado de todos os níveis de gravidade possíveis.
Nível de gravidade | Descrição |
---|---|
F | Fatal- O erro do banco de dados fez com que o banco de dados não estivesse mais acessível |
E | Erro - Erros de banco de dados que interromperão a execução do banco de dados. |
W | Aviso - Mensagens do banco de dados que explicam o comportamento potencialmente prejudicial do banco de dados. |
Eu | Informativo - Mensagens apenas para fins informativos, como "Uma nova conexão aceita". |
D | Depurar - Útil principalmente para depurar os erros do banco de dados |
Componente
Após a versão 3.0, as mensagens de log agora incluem “componente” para fornecer uma categorização funcional das mensagens. Isso permite que você reduza facilmente sua pesquisa observando os componentes específicos.
Componente | Descrição do erro |
---|---|
Acesso | Relacionado ao controle de acesso |
Comando | Relacionado a comandos de banco de dados |
Controle | Relacionado a atividades de controle |
FTDC | Relacionado às atividades de coleta de dados de diagnóstico |
Geográfico | Relacionado à análise de formas geoespaciais |
Índice | Relacionado a operações de indexação |
Rede | Relacionado a atividades de rede |
Consulta | Relacionado a consultas |
REPL. | Relacionado a conjuntos de réplicas |
REPL_HB | Relacionado a pulsações de conjuntos de réplicas |
Reversão | Relacionado a operações de banco de dados de reversão |
Fragmentação | Relacionado à fragmentação |
Armazenamento | Relacionado a atividades de armazenamento |
Diário | Relacionado às atividades do diário |
Escrever | Relacionado a operações de gravação de banco de dados |
Contexto
A parte de contexto da mensagem de erro geralmente contém o thread ou o ID de conexão. Outros valores podem ser initandlisten. Esta parte é cercada por colchetes. As mensagens de log de qualquer nova conexão com o MongoDB terão valor de contexto como initandlisten, para todas as outras mensagens de log, será o ID do thread ou o ID da conexão. Por exemplo
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)
Mensagem
Contém a mensagem de log real.
Local do arquivo de log
A localização padrão no servidor é:/var/log/mongodb/mongodb.log
Se o arquivo de log não estiver presente neste local, você poderá verificar o arquivo de configuração do MongoDB. Você pode encontrar o arquivo de configuração do MongoDB em qualquer um desses dois locais.
/etc/mongod.conf or /yourMongoDBpath/mongod.conf
Depois de abrir o arquivo de configuração, procure a opção logpath nele. A opção logpath informa ao MongoDB onde registrar todas as mensagens.
Analisando uma mensagem de log simples
Aqui está um exemplo de uma mensagem de erro típica do 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
Gravidade:I
Componente:REDE
Contexto:[initandlisten]
Mensagem:aguardando conexões na porta 27017
A parte mais importante desse erro é a parte da mensagem. Na maioria dos casos, você pode descobrir o erro observando este campo. Às vezes, se a mensagem não estiver clara para você, você poderá optar pela parte componente. Para esta mensagem, o valor do Componente é Rede, o que significa que a mensagem de log está relacionada a um problema de rede.
Se você não conseguir resolver seu erro, verifique a gravidade da mensagem de log que diz que esta mensagem é para fins informativos. Além disso, você também pode verificar outras partes da mensagem de log, como carimbo de data/hora ou contexto, para encontrar a causa raiz completa.
Decodificando mensagens de log de erros comuns
-
Mensagem:
2018-05-10T21:19:46.942 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
Resolução: Criar usuário administrador no banco de dados de autenticação
-
Mensagem:
2018-05-10T21:19:46.942 E COMMAND [initandlisten] ** ERROR: getMore command failed. Cursor not found
Resolução: Remova o tempo limite do cursor ou aumente o tamanho do lote do cursor.
-
Mensagem:
2018-05-10T21:19:46.942 E INDEX [initandlisten] ** ERROR:E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }
Resolução: Violação de restrição de chave exclusiva. Tente inserir documento com chave diferente.
-
Mensagem:
2018-05-10T21:19:46.942 E NETWORK [initandlisten] ** ERROR:Timed out connecting to localhost:27017.
Resolução: A latência entre o driver e o servidor é muito grande, o driver pode desistir. Você pode alterar a configuração adicionando a opção connectionTimeout na cadeia de conexão.
-
Mensagem:
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 }
Resolução: Remova a duplicação do valor do campo _id de documentos conflitantes.
-
Mensagem:
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
Resolução: O servidor não está sendo executado na porta 27017 ou tente reiniciar o servidor com o host e a porta corretos.
Ferramentas de gerenciamento de log
O MongoDB 3.0 atualizou seus recursos de log para fornecer melhores insights para todas as atividades do banco de dados. Existem muitas ferramentas de gerenciamento de log disponíveis no mercado, como MongoDB Ops Manager, entradas de log, mtools etc.
Conclusão
O registro em log é tão importante quanto a replicação ou fragmentação para um bom e adequado gerenciamento de banco de dados. Para um melhor gerenciamento de banco de dados, deve-se decodificar os logs facilmente para corrigir as exceções/erros rapidamente. Espero que depois de ler este tutorial, você se sinta mais confortável ao analisar logs complexos do MongoDB.