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.TelemetryChannelConfiguré 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);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.