Visão geral
Neste guia, você pode aprender como configurar e configurar o monitoramento no Driver MongoDB C++ .
O monitoramento envolve a coleta de informações sobre as atividades de um programa em execução, que você pode usar com uma biblioteca de gerenciamento de desempenho de aplicação .
Monitorar o driver C++ permite que você entenda o uso e o desempenho dos recursos do driver. Estas informações podem ajudá-lo a tomar decisões informadas ao projetar e depurar seu aplicação.
Este guia mostra como executar as seguintes tarefas:
Dica
Este guia explica como usar informações sobre a atividade do driver no código. Para saber como registrar eventos no driver, consulte o guiaRegistrar eventos de driver.
Monitorar eventos de comando
O driver C++ cria eventos de comando quando seu cliente executa um comando de banco de dados. Por exemplo, os comandos find, insert, delete e count produzem eventos de comando. Você pode iniciar esses comandos executando as operações padrão de criação, leitura, atualização ou exclusão do driver ou usando diretamente os comandos do banco de dados .
Dica
Para saber mais sobre comandos do banco de dados , consulte o guia Executar um comando.
Você pode acessar detalhes sobre eventos de comando assinando-os em seu aplicação. Para assinar um evento de comando, crie um objeto mongocxx::options::apm para armazenar sua configuração do Application Performance Monitoring (APM). Em seguida, passe as opções para o seu objeto mongocxx::client. Chame os seguintes métodos no objeto mongocxx::options::apm para definir o comportamento de monitoramento de comando:
Método | Descrição |
|---|---|
| Especifica como o cliente responde quando um comando começa, o que gera um
|
| Especifica como o cliente responde quando um comando não é bem-sucedido, o que gera um |
| Especifica como o cliente responde quando um comando é bem-sucedido, o que gera um |
O código a seguir monitora eventos iniciados por comandos executando as seguintes ações:
Chama o método
on_command_started()em um objetomongocxx::options::apmPassa uma chamada de resposta para
on_command_started()que imprime o nome de cada comando e o ID da solicitaçãoConfigura seu cliente com estas opções
1 2 3 4 5 6 7 int main() { 8 mongocxx::instance instance{}; 9 10 int command_started_events = 0; 11 12 mongocxx::options::apm apm_opts; 13 apm_opts.on_command_started([&command_started_events](const mongocxx::events::command_started_event& event) { 14 command_started_events++; 15 std::cout << "Command started: " << event.command_name() 16 << " (request_id: " << event.request_id() << ")" << std::endl; 17 }); 18 19 mongocxx::uri uri("<connection string URI>"); 20 mongocxx::options::client client_opts; 21 client_opts.apm_opts(apm_opts); 22 23 mongocxx::client client{uri, client_opts}; 24 25 // Perform database operations 26 27 std::cout << "Observed " << command_started_events << " command started events" << std::endl; 28 29 return 0; 30 }
Quando você executa um comando find, o código imprime mensagens que se assemelham à seguinte saída de exemplo:
Command started: find (request_id: 3)
Monitorar eventos de descoberta e monitoramento do servidor (SDAM)
O driver C++ cria eventos de topologia , também conhecidos como eventos SDAM, quando o estado da instância ou cluster à qual você conectou é alterado. Por exemplo, o driver cria um evento quando você estabelece uma nova conexão ou quando o cluster elege um novo nó primário.
Para saber mais sobre eventos de topologia, consulte o guia de replicação no manual do servidor.
Você pode acessar detalhes sobre eventos SDAM assinando-os em seu aplicação. Para assinar um evento SDAM, crie um objeto mongocxx::options::apm para armazenar sua configuração APM. Em seguida, passe as opções para o seu objeto mongocxx::client. Chame os seguintes métodos no objeto mongocxx::options::apm para definir o comportamento de monitoramento SDAM:
Método | Descrição |
|---|---|
| Especifica como o cliente responde quando a descrição do servidor é alterada, o que gera um |
| Especifica como o cliente responde quando um novo servidor é adicionado à topologia, o que gera um |
| Especifica como o cliente responde quando um servidor é removido da topologia, o que gera um |
| Especifica como o cliente responde quando a descrição da topologia muda, o que gera um |
| Especifica como o cliente responde quando o driver se conecta pela primeira vez ao cluster, o que gera um |
| Especifica como o cliente responde quando o driver se desconecta do cluster, o que gera um |
| Especifica como o cliente responde quando um heartbeat é enviado ao servidor, o que gera um |
| Especifica como o cliente responde quando um heartbeat é bem-sucedido, o que gera um |
| Especifica como o cliente responde quando um heartbeat falha, o que gera um |
O código a seguir monitora eventos de abertura de servidor executando as seguintes ações:
Chama o método
on_server_opening()em um objetomongocxx::options::apmPassa um chamada de resposta para
on_server_opening()que imprime o host e a porta de cada servidorConfigura seu cliente com estas opções
1 2 3 4 5 6 7 int main() { 8 mongocxx::instance instance{}; 9 10 int server_opening_events = 0; 11 12 mongocxx::options::apm apm_opts; 13 apm_opts.on_server_opening([&server_opening_events](const mongocxx::events::server_opening_event& event) { 14 server_opening_events++; 15 std::cout << "Server opening: " << event.host() << ":" << event.port() << std::endl; 16 }); 17 18 mongocxx::uri uri("<connection string URI>"); 19 mongocxx::options::client client_opts; 20 client_opts.apm_opts(apm_opts); 21 22 mongocxx::client client{uri, client_opts}; 23 24 // Perform database operations 25 26 std::cout << "Observed " << server_opening_events << " server opening events" << std::endl; 27 28 return 0; 29 }
Quando você executa uma operação de banco de dados , o driver estabelece uma nova conexão com o servidor , e seu assinante registra o evento de abertura do servidor . O código gera mensagens que se assemelham ao seguinte:
Server opening: <host>:<port number>
Descrições de evento
Você pode se inscrever no monitoramento de eventos criando uma função de chamada de resposta que aceite um objeto de classe de evento como parâmetro. A tabela a seguir fornece o nome de cada classe de evento , links para a documentação da API do tipo e descreve quando o evento é publicado:
Classe do manipulador de eventos | Descrição |
|---|---|
Criado quando um comando é iniciado. | |
Criado quando um comando é bem-sucedido. | |
Criado quando um comando falha. | |
Criado quando a descrição do servidor muda, como quando o tipo do servidor muda de secundário para primário. | |
Criado quando um novo servidor é adicionado à topologia. | |
Criado quando um servidor existente é removido da topologia. | |
Criado quando a descrição da topologia muda, como quando há uma eleição de uma nova primária. | |
Criado quando o driver se conecta pela primeira vez ao cluster. | |
Criado quando o driver se desconecta do cluster. | |
Criado quando o monitor do servidor envia um comando | |
Criado quando a pulsação é bem-sucedida. | |
Criado quando o heartbeat falha. |
Você pode encontrar informações sobre cada tipo de assinante de monitoramento e método de evento na seção Monitoramento de desempenho de aplicativos da documentação da API.
Documentação da API
Para saber mais sobre as aulas e os métodos discutidos neste guia, consulte a seguinte documentação da API: