M Sizer Report Viewer — visualizando relatório de sizing de MongoDB

Faz um tempo, junto com o time de SRE com quem trabalho, a gente vinha buscando formas de otimizar nossas infraestruturas de MongoDB. Depois de algumas reuniões, o pessoal do Atlas sugeriu que rodássemos um script de sizing para coletar as estatísticas dos clusters. O script ajudou bastante: deu para fazer um levantamento sério do estado dos clusters e, a partir dele, realizar otimizações de verdade.

Só que tinha um incômodo. O script gera um JSON enorme, e a gente não tinha uma ferramenta para visualizar aqueles dados de forma objetiva e fácil, sem depender da ferramenta proprietária do Mongo. Então, fora do horário de trabalho, comecei a montar um visualizador para facilitar a análise. Depois de algumas horas, e com a ajuda de alguns agentes de IA, consegui estruturar uma visualização decente para aquele relatório. É o M Sizer Report Viewer.

Tem uma demo no ar e o código está no GitHub. O fluxo é direto: você roda o script no cluster com o mongosh, salva a saída num arquivo e depois carrega esse JSON no viewer (ou cola direto) para ver a análise com as recomendações.

O viewer organiza o relatório em algumas frentes. Saúde do cluster e replicação (capacidade e janela de retenção do oplog), para bater o olho e ver se está tudo em ordem. Cache do WiredTiger, onde costuma morar o problema de memória, com eficiência de cache, pressão de eviction e uso de memória; e o pool de conexões, com taxa de utilização e de rejeição. Slow queries e profiler, incluindo os COLLSCAN (varredura de coleção inteira, o clássico sintoma de índice faltando), detecção de operação lenta e a configuração do profiler por banco. Índices, com utilização, razão índice/dados e detecção de índice que ninguém usa, que é peso morto na escrita. Storage, com eficiência de compressão. E uma parte de segurança, olhando TLS, autenticação e read/write concern. A interface tem tema claro e escuro.

Um ponto que para mim faz diferença: é um site estático, sem backend. Você abre o JSON direto no navegador, então o dado não sai da sua máquina, o que importa quando o relatório carrega detalhe de um cluster de produção. Por baixo é React com TypeScript, Vite para o build e Tailwind para o estilo.

Vale deixar claro de onde isso vem. O script de coleta descende do getMongoData das Support Tools oficiais do MongoDB. Para chegar na versão getMongoSizingData.js deste repo, usei como referência o msizer do alek-mdb e um gist do TravWill-Mongo. Em cima dessas referências, estendi o script com mais métricas — análise de slow queries e do profiler — e construí o viewer. Estou tornando tudo isso público para quem estiver num trabalho de observabilidade e otimização de MongoDB poder usar para entender e ajustar melhor os próprios bancos.

A ideia não é substituir quem entende de sizing, é encurtar o caminho até a leitura: tirar o relatório do JSON cru e botar num formato em que dá para enxergar o cluster de uma vez.

← todos os posts