Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

116
Visualizações
Cómo realizar un seguimiento de las solicitudes de MongoDB desde una aplicación de consola

Tengo un proyecto de aplicación de consola escrito en C# al que agregué Application Insights con los siguientes paquetes de NuGet.

 Microsoft.ApplicationInsights Microsoft.ApplicationInsights.Agent.Intercept Microsoft.ApplicationInsights.DependencyCollector Microsoft.ApplicationInsights.NLogTarget Microsoft.ApplicationInsights.PerfCounterCollector Microsoft.ApplicationInsights.Web Microsoft.ApplicationInsights.WindowsServer Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel

Configuré mi InstrumentationKey en el archivo de configuración y estoy iniciando un TelemetryClient en el inicio usando el siguiente código:

 var telemetryClient = new TelemetryClient(); telemetryClient.Context.User.Id = Environment.UserName; telemetryClient.Context.Session.Id = Guid.NewGuid().ToString(); telemetryClient.Context.Device.OperatingSystem = Environment.OSVersion.ToString();

Todo funciona bien, excepto que AI no captura ninguna solicitud que se envía a Mongo, puedo ver las solicitudes que se envían al servidor SQL en el 'Mapa de la aplicación', pero no hay señales de ninguna otra solicitud externa. ¿Hay alguna forma de que pueda ver la telemetría de las solicitudes realizadas a Mongo?

EDITAR: gracias a Peter Bons, terminé con lo siguiente, que funciona de maravilla y me permite distinguir entre el éxito y el fracaso:

 var telemetryClient = new TelemetryClient(); var connectionString = connectionStringSettings.ConnectionString; var mongoUrl = new MongoUrl(connectionString); var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); mongoClientSettings.ClusterConfigurator = clusterConfigurator => { clusterConfigurator.Subscribe<CommandSucceededEvent>(e => { telemetryClient.TrackDependency("MongoDB", e.CommandName, DateTime.Now.Subtract(e.Duration), e.Duration, true); }); clusterConfigurator.Subscribe<CommandFailedEvent>(e => { telemetryClient.TrackDependency("MongoDB", $"{e.CommandName} - {e.ToString()}", DateTime.Now.Subtract(e.Duration), e.Duration, false); }); }; var mongoClient = new MongoClient(mongoClientSettings);
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No estoy familiarizado con MongoDB pero, por lo que sé, no hay soporte predeterminado para él cuando se trata de Application Insights. Pero eso no significa que no puedas hacer esto, solo implicará un poco más de código.

Una vez más, no estoy familiarizado con MongoDB, pero según http://www.mattburkedev.com/logging-queries-from-mongodb-c-number-driver/ hay soporte integrado para registrar las consultas generadas. Ahora, solo necesitamos conectar esto a Application Insights.

Como ya sabe cómo usar TelemetryClient , podemos usar los métodos de seguimiento personalizados proporcionados por esa clase. Consulte https://docs.microsoft.com/nl-nl/azure/application-insights/app-insights-api-custom-events-metrics para conocer los métodos de seguimiento personalizados disponibles.

Todo lo que necesita hacer es insertar un código como este:

 telemetryClient.TrackDependency( "MongoDB", // The name of the dependency query, // Text of the query DateTime.Now, // Time that query is executed TimeSpan.FromSeconds(0), // Time taken to execute query true); // Indicates success

La clase telemetryClient es segura para subprocesos, por lo que puede reutilizarla.

Ahora, de acuerdo con la publicación de blog a la que se hace referencia, debería poder hacer algo como esto:

 var client = new MongoClient(new MongoClientSettings() { Server = new MongoServerAddress("localhost"), ClusterConfigurator = cb => { cb.Subscribe<CommandStartedEvent>(e => { telemetryClient.TrackDependency( "MongoDB", // The name of the dependency e.Command.ToJson() // Text of the query DateTime.Now, // Time that query is executed TimeSpan.FromSeconds(0), // Time taken to execute query true); // Indicates success }); } });

Nuevamente, no estoy familiarizado con MongoDB, pero espero que este sea un punto de partida para su imaginación sobre cómo adaptarlo a sus necesidades utilizando su conocimiento de MongoDB.

EDITAR:

Si también hay un evento CommandCompletedEvent o similar en lugar del evento CommandStartedEvent , probablemente debería realizar un seguimiento de la dependencia allí porque debería poder calcular (o leer de forma simple) el tiempo empleado y tal vez obtener el valor real para el indicador de éxito.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda