La classe TelemetryClient di Application Insights

Abbiamo già detto come per Application Insights siano disponibili diversi SDK, in particolare è interessante vedere come sia facile implementare sul fronte ASP.NET del codice che preveda l’interazione con questo servizio di telemetria.

Una volta che abbiamo il nostro progetto con Application Insights integrato (così come avevamo visto in questo post e in quest’altro post), e una volta integrato anche il codice JavaScript recuperabile dalla dashboard su Azure, avremo la possibilità di tracciare da subito le visite alle pagine, la provenienza delle request ed altre informazioni di questo genere.

Ma abbiamo anche detto, in precedenza, come Application Insights sia utile per comprendere le problematiche applicative e per risolverle. Quindi questo vuol dire andare a rilevare e tracciare le eccezioni e renderle disponibili in una metrica specifica.

Per fare questo (e tanto altro) faremo la conoscenza di una classe utilissima: TelemetryClient, che già nel nome fa comprendere il suo scopo, che è quello di “comunicare” alla nostra risorsa Application Insights le informazioni da monitorare.

Un esempio semplice

Nel nostro applicativo web, che per comodità sarà un progetto ASP.NET MVC, abbiamo la possibilità di utilizzare la classe MvcApplication (nel file Global.asax.cs) e in particolare il metodo Application_Error per gestire tutti gli errori che non vengono gestiti.
In questo metodo possiamo effettuare un “trace” dell’errore e portarlo fino alla nostra dashboard di telemetria.

using Microsoft.ApplicationInsights;
...
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        TelemetryClient client = new TelemetryClient();
        client.TrackException(ex);
    }
}

Con queste poche righe abbiamo fatto in modo di rilevare l’errore intervenuto e farlo pervenire a Application Insights tramite una istanza della classe TelemetryClient, che stabilisce una connessione con la nostra risorsa su Azure, identificata dalla Instrumentation Key indicata nel file ApplicationInsights.config che troveremo nel nostro progetto.

Istanziare TelemetryClient con una Instrumentation Key diversa

Se abbiamo ambienti diversi, possiamo utilizzare un costruttore della TelemetryClient che consenta di utilizzare una TelemetryConfiguration contenente una Instrumentation Key specifica.

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
...
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        TelemetryConfiguration myConfiguration = new TelemetryConfiguration { InstrumentationKey = "myInstrumentationKey" };
        TelemetryClient client = new TelemetryClient(myConfiguration);
        client.TrackException(ex);
    }
}

Riprendendo come esempio quello che avevamo illustrato in questo post, possiamo anche agire direttamente sulla Instrumentation Key della TelemetryConfiguration “attiva”, così il costruttore di base utilizzerà quella chiave, in questo modo:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using System.Web.Configuration;
...
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
         TelemetryConfiguration.Active.InstrumentationKey = WebConfigurationManager.AppSettings["ApplicationInsightsInstrumentationKey"];
    }
    
    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        TelemetryClient client = new TelemetryClient();
        client.TrackException(ex);
    }
}

Cosa possiamo tracciare oltre alle Exception

La classe TelemetryClient consente vari tipi di tracciatura:

  • TrackException => Eccezioni, vista sopra
  • TrackPageView => Pagine, schermo, form, ecc.
  • TrackEvent => Eventi utenti o applicativi
  • TrackMetric => Metriche
  • TrackRequest => Caratteristiche request
  • TrackTrace => Messaggi diagnostica
  • TrackDependency => Monitoraggio dipendenze

Capirete che le potenzialità ci sono per portare su Azure (e rivedere poi sulla Dashboard di Application Insights) più informazioni possibili, anche in funzione di quello che vogliamo sapere della nostra applicazione.

Ovviamente conviene non esagerare con le tracciature inutili, mentre potrebbe essere più utile censire preliminarmente le informazioni che vogliamo avere sotto osservazione della nostra applicazione e cosa pensiamo sia utile tracciare anche in funzione di debug e fix da fare.

Tracciatura lato client

Quello che abbiamo visto sopra è chiaramente possibile, allo stesso modo, lato client, cioè direttamente dalla pagina HTML.

Del resto già nello script di cui abbiamo parlato in un precedente post (che riporto di seguito per comodità) vediamo come venga “istanziato” un oggetto appInsights equivalente al TelemetryClient e di esso venga utilizzato il metodo trackPageView per tracciare appunto le visite alle pagine:

 var appInsights = window.appInsights || function (config) {
 function r(config) { t[config] = function () { var i = arguments; t.queue.push(function () { t[config].apply(t, i) }) } } var t = { config: config }, u = document, e = window, o = "script", s = u.createElement(o), i, f; for (s.src = config.url || "//az416426.vo.msecnd.net/scripts/a/ai.0.js", u.getElementsByTagName(o)[0].parentNode.appendChild(s), t.cookie = u.cookie, t.queue = [], i = ["Event", "Exception", "Metric", "PageView", "Trace"]; i.length;) r("track" + i.pop()); return r("setAuthenticatedUserContext"), r("clearAuthenticatedUserContext"), config.disableExceptionTracking || (i = "onerror", r("_" + i), f = e[i], e[i] = function (config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t["_" + i](config, r, u, e, o), s }), t
 }({
 instrumentationKey: "6ab464ae-42ad-4928-8250-ac102c892085"
 });
 window.appInsights = appInsights;
 appInsights.trackPageView();

Ovviamente oltre al metodo trackPageView è possibile usare anche gli altri metodi della classe TelemetryClient indicati in precedenza.

La classe TelemetryClient di Application Insights

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...