Nel frattempo…

… sono sparito di nuovo. O forse non proprio.

Da Maggio ho iniziato una nuova (e speriamo ultima) avventura professionale, mentre a Luglio sono diventato MVP 🙂

MVP

Per la nuova avventura professionale, devo dire che mi sta soddisfacendo parecchio ma mi sta anche assorbendo quasi completamente, quindi ben venga il riconoscimento (spero meritato) come MVP per poter riprendere spunto ed energie per ricominciare a condividere quel poco che so, e approfondire insieme le tecnologie più interessanti che possiamo utilizzare.

Spero solo di riuscire, appena finite le vacanze, a riprendere un ritmo tale da avere una maggiore presenza sul web e negli eventi (a breve qualche update).

Come al solito, sentitevi liberi di darmi una mano 😉

Nel frattempo…

Le sessioni del Technical Cloud Day

L’altro giorno mi è arrivata una mail da Microsoft che mi segnalava la disponibilità online delle sessioni del Technical Cloud Day, un evento a cui purtroppo non ho potuto partecipare (e di questo mi pento amaramente).

Fortunatamente queste interessantissime sessioni, tenute da esperti del settore, sono state registrate e rese disponibili online su Channel 9, e le trovate a questo indirizzo.

Tra le molte sessioni sicuramente troverete qualcuna che vi interesserà.

Io personalmente ritengo le tematiche trattate tutte degne di interesse e di sicuro cercherò di capirne qualcosa in più per poterle poi utilizzarle sul campo quando necessario.

E come già detto in altri post, ricordate che “Scientia potentia est” (ovvero “sapere è potere”).

Le sessioni del Technical Cloud Day

L’offerta formativa gratuita di Microsoft

Più vado avanti ad imparare cose nuove, più ho voglia di aumentare le mie conoscenze.

E’ una spirale morbosa da cui non riesco proprio ad uscire e, onestamente, non mi dispiace affatto!
Questa mia “verve” negli ultimi anni è aumentata ed aumenta sempre di più ogni giorno (a discapito del riposo e del tempo libero ma quello è un altro discorso).

E visto che anche Microsoft sempre più aumenta e rende disponibile una serie di contenuti e documentazioni per poter far felici dei matti come me, ho deciso di condividere con voi quelle che sono alcune delle possibili “risorse” da utilizzare.

Si tratta di una serie di siti e portali multimediali dove possiamo attingere ad una serie di informazioni, per lo più webcast (quindi video) che ci guidano e ci insegnano tante cose molto interessanti.
La maggior parte dei webcast sono ovviamente in inglese, ma per i più pigri non mancano le risorse in italiano, per lo più registrate da personale Microsoft Italia o MVP con una smisurata passione e preparazione sugli argomenti spiegati.
In elenco ci sono anche libri gratuiti offerti da Microsoft stessa.

Magari questa lista non sarà esaustiva, probabilmente esiste altro che non conosco, per cui in quel caso, commentate pure questo post, a beneficio di chi segue questo blog (e a beneficio mio ovviamente! ).

Attenzione: questo post si riferisce esclusivamente alle risorse direttamente offerte da Microsoft (che io uso e conosco), per risorse offerte da altre aziende e/o produttori software ecc., ci sarà un altro post al riguardo, per cui aspettate quello per vedere se ho dimenticato qualcuno, grazie.


 

Channel 9

https://channel9.msdn.com/

CH9.png

Channel 9 è lo “storico” canale online di Microsoft, esistente già dal 2004 e che inizialmente era stato fatto (anche) per conoscere Microsoft dall’interno, ricordo ancora i video in giro per i building di Redmond e le interviste con gli sviluppatori del framework .NET dediti a sviluppare singole classi che poi ho usato.
Oggi è un canale mostruoso, ricco di webcast su TUTTO quello che avviene in Microsoft e con una serie di show dedicati e tutorial online.
I video sono maggiormente in inglese, ma da qualche anno esistono anche risorse “localizzate” in diverse lingue ed anche in italiano c’è tanta roba.
Secondo me un punto di partenza obbligatorio per imparare tante cose.

#TecHeroes

https://channel9.msdn.com/Shows/TecHeroes

Ch9TecHeroes

Ne abbiamo già parlato, #TecHeroes è il canale “italiano” portato avanti da Roberto Andreoli e dal team DX che si prodiga per parlare degli “eroi della tecnologia”, gente appassionata che fa tanto per poter migliorare il proprio lavoro e quello degli altri ogni giorno. I video in questo show sono ovviamente tutti in italiano.

Microsoft Virtual Academy

https://mva.microsoft.com/

MVA.png

Microsoft Virtual Academy offre percorsi formativi “completi” in forma di webcast, organizzati in corsi e capitoli strutturati, una vera “miniera” per imparare tantissime cose.
Anche in questo caso, ci sono video in inglese e anche in altre lingue tra cui l’italiano, con corsi creati da MVP e personale Microsoft.
Ottimo e ben strutturato.

Free E-Books

https://mva.microsoft.com/ebooks

MVABooks.png

Qui abbiamo tanti libri (in inglese) offerti gratuitamente da Microsoft Press. Si tratta di libri completi che potevano tranquillamente essere venduti a 50-60$ (o €) per il valore del lavoro svolto dai vari autori.
Ottimo da leggere quando avete un argomento specifico da approfondire e non vi spaventa (perchè mai dovrebbe poi?) leggere in inglese.

Microsoft Mechanics

https://www.youtube.com/channel/UCJ9905MRHxwLZ2jeNQGIWxA

MsMechanics.png

Su questo canale ci sono finito per caso e ultimamente (per poi scoprire che gli stessi video sono anche su un canale di Channel 9).
Da quello che vedo ci sono tanti webcast relativi ad Office, Azure, Exchange, insomma risorse potenzialmente per ITPro (o DevOps).
Per ora ho visto solo un paio di video, ma mi sembra molto interessante e ho pensato di segnalarvelo.

Born to Learn

https://borntolearn.mslearn.net/

BTL.png

“Born to Learn” è il portale dedicato alla formazione e certificazione per competenze Microsoft. Qui trovate un blog sempre aggiornato sulle ultime novità dei percorsi di certificazione, con anche opportunità di fare esami di certificazione “in beta”, ovvero non pagandoli e ricevendo la certificazione concreta se passate l’esame (come recentemente è avvenuto a me), ma anche Forum e tante altre risorse per studiare e certificare le proprie competenze.
Da tenere sicuramente sott’occhio e aggiungere al proprio feed reader.


 

Insomma un mare di formazione disponibile, sempre, ovunque, gratuitamente!

Ora non avete più scuse per imparare qualcosa di nuovo, e migliorare voi stessi e il vostro lavoro.

E ricordate sempre che “Scientia potentia est” (ovvero “sapere è potere”).

L’offerta formativa gratuita di Microsoft

#TecHeroes loves #GameDev

Per chi non lo conoscesse (e sarebbe abbastanza grave!) #TecHeroes è uno show online gestito da Roberto Andreoli con il team DX di Microsoft Italia e pubblicato su Channel 9, il canale multimediale tecnico di Microsoft.

Nelle varie puntate vengono ospitati gli “eroi della tecnologia” ovvero le persone che, secondo gli organizzatori dello show, si impegnano in maniera particolarmente attiva a condividere il proprio tempo e le proprie conoscenza tecnologiche con gli altri.

