Um DBA, seja ele responsável por um banco de dados relacional ou não, deve ser capaz de identificar possíveis erros, melhorias e soluções por meio de métricas e mensagens no banco de dados em que está trabalhando. Essa análise pode ser conduzida de várias maneiras. Por exemplo, no caso do MongoDB, é possível baixar logs de eventos que abrangem desde conexões de entrada até os comandos executados e os problemas encontrados. Essas mensagens possibilitam o diagnóstico de problemas, o monitoramento da implementação do banco de dados e a otimização do desempenho.
Neste artigo, vou trazer ferramentas que auxiliam nesse processo de análise de logs. Seja esta ferramenta própria do MongoDB, ou não.
Log Messages
A partir do MongoDB 4.4, todas as mensagens de log são geradas no formato JSON. Elas são registradas como uma série de pares de valores-chave, em que cada chave representa um tipo de campo de mensagens de log, como "gravidade", e cada valor correspondente registra as informações de log associadas a esse tipo de campo, por exemplo, "informativo".
A seguir está um exemplo de mensagens de log no formato JSON, conforme apareceria no arquivo de log do MongoDB:
{"t":{"$date":"2020-05-01T15:16:17.180+00:00"},"s":"I", "c":"NETWORK", "id":12345, "ctx":"listener", "msg":"Listening on","attr":{"address":"127.0.0.1"}}
As entradas de log JSON podem ser escritas de maneiras mais legíveis. Aqui está a mesma entrada de log bem impressa:
Abaixo, o que significa cada chave:
{
"t": <Datetime>, Data e Hora // timestamp
"s": <String>, Severidade // severity
"c": <String>, Componente // component
"id": <Integer>, Identificador Único // unique identifier
"ctx": <String>, Contexto // context
"msg": <String>, Corpo da mensagem // message body
"attr": <Object> Atributos adicionais// additional attributes (optional)
"tags": <Array of strings> Matriz de strings// tags (optional)
"truncated": <Object> Objeto // truncation info (if truncated)
"size": <Object> Objeto // original size of entry (if truncated)
}
Com esses arquivos de logs, é possível analisar seus pontos de melhoria, criar soluções e fazer sugestões ao cliente por meio de ferramentas de análise. Uma das ferramentas disponíveis para esse fim é a Mtools.
Mtools – o kit detetive oficial
Trata-se de um conjunto de linhas de comando de acesso público, embora não seja oficialmente suportado pela MongoDB Inc. Este conjunto compreende ferramentas e scripts desenvolvidos e mantidos pelos engenheiros da MongoDB para auxiliar os DBAs na análise e depuração de problemas que possam surgir em implantações do MongoDB.
Um dos aspectos mais importantes e que deve ser considerado ao utilizar o Mtools para suas análises é a versão do mongodb que você está usando, isso porque, a partir da versão 4.4 o mongoDB não oferece mais suporte, portanto, você conseguirá utilizar arquivos de logs de versões que sejam até 4.4.
O pacote está disponível por meio de ferramentas comuns de gerenciamento de pacotes Python, como pip e Easy install.
Do que é formado o MTOOLS?
Em sua versão atual 1.7.2 consiste em 5 scripts individuais: mloginfo, mlogfilter, mplotqueries, mlogvis e Mlaunch.
· Mloginfo: É o que utilizamos para a primeira parada na análise do arquivo de log. Esse script analisa o arquivo e gera informações gerais sobre o conteúdo. Algo legal dentro do mloginfo é o acréscimo de seções de informações adicionais: “consultas”, “conexões”, “reinicialização” e “distintas”.
Mlogfilter: Ajuda a estringir a pesquisa em arquivos de log, permitindo filtras atributos de mensagens de log, como nomes, tipos de operação, ou conexão. Assim, pode também procurar operações lentas definindo um limite, identificando varreduras de coleção. A principal propriedade do mlogfilter é que o formato de saída sempre permanece o mesmo (linhas de log), então você pode canalizar a saída para outra instância do mlogfilter, para o comando grep ou para outros scripts como mplotqueries.
Mplotqueries: É uma ferramenta de visualização para arquivos de logs que passaram por filtro, ou não. Há uma série de opções para tipos de gráficos, como por exemplo, gráfico de dispersão (que mostram todas as operações ao longo do tempo versus sua duração), histogramas, gráficos de eventos e intervalos e outros gráficos mais especializados, como rotatividade de conexões ou alterações no conjunto de réplicas.
Mlogvis: Cria um arquivo HTML independente que mostra uma visualização interativa em um navegador da Web como uma alternativa para mplotqueries.
Mlaunch: Um script para acelerar implantações de teste em seu host local, incluindo réplica set e sharded cluster.
Mgenerate: Cria conjuntos de dados com dados aleatórios baseados em um modelo para testar e reproduzir problemas.
Perfeito, agora que você está familiarizado com os scripts do Mtools, vou explicar como utilizar essas ferramentas. É importante destacar novamente que a versão do MongoDB que você está utilizando para coletar seus logs deve ser até a versão 4.4.
Para começar, uma vez que os scripts são escritos em Python, é necessário ter o Python instalado em sua máquina. No diretório onde o Python está instalado, você pode executar o seguinte comando: `py -3.11 -m pip install mtools`.
A partir desse momento, você já pode manipular os logs com o mtools.
No exemplo abaixo, é inserindo a “seção” –queries
Este exemplo foi retirado de um artigo publicado pela MongoDB: "Cada linha (da esquerda para a direita) exibe o namespace, o padrão de consulta e várias estatísticas dessa combinação específica de namespace/padrão. As linhas são ordenadas pela coluna 'soma', em ordem decrescente. Classificar por 'soma' é uma maneira eficaz de identificar onde o banco de dados passou a maior parte do tempo em geral."
Hoje, o MongoDB está lançando a tão esperada versão 7.0. No entanto, a restrição de versão para o uso do Mtools tem afetado significativamente a produtividade dos DBAs ao realizar análises e revisões de seus bancos de dados.
Portanto, enquanto podemos aprofundar esse tópico e fornecer exemplos, também podemos questionar se existe outra ferramenta capaz de fornecer essas informações sem tantas limitações.
Em contrapartida ao Mtools, o MongoDB tem investido consideravelmente em sua plataforma em nuvem, o MongoDB
Atlas. Através do Atlas, temos acesso a outras ferramentas para análise de logs. A partir do plano cluster M10, já é possível fazer o download dos arquivos de log.
Nesse contexto, é importante entender as integrações disponíveis no Atlas. O MongoDB Atlas permite a integração com serviços de monitoramento de terceiros para receber alertas do Atlas e visualizar e analisar métricas de desempenho coletadas sobre seu cluster. Por meio do Atlas CLI, uma interface de linha de comando desenvolvida especificamente para o MongoDB Atlas, podemos fazer uso do Prometheus e Grafana para monitorar nossas implementações com eficácia.
Prometheus coleta métricas a partir de destinos configurados em intervalos determinados e pode acionar alertas quando observar condições específicas, com o Grafana podemos visualizar e ter uma análise interativa desses alertas.
Para visualizar configurações de integração de terceiros você ser Organization Owner ou Project Owner .
Agora, vamos abordar outra excelente ferramenta para as análises de Log, chamada Keyhole.
Keyhole
Uma ferramenta para explorar implantações do MongoDB, e você poderá analisar com logs JSON junto ao Maobi. Portanto, você faz o download dos logs do seu banco, e poderá analisar com o Keyhole.
Com Keyhole e Maobi instalados, você poderá:
Atente-se agora no recado que fica abaixo da tabela criada pelo Keyhole:
top 10 of 421 lines displayed; see HTML report for details.
bson log info written to ./out/mongod.2-log.bson.gz
TSV log info written to ./out/mongod.2.tsv
Agora, abrimos o Docker, e acessamos o localhost:3030, e com isso temos três tabelas importantes:
Summary: Traz o formato do arquivo, ao período que ele se refere, número de operações lentas, e de collscan, dentre mais algumas informações.
Slow Ops Patterns: Aqui, traz em um gráfico as operações mais utilizadas, e o determinado horário em que elas rodam.
Top 25 Slowest Ops: E por fim, as operações mais lentas, e com isso conseguimos fazer uma análise aprofundada sobre as necessidades que permeiam o nosso banco.
Independente da ferramenta que você utilize, ou dos recursos que encontre para otimizar seu tempo, esse artigo abrange diversos meios para contribuir com sua análise mais aprofundada do banco, podendo utilizar seja no ambiente de trabalho, quanto para um exercício de projeto pessoal. Nas referências, coloquei diversos links que podem agregar ao assunto, e que confesso, foi um pouco desafiador coletar.
Espero que esse artigo tenha sido de grande utilidade para você, DBA.
REFERÊNCIAS
Documentação Mtools: https://rueckstiess.github.io/mtools/index.html
Artigo técnico: https://www.mongodb.com/blog/post/introducing-mtools
Instalação do Pip: https://pip.pypa.io/en/stable/installation/
Repositório GitHub: https://github.com/rueckstiess/mtools
Repositório como instalar: https://github.com/rueckstiess/mtools/blob/master/INSTALL.md
Mtools WIKI: https://github.com/rueckstiess/mtools/wiki