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:
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:
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:
Recomendados pelo LinkedIn
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).
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.