Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Monitoramento para MongoDB

Nesta página

  • Estratégias de monitoramento
  • Ferramentas de relatório do MongoDB
  • Registro de processos
  • Diagnosticando problemas de desempenho
  • Replicação e monitoramento
  • Fragmentação e monitoramento
  • Watchdog do nó de armazenamento

O monitoramento é um componente essencial de toda a administração do banco de dados. Uma compreensão firme dos relatórios do MongoDB permitirá que você avalie o estado do seu banco de dados e mantenha sua implantação sem crises. Além disso, uma noção dos parâmetros operacionais normais do MongoDB permitirá que você diagnostique problemas antes que eles escalem para falhas.

Este documento apresenta uma visão geral dos utilitários de monitoramento disponíveis e das estatísticas de relatórios disponíveis no MongoDB. Ele também apresenta estratégias de diagnóstico e sugestões para monitorar conjunto de réplicas e clusters fragmentados.

O MongoDB fornece vários métodos para coletar dados sobre o estado de uma instância MongoDB em execução:

  • O MongoDB distribui um conjunto de utilitários que fornece relatórios em tempo real de atividades do banco de dados.

  • O MongoDB fornece vários comandos do banco de dados que retornam estatísticas sobre o estado atual do banco de dados com maior fidelidade.

  • O MongoDB Atlas é um banco de dados como serviço hospedado na cloud para executar, monitorar e manter as implantações do MongoDB.

  • O MongoDB Cloud Manager é um serviço hospedado que monitora a execução de MongoDB deployments para coletar dados e fornecer visualização e alertas com base nesses dados.

  • O MongoDB Ops Manager é uma solução local disponível no MongoDB Enterprise Advanced que monitora a execução de implementações do MongoDB para coletar dados e fornecer visualização e alertas com base nesses dados.

Cada estratégia pode ajudar a responder a diferentes questões e é útil em diferentes contextos. Esses métodos são complementares.

Esta seção fornece uma visão geral dos métodos de relatório distribuídos com MongoDB. Ela também oferece exemplos dos tipos de perguntas que cada método é mais adequado para ajudar você a responder.

A distribuição do MongoDB inclui vários utilitários que retornam rapidamente estatísticas sobre o desempenho e a atividade das instâncias. Normalmente, eles são mais úteis para diagnosticar problemas e avaliar a operação normal.

mongostat captura e retorna os números de operações de banco de dados por tipo (por exemplo, inserir, consultar, atualizar, excluir, etc.). Esses números informam sobre a distribuição de carga no servidor.

Use mongostat para entender a distribuição dos tipos de operação e para informar o planejamento de capacidade. Consulte a página de referência mongostat para detalhes.

mongotop rastreia e informa a atividade atual de leitura e escrita de uma instância do MongoDB e informa essas estatísticas por collection.

Use mongotop para verificar se a atividade e o uso do banco de dados correspondem às suas expectativas. Consulte a página de referência mongotop para detalhes.

Alterado na versão 3,6: MongoDB 3,6 remove a interface HTTP preterida e API REST para MongoDB.

O MongoDB inclui vários comandos que relatam o estado do banco de dados.

Esses dados podem fornecer um nível mais preciso de granularidade do que os utilitários discutidos acima. Considere usar sua saída em scripts e programas para desenvolver alertas personalizados ou modificar o comportamento de seu aplicativo em resposta à atividade de sua instância. O métododb.currentOp() é outra ferramenta útil para identificar as operações em andamento da instância do banco de dados.

O comando serverStatus ou db.serverStatus() do shell, retorna uma visão geral do status do banco de dados, detalhando o uso do disco, o uso da memória, a conexão, o registro no diário e o acesso ao índice. O comando retorna rapidamente e não afeta o desempenho do MongoDB.

serverStatus gera uma conta do estado de uma instância MongoDB. Esse comando raramente é executado diretamente. Na maioria dos casos, os dados são mais significativos quando agregados, como se veria com ferramentas de monitoramento, incluindo o MongoDB Cloud Manager e o Ops Manager. No entanto, todos os administradores devem estar familiarizados com os dados fornecidos pelo serverStatus.

O comando dbStats ou db.stats() do shell retorna um documento que aborda o uso de armazenamento e volumes de dados. O dbStats reflete a quantidade de armazenamento usada, a quantidade de dados contidos no banco de dados e os contadores de objetos, collections e índices.

Use esses dados para monitorar o estado e a capacidade de armazenamento de um banco de dados específico. Essa saída também permite comparar o uso entre bancos de dados e determinar o tamanho médio do documento em um banco de dados.

