Monitorando dados do Azure Cosmos DB utilizando diagnóstico customizados para API MongoDB

Que tal desenvolver softwares utilizando MongoDB mas em um ambiente totalmente gerenciado?

Sim, isso é possível graças ao Cosmos DB e sua API de software livre para MongoDB.

Atualmente ocupando o posto de Banco de Dados NoSQL com maior popularidade no mercado, é cada vez maior a quantidade de empresas que buscam no Azure Cosmos DB a solução para gerenciamento do serviço em Cloud, permitindo vantagens como alto desempenho, escalonamento, serviço distribuído e gerenciado, mas também um reaproveitamento de códigos através da adoção da API Mongo DB.

Este artigo é parte de uma série que vai tratar de assuntos relevantes sobre Azure Cosmos DB, que facilitem o dia-a-dia do desenvolvedor.

Para este momento separei algumas dicas práticas sobre monitoramento diagnóstico. Dito isso, vamos ao que interessa:

1) Comece garantindo que na sua conta de Cosmos DB esteja habilitada na opção de “Diagnostic Setting” a categoria “MongoRequests”, conforme contornado na figura abaixo:

Não foi fornecido texto alternativo para esta imagem

2) Ainda na sua conta do Cosmos DB, na opção de logs será possível observar uma interface com um painel lateral com abas, onde é possível encontrar a opção “Tables” que por sua vez exibirá a tabela “CDBMongoRequests” que vamos utilizar nesta análise, e ainda um painel para digitação e execução de consultas, conforme abaixo:

Não foi fornecido texto alternativo para esta imagem

 3) A partir de agora vamos utilizar o painel de consultas da figura acima para digitar nossos scripts e clicando no botão “Run” será possível executá-las para análise dos resultados. Para isso, separei algumas análises relevantes que podem ser feitas através dos scripts abaixo:

3.1) Como consultar as operações que demoram mais de 3 milissegundos para serem executadas:

CDBMongoRequests
| where toint(DurationMs) > 3 
| summarize count() by Address, TimeGenerated, DurationMs
| limit 10 
        

 * Observe acima que utilizei "limit" com valor igual a "10" para retornar apenas as 10 primeiras ocorrências, isso é uma boa prática, embora por padrão o recurso na execução já faça a paginação para cada 30.000 ocorrências.

3.2) Como consultar as operações de longa duração:

CDBMongoRequests
| project TimeGenerated , DurationMs 
| summarize count() by bin(TimeGenerated, 5s)
| render timechart
| limit 50         

* Aqui notamos a utilização de "render timechart", que após a execução fará a plotagem do resultado de maneira gráfica (aba Chart).

Não foi fornecido texto alternativo para esta imagem

 3.3) Como descobrir quais operações estão assumindo a maior parte de RU/s?

CDBMongoRequests
| where TimeGenerated >= ago(2h) 
| summarize max(ResponseLength), max(RequestLength), max(RequestCharge), count = count() by OperationName, UserAgent, DatabaseName, CollectionName, bin(TimeGenerated, 1h)
| limit 10         

 Conclusão: Existem inúmeras variações para geração de estatísticas com base na tabela "CDBMongoRequests", optamos aqui por apresentar os recursos e alguns exemplos possíveis. Utilizando este mesmo princípio, é possível gerar estatísticas com base em outras tabelas, e retornar situações tais como análise de chave de partição ou consumo de RU por chave de partição (e sim, podemos falar mais a respeito nos próximos artigos).

Espero que tenham gostado,

Wiliam Rosa.

Não foi fornecido texto alternativo para esta imagem

Entre para ver ou adicionar um comentário

Outras pessoas também visualizaram

Conferir tópicos