Anche io ho avuto l’onore di partecipare qualche tempo fa (insieme a Massimo Bonanni) per parlare della nostra community dotNET{podcast.

techeroes50.png

Oltre agli innumerevoli video che presentano prodotti e tecnologie Microsoft (e non solo), e ultimamente anche le community tecniche, da qualche settimana è stata avviata una nuova “serie nella serie”, ovvero un filone di puntate dedicate allo sviluppo gaming, identificata dal nome #TecHeroes loves #GameDev e di cui abbiamo visto finora un paio di puntate ma già molto interessanti e promettenti:

Lo show vede come “conduttore” Marcello Marchetti, da poco diventato Microsoft Evangelist, e che possiede grandi competenze di programmazione gaming.

Techeroes.png

Non vi resta che sottoscrivere il feed RSS di #TecHeroes per non perdere nessuna puntata della serie e quindi anche di questo nuovo e interessantissimo filone educativo!

#TecHeroes loves #GameDev

Mai sentito parlare di Azure Stack?

L’altro giorno stavo guardando questo video della serie #TecHeroes con Paola Presutto che spiega un pochettino cosa sia Azure Stack.

PaolaPAzureStack.png

Ne avevo sentito parlare ma non avevo mai approfondito l’argomento e allora, incuriosito da questo interessante video mi sono messo a cercare un po’ di informazioni.

Cosa è Azure Stack

Azure Stack è stato presentato durante la conferenza americana Ignite del 2015, e pubblicato in Technical Preview 1 a fine gennaio 2016, e si tratta di una piattaforma per il cloud “ibrido”, ovvero da installare nei propri datacenter, basata sullo stesso modello e sulle stesse tecnologie di Azure. Banalizzando il concetto in due parole, una sorta di “Azure installabile in casa”.

In realtà non ci sono (ancora) il 100% delle funzionalità di Azure, ma è comunque una buona soluzione PaaS/IaaS che va incontro a tutte quelle aziende che hanno ancora “paura” di portare i loro “beni” al di fuori dei loro confini.

Microsoft ha fatto quindi una mossa per la serie: se Maometto non va alla montagna, è la montagna che va da Maometto”, e per quanto ne so, non esistono altre piattaforme cloud che abbiano fatto qualcosa di simile.
Questo rappresenta sicuramente una nuova categoria di prodotti, qualcosa che potremmo classificare come “hybrid cloud platform” o simile.

Quali sono i requisiti per poterlo installare

Se avete i requisiti hw e sw qui elencati e volete avere il cloud in casa vostra, potete provare questa Technical Preview 1 di Azure Stack.

Ovviamente non si tratta di una installazione che si può fare in casa, a meno che non abbiate a disposizione un server con un minimo di 12 core e 96 GB di ram (e in quel caso vi invidierei moltissimo).
Il tutto può essere comunque installato su una sola macchina fisica.

Io purtroppo non ho a disposizione i requisiti minimi richiesti, e quindi cercherò di capire qualcosa in più dando un’occhiata in rete per capire se qualcuno ha avuto esperienze al riguardo.

Ad ogni modo, Microsoft vuole semplificare più possibile questo requisito, tanto che si sta interfacciando con i suoi vendor di riferimento per definire delle soluzioni hardware specificatamente progettate per Azure Stack.

Qual è il target di riferimento

Il target è sicuramente quello aziendale, con una infrastruttura di un certo livello ed esigenze ben specifiche.

Anche la procedura di installazione, sebbene Microsoft tenda sempre a semplificarla a vantaggio degli utenti, in questo caso non è proprio alla portata di tutti.

Quindi hardware e software come da requisiti si, ma anche figure capaci di “costruire” una infrastruttura ex-novo (praticamente) e di saperla poi governare adeguatamente.

Insomma è un gran bel giocattolo ma bisogna saperlo usare. Staremo a vedere in futuro se ci saranno casi concreti da esaminare.

Caratteristiche e concetti principali di Azure Stack

Vista la consistenza di questo “prodotto”, sul portale avremo (stando alle immagini sul sito ufficiale) la stessa esperienza utente che abbiamo su Azure:

image3

Questo rappresenta un ovvio vantaggio per chi è già pratico del cloud di Microsoft. Infatti con le stesse funzionalità (su fronti diversi) si potranno gestire contemporaneamente le risorse nel proprio datacenter, le risorse su Azure e le risorse su altri datacenter (se avviati con lo stesso prodotto).

E come il cloud di Microsoft, da questa installazione si potranno creare piani e sottoscrizioni per poter rendere disponibili i vari servizi nell’ecosistema di destinazione.
Nei piani potranno essere configurati i vari servizi disponibili con le quote decise per ogni servizio (per esempio banda massima utilizzabile, percentuale cpu massima utilizzabile, ecc.).

Insomma con Azure Stack ne vedremo delle belle!

Mai sentito parlare di Azure Stack?

Gli SDK disponibili per Application Insights

Abbiamo visto un po’ di cose su Application Insights ultimamente, ma è arrivato il momento di iniziare a parlare di codice.

Application Insights consente agli sviluppatori di interagire con diversi linguaggi e/o piattaforme.

Un elenco (non esaustivo) di SDK è il seguente:

Questo vi faccia capire come questo strumento non vuole essere solo un prodotto legato al solo ecosistema Microsoft, ma sia aperto a più fronti.

Personalmente ho provato solo l’interazione nel codice .NET ma immagino che sia equivalente in tutto e per tutto anche negli altri ambienti / linguaggi.

Qualche giorno fa stavo vedendo un po’ come funziona PHP, incuriosito da classifiche sulla diffusione di linguaggi di programmazione e robe del genere, magari potrei provare a vedere un po’ con quel linguaggio come va, appena ho qualcosa di concreto comunque vi faccio sapere.

Gli SDK disponibili per Application Insights

Le metriche di Application Insights

Quando ho deciso di scrivere un post per spiegare le tipologie di metriche di Application Insights mi sono reso conto di averne già scritto uno su Aspitalia.com .

Per questo forse è meglio risparmiare energie e riportarvi direttamente il link all’articolo.

 

marketing-performance-metrics

Chiaro che le metriche di Application Insights sono veramente tantissime ma nell’articolo che scrissi qualche tempo spiegavo le tipologie e facevo alcuni esempi per dare un’idea di massima di come funzionano le metriche, per le altre “divertitevi” a girare in autonomia nella dashboard, e vedere quali fanno al caso vostro.

Le metriche di Application Insights

Separare sviluppo e produzione su Application Insights

Abbiamo anticipato in un precedente post che avremmo parlato di questo argomento.

Le problematiche che affronteremo (e risolveremo) sono le seguenti:

  • qualora dovessimo cambiare la risorsa Application Insights da utilizzare in un progetto, dovremmo cambiare la Instrumentation Key sia nel file ApplicationInsights.config che nella _Layout.cshtml
  • i dati inviati in fase di sviluppo e debug su Application Insights saranno “fasulli”, e influenzeranno quindi i dati reali della produzione

Per risolvere entrambi questi problemi, faremo ricorso a due cose:

  • più risorse di Application Insights, quindi nel caso di “sviluppo” e “produzione” avremo bisogno di due risorse
  • codice Razor per caricare, in base allo scenario, la Instrumentation Key giusta

Cominciamo.

Andiamo a creare più risorse Application Insights su Azure

Prima di tutto creiamo tutte le risorse necessarie su Azure, e per farlo andiamo al seguente indirizzo:

https://portal.azure.com

Dal portale di Azure selezioniamo la voce “Resource Groups” e quindi usiamo il tasto “+ Add” per inserire un nuovo gruppo:

IMG09

Assegniamo il nome al gruppo e scegliamo la sottoscrizione Azure da utilizzare, come zona geografica di Application Insights per il momento è possibile scegliere solo “Central US”, dato che questo servizio è ancora in “preview” (anche se di preview ormai non si può più parlare di fatto).

IMG

Nel nostro esempio abbiamo messo il suffisso “_GROUP” al nome del nostro gruppo per una questione di nomenclatura, non è necessario né richiesto da alcuna policy del servizio.

Con lo stesso criterio, userò i suffissi “_DEV” e “_PROD” per indicare i nomi dei profili che saranno destinati, rispettivamente, a “sviluppo e test” e “produzione”.

Per farlo procediamo con la selezione a sinistra della voce “Application Insights” e quindi con il pulsante “+ Add” ancora una volta procediamo con l’inserimento:

IMG

Facciamo attenzione ad assegnare la risorsa che andiamo a creare al gruppo che abbiamo poc’anzi creato:

IMG

Una volta creato la prima risorsa “_DEV”, ripetiamo la stessa operazione per la creazione della seconda risorsa “_PROD”.

Da notare che il gruppo di risorse, seppure non  necessario, ci aiuterà a recuperare velocemente le risorse create per quello specifico progetto per cui, seppure non sia documentato come linea guida, l’approccio indicato è fortemente consigliato (da me).

A questo punto prendiamo nota (ad esempio su un “blocco note”) delle due Instrumentation Key delle due risorse in modo da poterle ricopiare e incollare tra poco nel nostro progetto web.

Utilizziamo le risorse Application Insights in Visual Studio

Che si tratti di un nuovo progetto o di un progetto esistente poco cambia, come avevamo già detto in precedenti post, perché in entrambi i casi le informazioni richieste saranno le stesse.

Nel nostro esempio procediamo con la creazione di un nuovo progetto e scegliamo la risorsa Application Insights denominata “_DEV”.

IMG.png

A questo punto procediamo all’aggiunta dello script JavaScript necessario ad Application Insights, così come spiegato in questo post.

Ci troveremo quindi nella situazione di avere un file ApplicationInsights.config e un file _Layout.cshtml che fanno riferimento alla stessa Instrumentation Key, nel caso specifico quella con il suffisso “_DEV”.

<InstrumentationKey>fca7eaf9-717d-4d86-8d7c-70c7914880b4</InstrumentationKey>
    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:"fca7eaf9-717d-4d86-8d7c-70c7914880b4"
    });
    window.appInsights=appInsights;
    appInsights.trackPageView();


