Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

122
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!