O collStats ou db.collection.stats() do shell que fornece estatísticas semelhantes a dbStats no nível da collection, incluindo uma contagem dos objetos na collection, o tamanho da collection, a quantidade de espaço em disco usada pela collection e informações sobre seus índices.

O comando replSetGetStatus (rs.status() da shell) retorna uma visão geral do status do seu conjunto de réplica. O documento replSetGetStatus detalha o estado e a configuração do conjunto de réplica e estatísticas sobre seus membros.

Use esses dados para garantir que a replicação esteja configurada corretamente e para verificar as conexões entre o host atual e os outros membros do conjunto de réplicas.

Essas são ferramentas de monitoramento fornecidas como um serviço hospedado, geralmente por meio de uma assinatura paga.

Nome
Notas

MongoDB Cloud Manager

O MongoDB Cloud Manager é um conjunto de serviços baseado na nuvem para gerenciar implementações MongoDB. O MongoDB Cloud Manager oferece funcionalidade de monitoramento, backup e automação. Para obter uma solução on-premise, consulte também Gerente de Operações, disponível no MongoDB Enterprise Advanced.
VividCortex fornece insights profundos sobre o volume de trabalho do banco de dados de produção MongoDB e o desempenho de queries -- em resolução de um segundo. Acompanhe a latência, a taxa de transferência, os erros e muito mais para garantir a escalabilidade e o desempenho excepcional do seu aplicativo no MongoDB.
Vários plugins, incluindo MongoDB Monitoring, Queries lentas do MongoDB , e monitoramento do conjunto de réplicas do MongoDB .
Painel do MongoDB, alertas específicos do MongoDB, cronograma de failover de replicação e aplicativos móveis para iPhone, iPad e Android.
A IBM tem uma oferta SaaS de gerenciamento de desempenho de aplicativos que inclui monitor para MongoDB e outros aplicativos e middleware.
A New Relic oferece suporte completo para gerenciamento de desempenho de aplicativos. Além disso, os plug-ins e insights do New Relic permitem visualizar métricas de monitoramento do Cloud Manager no New Relic.
Monitoramento de infraestrutura para visualizar o desempenho dos seus sistemas do MongoDB.
Monitoramento, detecção de anomalias e alertas O SPM monitora todas as principais métricas do MongoDB juntamente com a infraestrutura, incluindo Docker e outras métricas de aplicativos, por exemplo, Node.js, Java, NGINX, Apache, HAProxy ou Elasticsearch. O SPM fornece correlação de métricas e logs.
O Pandora FMS fornece o PandoraFMS-mongodb-monitoring plugin para monitorar MongoDB.

Durante a operação normal, as instâncias do mongod e mongos relatam uma conta ativa de todas as atividades e operações do servidor para saída padrão ou um arquivo de log. As seguintes configurações de tempo de execução controlam estas opções.

  • quiet. Limita a quantidade de informações gravadas no registro ou saída.

  • verbosity. Aumenta a quantidade de informações gravadas no registro ou saída. Você também pode modificar a verbosidade do registro durante o tempo de execução com o parâmetro logLevel ou o método db.setLogLevel() no shell.

  • path. Permite o registro em um arquivo, em vez de na saída padrão. Você deve especificar o caminho completo para o arquivo de registro ao ajustar esta configuração.

  • logAppend. Adiciona informações a um arquivo de registro em vez de sobrescrevê-lo.

Observação

Você pode especificar estas operações de configuração como argumentos da linha de comando para mongod ou mongos

Por exemplo:

mongod -v --logpath /var/log/mongodb/server1.log --logappend

Inicia uma instância mongod no modo verbose , anexando dados ao arquivo de log em /var/log/mongodb/server1.log/.

Os seguintes comandos do banco de dados também afetam o registro:

Disponível apenas no MongoDB Enterprise

Um mongod ou mongos em execução com redactClientLogData elimina qualquer mensagem que acompanhe um determinado evento de registro antes do registro, deixando apenas metadados, arquivos de origem ou números de linha relacionados ao evento. redactClientLogData impede a entrada de informações sensíveis no registro do sistema, mas reduz a quantidade de detalhes disponíveis para diagnóstico.

Por exemplo, a operação a seguir insere um documento em um mongod em execução sem redação de registro. O mongod tem o nível de verbosidade do registro definido como 1:

db.clients.insertOne( { "name" : "Joe", "PII" : "Sensitive Information" } )

Esta operação produz o seguinte evento de registro:

2017-06-09T13:35:23.446-04:00 I COMMAND [conn1] command internal.clients
appName: "MongoDB Shell"
command: insert {
insert: "clients",
documents: [ {
_id: ObjectId('593adc5b99001b7d119d0c97'),
name: "Joe",
PII: " Sensitive Information"
} ],
ordered: true
}
...

Quando mongod é executado com redactClientLogData e executa a mesma operação de inserção, ele produz o seguinte evento de registro:

2017-06-09T13:45:18.599-04:00 I COMMAND [conn1] command internal.clients
appName: "MongoDB Shell"
command: insert {
insert: "###", documents: [ {
_id: "###", name: "###", PII: "###"
} ],
ordered: "###"
}

Use redactClientLogData em conjunto com Encryption at Rest e TLS/SSL (criptografia de transporte) para auxiliar a conformidade com os requisitos normativos.

Conforme você vai desenvolvendo e operando aplicativos com o MongoDB, talvez precise analisar o desempenho do banco de dados como o aplicativo. O artigo desempenho do MongoDB menciona alguns dos fatores operacionais que podem influenciar o desempenho.

Além dos requisitos básicos de monitoramento para qualquer instância do MongoDB, para conjuntos de réplicas, os administradores devem monitorar o atraso de replicação. "Atraso de replicação" refere-se à quantidade de tempo que leva para copiar (ou seja, replicar) uma operação de gravação do primário para o secundário. Um pequeno período de atraso pode ser aceitável, mas problemas significativos surgem à medida que o atraso de replicação aumenta, incluindo:

  • Pressão crescente do cache no primário.

  • As operações que ocorreram durante o período de atraso não são replicadas para um ou mais secundários. Se você estiver usando a replicação para garantir a persistência dos dados, atrasos excepcionalmente longos podem afetar a integridade do seu conjunto de dados.

  • Se o atraso de replicação exceder o comprimento do registro de operação (oplog), o MongoDB terá que executar uma sincronização inicial no secundário, copiando todos os dados do primário e reconstruindo todos os índices. [1] Isso é incomum em circunstâncias normais, mas se você configurar o oplog para ser menor que o padrão, o problema pode surgir.

    Observação

    O tamanho do oplog só pode ser configurado durante a primeira execução usando o argumento --oplogSize do comando mongod ou, de preferência, a configuração oplogSizeMB no arquivo de configuração do MongoDB. Se você não especificar isto na linha de comando antes de executar com a opção --replSet, o mongod criará um oplog de tamanho padrão.

    Por padrão, o registro é de 5% do espaço total em disco disponível em sistemas de 64 bits. Para obter mais informações sobre como alterar o tamanho do registro, consulte Alterar o tamanho do registro.

A partir do MongoDB 4.2, os administradores podem limitar a taxa na qual o primário aplica suas gravações com o objetivo de manter o atraso abaixo de um valor máximo majority committed configurável flowControlTargetLagSeconds.

Por padrão, o controle de fluxo é enabled.

Observação

Para que o controle de fluxo seja ativado, o conjunto de réplicas/cluster fragmentado deve ter: featureCompatibilityVersion (fCV) de 4.2 e preocupação de leitura majority enabled. Ou seja, o controle de fluxo ativado não terá efeito se fCV não for 4.2 ou se a maioria das preocupações de leitura estiver desativada.

Veja também: Verifique o atraso de replicação.

Os problemas de replicação geralmente são o resultado de problemas de conectividade de rede entre os membros ou o resultado de um primário que não tem os recursos para oferecer suporte ao tráfego de aplicativos e replicação. Para verificar o status de uma réplica, utilize o replSetGetStatus ou o seguinte auxiliar na shell:

rs.status()

A referência replSetGetStatus fornece uma visão geral mais detalhada dessa saída. Em geral, observe o valor de optimeDate e preste atenção especial à diferença de tempo entre os membros primários e secundários.

[1] O oplog pode ultrapassar seu limite de tamanho configurado para evitar a exclusão do majority commit point.

A partir da versão 4.2, membros secundários de um conjunto de réplicas podem extrapolar o limite de tempo para registrar entradas de oplog a serem aplicadas. Essas mensagens de atraso no oplog:

  • São registradas para os secundários no diagnostic log.

  • São registradas sob o componente REPL com o texto applied op: <oplog entry> took <num>ms.

  • Não dependem dos níveis de registro (seja no nível do sistema ou do componente)

  • Não dependem do nível de perfil.

  • São afetados por slowOpSampleRate.

O perfilador não captura entradas de oplog lentas.