La strategia che andremo a perseguire sarà la seguente:

  • aggiungere un setting nel Web.config che rappresenti la Instrumentation Key
  • aggiungere lo stesso setting nel file Web.Release.config in maniera tale da poter sostituire nel momento del deploy in produzione il setting del Web.config con questo
  • andare a dichiarare una variabile che possa, tramite Razor, arrivare fino allo script JavaScript

Procediamo con ordine.

Nel Web.config dichiariamo la seguente variabile che identifica la Instrumentation Key:

<appSettings>
    <!-- Application Insights -DEVELOPMENT- Instrumentation Key -->
    <add key="ApplicationInsightsInstrumentationKey" 
         value="fca7eaf9-717d-4d86-8d7c-70c7914880b4" />
 </appSettings>

come valore andremo a mettere la chiave “_DEV”.
Nel file Web.Release.config andremo a mettere quindi la chiave “trasformata” che rappresenta la risorsa “_PROD”:

<appSettings>
    <!-- Application Insights -PRODUCTION- Instrumentation Key -->
 <add key="ApplicationInsightsInstrumentationKey" 
      value="95e74185-b456-48e4-9e69-f586ffeeb0b1"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
 </appSettings>

Utilizzando questa modalità che ci viene offerta da Visual Studio, avremo quindi il risultato di “portare” nel Web.config presente nel deploy fatto in produzione la chiave giusta (a patto ovviamente che nel nostro package di deploy indichiamo la configurazione di “Release”).

