Monitorar uma implantação autogerenciada do MongoDB
Nesta página
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.
Estratégias de monitoramento
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.
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 implantações MongoDB 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 implantaçõ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.
Ferramentas de relatório do MongoDB
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.
Serviços públicos
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
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 informar o planejamento de capacidade. Consulte a página de referência mongostat
para obter os detalhes.
mongotop
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 o 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 obter os detalhes.
Comandos
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.
serverStatus
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 conhecer os dados fornecidos pelo serverStatus
.
dbStats
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.
collStats
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.
replSetGetStatus
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éplicas 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.
Ferramentas de monitoramento hospedado (SaaS)
Essas são ferramentas de monitoramento fornecidas como um serviço hospedado, geralmente por meio de uma assinatura paga.
Nome | Notas |
---|---|
O MongoDB Cloud Manager é um conjunto de serviços baseado na nuvem para gerenciar implantaçõ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. | |
O VividCortex fornece insights profundos sobre a carga 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. | |
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 de suas implantações do MongoDB. | |
Monitoramento, detecção de anomalias e alertas O SPM monitora todas as principais métricas do MongoDB, juntamente com a infraestrutura, inclusive 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 plugin PandoraFMS-mongodb-monitoring para monitorar o MongoDB. |
Registro de processos
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âmetrologLevel
ou o métododb.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
Os seguintes comandos do banco de dados também afetam o registro:
getLog
. Exibe as mensagens recentes do registro do processomongod
.logRotate
. Gira os arquivos de log somente para processos domongod
. Consulte Girar arquivos de log.
Supressão de registros
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:
{ "t": { "$date": "2024-07-19T15:36:55.024-07:00" }, "s": "I", "c": "COMMAND", ... "attr": { "type": "command", ... "appName": "mongosh 2.2.10", "command": { "insert": "clients", "documents": [ { "name": "Joe", "PII": "Sensitive Information", "_id": { "$oid": "669aea8792c7fd822d3e1d8c" } } ], "ordered": true, ... } ... } }
Quando mongod
é executado com redactClientLogData
e executa a mesma operação de inserção, ele produz o seguinte evento de registro:
{ "t": { "$date": "2024-07-19T15:36:55.024-07:00" }, "s": "I", "c": "COMMAND", ... "attr": { "type": "command", ... "appName": "mongosh 2.2.10", "command": { "insert": "###", "documents": [ { "name": "###", "PII": "###", "_id": "###" } ], "ordered": "###", ... } ... } }
Use redactClientLogData
em conjunto com Encryption at Rest e TLS/SSL (criptografia de transporte) para auxiliar a conformidade com os requisitos normativos.
Diagnosticando problemas de desempenho
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.
Replicação e monitoramento
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 comandomongod
ou, de preferência, a configuraçãooplogSizeMB
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
, omongod
criará um oplog de tamanho padrão.Por padrão, o oplog é de 5 por cento do espaço total em disco disponível em sistemas de 64bits. Para obter mais informações sobre como alterar o tamanho do oplog, consulte Alterar o tamanho do oplog de membros do conjunto de réplicas autogerenciado.
Controle de fluxo
Os administradores podem limitar a taxa na qual o primário aplica suas gravações com o objetivo de manter o atraso majority
committed
abaixo de um valor máximo 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.
Status do conjunto de réplica
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 . |
Aplicação lenta de entradas Oplog
Os membros secundários de um conjunto de réplicas agora registram entradas de oplog que demoram mais do que o limite de operação lenta para 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 textoapplied 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.
Fragmentação e monitoramento
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.
Servidores de configuração
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 ficar inacessível. Consulte a documentação do MongoDB Cloud Manager e a documentação do Ops Manager para obter mais informações.
Balanceamento e distribuição de chunks
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 partes.
Travas antigas
Para verificar o status de bloqueio do banco de dados, conecte-se a uma instância do mongos
usando 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 do fragmento:
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" } )
O primário do servidor de configuração CSRS mantém o bloqueio "balanceador", usando um ID de processo chamado "ConfigServer". Esse bloqueio nunca é liberado. Para determinar se o balanceador está em execução, consulte Verificar se o balanceador está em execução.
Watchdog do nó de armazenamento
Observação
O Storage Node Watchdog está disponível nas edições Community e MongoDB Enterprise.
O Storage Node Watchdog monitora os seguintes diretórios MongoDB para detectar a falta de resposta do sistema de arquivos:
O diretório
--dbpath
O diretório
journal
dentro do diretório--dbpath
O diretório do arquivo
--logpath
O diretório do arquivo
--auditPath
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
.