Na maioria dos casos, os componentes dos clusters sharded se beneficiam do mesmo monitoramento e análise que todas as outras instâncias do MongoDB. Além disso, os clusters exigem monitoramento adicional para garantir que os dados sejam efetivamente distribuídos entre os nós e que as operações de fragmentação estejam funcionando adequadamente.

Dica

Veja também:

Consulte a documentação de fragmentação para obter mais informações.

O banco de dados de configuração mantém um mapa identificando quais documentos estão em quais fragmentos. O cluster atualiza esse mapa à medida que os blocos se movem entre os fragmentos. Quando um servidor de configuração se torna inacessível, determinadas operações de fragmentação ficam indisponíveis, como mover partes e iniciar mongos instâncias. No entanto, os clusters permanecem acessíveis a partir de instâncias mongos já em execução.

Como os servidores de configuração inacessíveis podem afetar seriamente a disponibilidade de um cluster fragmentado, você deve monitorar seus servidores de configuração para garantir que o cluster permaneça bem equilibrado e que as instâncias do mongos possam reiniciar.

O MongoDB Cloud Manager e o Ops Manager monitoram os servidores de configuração e podem criar notificações se um servidor de configuração se tornar inacessível. Consulte a documentação do MongoDB Cloud Manager e a documentação do Ops Manager para obter mais informações.

Os sistemas de clusters fragmentados mais eficazes equilibram uniformemente os chunks entre os fragmentos. Para facilitar isso, o MongoDB tem um processo de balancer em background que distribui dados para garantir que os chunks sejam sempre distribuídos de forma ideal entre os shards.

Emita o comando db.printShardingStatus() ou sh.status() para o mongos de dentro do mongosh. Essa ação retorna uma visão geral de todo o cluster, incluindo o nome do banco de dados e uma lista dos chunks.

Para verificar o status de trava do banco de dados, conecte-se a uma instância do mongos utilizando o mongosh. Emita a seguinte sequência de comandos para alternar para o banco de dados config e exibir todas as travas pendentes no banco de dados de shard:

use config
db.locks.find()

O processo de balanceamento usa uma trava especial de "balancer" que impede que outras atividades de balanceamento ocorram. No banco de dados do config, utilize o seguinte comando para visualizar a trava do "balancer".

db.locks.find( { _id : "balancer" } )

Alteração na versão 3.4: a partir da versão 3.4, o primary do servidor de configuração do CSRS mantém a trava do "balancer", usando um ID de processo chamado "ConfigServer". Essa trava nunca é liberada. Para determinar se o balancer está em execução, consulte Verificar se o balancer está em execução.

Observação

  • A partir do MongoDB 4.2, o Storage Node Watchdog está disponível nas edições Community e MongoDB Enterprise.

  • Em versões anteriores (3.2.16+, 3.4.7+, 3.6.0+, 4.0.0+), o Storage Node Watchdog só está disponível na edição MongoDB Enterprise.

O Storage Node Watchdog monitora os seguintes diretórios MongoDB para detectar a falta de resposta do sistema de arquivos:

Observação

A partir do MongoDB 6.1, os registros no diário estão sempre habilitados. Consequentemente, o MongoDB remove a opção storage.journal.enabled e as opções de linha de comando --journal e --nojournal correspondentes.

Por padrão, o Storage Node Watchdog está desabilitado. Só é possível ativar o Watchdog do nó de armazenamento em um mongod no momento da inicialização definindo o parâmetro watchdogPeriodSeconds como um número inteiro maior ou igual a 60. No entanto, uma vez ativado, você pode pausar o Node Watchdog de armazenamento e reiniciar durante o tempo de execução. Consulte o parâmetro watchdogPeriodSeconds para obter os detalhes.

Se algum dos sistemas de arquivos contendo os diretórios monitorados deixar de responder, o Storage Node Watchdog encerrará o mongod e sairá com um código de status 61. Se o mongod for o principal de um conjunto de réplicas, o encerramento iniciará um failover, permitindo que outro membro se torne primário.

Após o término de um mongod, talvez não seja possível reiniciá-lo de forma limpa na mesma máquina.

Observação

Symlinks

Se algum de seus diretórios monitorados for um symlink para outros volumes, o Storage Node Watchdog não monitorará o destino do symlink.

Por exemplo, se o mongod usa storage.directoryPerDB: true (ou --directoryperdb) e vincula um diretório de banco de dados a outro volume, o Storage Node Watchdog não segue o link simbólico para monitorar o destino.

O tempo máximo que o Watchdog do nó de armazenamento pode levar para detectar um sistema de arquivos sem resposta e encerrar é quase duas vezes o valor de watchdogPeriodSeconds.

← Recuperar um standalone após desligamento inesperado