A questo punto dobbiamo procedere alla “lettura” di questo valore dal file Web.config che il codice troverà in esecuzione.
Per far questo possiamo procedere alla lettura all’interno del file Global.asax, e più precisamente nel metodo di Application_Start:

protected void Application_Start()
{
    // altro codice
    //...
    // lettura della instrumentation key in base alla configurazione
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = System.Web.Configuration.WebConfigurationManager.AppSettings["ApplicationInsightsInstrumentationKey"];
}

Con questa istruzione abbiamo impostato che la Instrumentation Key venga “letta” dal file Web.config ogni volta che viene avviata l’applicazione.
Ovviamente, in funzione dell’ambiente in cui ci si troverà, grazie alla trasformazione applicata precedentemente nei file di config, troveremo la chiave giusta, quindi “_DEV” in ambiente di sviluppo e “_PROD” nell’ambiente di produzione.

Ora i nostri dati saranno puliti?
Ancora non del tutto. Con quanto fatto finora abbiamo infatti garantito che lato server abbiamo discriminato le due chiavi, ma abbiamo ancora una chiave “cablata” nel JavaScript di Application Insights, e questo lo risolviamo facilmente con una sostituzione della chiave stessa con una variabile caricata a “runtime” tramite Razor, il risultato è il seguente:

    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: "@(Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey)"
    });
    window.appInsights=appInsights;
    appInsights.trackPageView();

Ora sì che possiamo dire di aver risolto tutti i possibili conflitti delle chiavi. Infatti, con questa “semplice” sostituzione del valore con una variabile letta dal server, e che nel nostro caso è proprio la stessa Instrumentation Key che abbiamo impostato durante la fase di “application start”, possiamo essere sicuri che anche nelle pagine del frontend troveremo le giuste chiavi per i due ambienti diversi.

Fra “qualche post” spiegheremo cos’è e a cosa serve la classe TelemetryClient, e come invocare le varie API messe a disposizione da Application Insights.

Per ora divertitevi a fare delle prove con questo codice.

Separare sviluppo e produzione su Application Insights

Agganciare Application Insights ad un progetto esistente in ASP.NET MVC

In un precedente post avevo illustrato come fare per utilizzare Application Insights in un progetto ex-novo basato su tecnologia ASP.NET MVC.

In questo post andremo invece a vedere come possiamo utilizzare Application Insights in un progetto già esistente, sempre basato su ASP.NET MVC.

Ricordo che per usare le comode funzionalità presenti in maniera integrata in Visual Studio è necessario usare la versione 2013 Update 3 o la versione 2015.

Andiamo quindi su un progetto già esistente, basato su ASP.NET MVC in Visual Studio 2015.

Anche in questa situazione si può aggiungere velocemente e con pochi click Application Insights al progetto, facendo semplicemente tasto destro all’interno del Solution Explorer sul nodo che rappresenta il nostro progetto, e quindi utilizzare la voce “Add Application Insights Telemetry…” che troveremo nel menù contestuale:

IMG08

Ci verrà proposta una dialog in cui verranno richieste le informazioni da utilizzare per creare una nuova risorsa Application Insights su Azure, o per utilizzarne una che abbiamo già creata, alla stregua di quanto avviene nel caso in cui partivamo con un progetto da zero:

IMG09.png

Una volta creata la nuova risorsa Application Insights (o agganciata una già esistente) saremo nella stessa situazione del post in cui partivamo da un progetto ex-novo, quindi dovremo inserire lo script JavaScript della nostra risorsa Application Insights nella “master page” di MVC, ovvero nel file _Layout.cshtml.

Nel prossimo post mostrerò come utilizzare risorse Application Insights distinte per separare l’ambiente di sviluppo e debug da quello di produzione.

Agganciare Application Insights ad un progetto esistente in ASP.NET MVC

Utilizzare Application Insights in un nuovo progetto ASP.NET MVC

Ore che stiamo cominciando a conoscere Microsoft Application Insights, e dopo che ne abbiamo cominciato a vedere le prime nozioni di base, possiamo parlare di sviluppo.

In questo post voglio far vedere la semplicità con cui possiamo usare Application Insights in un progetto ASP.NET MVC nel caso di un nuovo progetto, nel successivo post mostrerò anche il caso di un progetto già esistente in cui la telemetria di Microsoft non era stata prevista sin dall’inizio.

Ricordo che per usare Application Insights non è necessario per forza usare Visual Studio e pensare allo sviluppo con il .NET framework, dato che l’elenco di SDK , per vari linguaggi e piattaforme, è molto variegato.
Nel nostro esempio, per semplicità andremo sugli ambienti a me più familiari. Infatti con Visual Studio 2013 (service pack 3) o Visual Studio 2015, la piattaforma di Application Insights si può trovare già integrata e pronta all’uso (in termini di librerie per lo sviluppo).

Prima di proseguire, accertatevi di avere una subscription attiva su Azure, come vi avevo già spiegato.

Partiamo quindi con un progetto ex-novo, basato su ASP.NET MVC su Visual Studio 2015.

Da Visual Studio 2015 facciamo, come sempre, File > New > Project… > Web > ASP.NET Web Application per partire con un nuovo progetto ASP.NET MVC.

IMG01

Come potete notare dall’immagine sopra, sul lato destro della dialog di creazione di un nuovo progetto trovate già un check che ci consente l’utilizzo di Application Insights all’interno del progetto che stiamo andando a creare.
Chiaramente se non vogliamo che il nostro progetto usi la telemetria si può anche deselezionare.

Nel nostro caso lo lasciamo selezionato e subito sotto andiamo a configurare l’account, sottoscrizione e risorsa di Azure da usare per la creazione di questa telemetria.
Lascio a voi le prove per la configurazione, magari utilizzando anche la voce “Configure settings…” presente sempre tra i parametri, è talmente semplice da fare in autonomia che spiegarlo nel dettaglio non serve.

L’unica cosa da fare è scegliere il tipo di progetto web e attendere quei 20-30 secondi necessari per la configurazione automatica.

Importante sapere che se avevate già creato su Azure una risorsa Application Insights e volete utilizzare quella per la telemetria, potete sempre selezionarla nel menù a tendina che trovate in questa dialog.

Nel caso più comune, possiamo crearne una nuova e lasciare a questo wizard il compito di generare tutta l’infrastruttura necessaria sul cloud, operazione che richiede in genere circa 20-30 secondi, quindi sicuramente più veloce di quello che impiegheremmo noi a crearla dal portale di Azure.

Al termine di questa operazione avremo il nostro progetto creato e la risorsa Application Insights creata e pronta all’uso.

All’interno del nostro progetto troveremo un file ApplicationInsights.config, che di fatto è un xml così come lo è il classico web.config, in cui troveremo tutte e sole le informazioni relative alla risorsa Application Insights che utilizziamo nel nostro progetto.

IMG02

All’interno di questo file troveremo una serie di informazioni che andremo ad analizzare in un post successivo.

Intanto la cosa che ci serve subito indicare è la Instrumentation Key, che è di fatto la “chiave” identificativa univoca della nostra risorsa Application Insights:

 IMG03.png

Se volessimo quindi un giorno cambiare la risorsa Application Insights da utilizzare per la nostra telemetria, sarebbe qui che dovremmo intervenire una volta creata una nuova risorsa sulla nostra sottoscrizione Azure.

Passo successivo: importazione dello script JavaScript di Application Insights.

A questo punto la nostra applicazione web è “quasi” pronta, nel senso che adesso sa “dove” inviare le informazioni che verranno raccolte e catalogate, ma non sa ancora “quali” informazioni inviare.

Si, perchè se non l’avete ancora capito, le informazioni che troverete su Application Insights sono inviate dalla vostra applicazione, e non si generano in automatico per magia…

Per quanto riguarda i sistemi di telemetria, o Web Analytics, come lo è appunto Application Insights (e come lo è, giusto per fare un esempio magari più noto, Google Analytics), la prima cosa che fanno nella maniera più semplice del mondo, è quella di raccogliere informazioni sulle pagine visitate e altre info quali, ad esempio, la provenienza delle chiamate, il tipo di dispositivo, ecc.

Questa è la prima cosa che si fa in questi sistemi di telemetria, di solito usando un semplice script JavaScript da inserire nelle pagine da monitorare.
E infatti lo possiamo fare anche con Application Insights.

Questa operazione non avviene in automatico ed è una delle poche cose da fare subito da soli una volta impostato il nostro progetto.

Per copiare il nostro script a questo punto dobbiamo andare sul portale di Azure all’indirizzo:

https://portal.azure.com

IMG04.png

Selezionando dall’elenco a sinistra la voce “Application Insights”, vi verranno mostrate le risorse di telemetria che avete nella vostra sottoscrizione, selezionando quella che riguarda il progetto appena creato avremo una vista del genere:

IMG05.png

Come potete vedere nell’immagine sopra, vi verranno mostrate tutta una serie di informazioni relative alla risorsa Application Insights che avete utilizzato.
La semplicità di utilizzo della dashboard di Azure vi aiuterà moltissimo a trovare tutto quello che vi serve per la telemetria, di questo aspetto ne parleremo in seguito.

Per i nostri scopi, ovvero trovare lo script JavaScript da utilizzare, possiamo andare alla sezione dei settings (tramite la label “Settings and Diagnostics” che trovate nel “blade” centrale (ricordo che i “blade” in Azure sono le “sezioni” che man mano si aprono a destra dell’item che selezioniamo), e una volta selezionato quello, a destra andate nella sezione “Getting started”, quindi scegliere “MONITOR AND DIAGNOSE CLIENT SIDE APPLICATION” e arriveremo a trovare lo script che vediamo di seguito:

IMG06.png

Come vedete dall’immagine, si tratta di uno script JavaScript che possiamo copiare velocemente nella nostra clipboard utilizzando il tastino sopra evidenziato, a quel punto possiamo copiarlo nelle pagine del nostro progetto ASP.NET MVC che stavamo preparando.

La cosa più veloce da fare, di solito, è quella di mettere lo script nella “master page” del progetto, per far si che ogni pagina venga tracciata senza doversi preoccupare di ripetere lo script in ogni nuova pagina della nostra applicazione.

Per quanto riguarda ASP.NET MVC, la “master page” è rappresentata dalla pagina (o view) _Layout.cshtml, in cui a questo punto possiamo posizionare il codice appena copiato:

IMG07

Da questo momento in poi, le visite alle nostre pagine verranno tracciate su Application Insights, e potremo sempre verificare quali tipo di device o browser ha visitato la pagina e quando lo ha fatto ed altre informazioni a riguardo.

Personalmente sono solito mettere lo script in una partial view ad hoc (ad esempio chiamandola “_ApplicationInsights.cshtml”) e aggiungere la partial view nella _Layout.cshtml, ma è solo una questione di “leggibilità” del codice, non c’è nessun vantaggio pratico nel farlo.

Un paio di cose da ricordare prima di chiudere:

  • con la situazione appena descritta, qualora dovessimo cambiare la risorsa Application Insights da utilizzare, si dovrebbe cambiare la Instrumentation Key sia nel file ApplicationInsights.config che nella _Layout.cshtml, a meno di far si che da quest’ultimo file la chiave venga passata tramite Razor
  • i dati inviati in fase di sviluppo e debug saranno “fasulli”, quindi allo scopo del nostro business non saranno dati utili, è quindi molto più saggio (e direi necessario) usare due risorse distinte di Application Insights, una per lo sviluppo, e una per la produzione

Per entrambi i punti sopra descritti, scriverò un post apposito per la gestione di più environment applicativi, in cui entrambi i punti saranno risolti. Ma abbiate pazienza ancora qualche giorno per leggerlo…

Intanto cominciate a dare un’occhiata a quello che vi ho detto, probabilmente troverete tutto ancora più semplice anche di come ve l’ho descritto io… 😉

 

Utilizzare Application Insights in un nuovo progetto ASP.NET MVC