Hvor mye vet du om hvordan dine applikasjoner brukes?

Spørsmålet er i høyeste relevant ikke sant? Konkurransen der ute blir ikke mindre med tiden. Brukere forventer seg at applikasjoner skal være enkle, intuitive og raske. Brukerne har ingen som helst lojalitet til leverandører, annet enn en og annen mangeårig kontrakt som har bundet de til produktet. Om programvaren ikke leverer, så bytter de den ut fortere enn du kan si “Fru Floreliussens ripsbusker og andre buskvekster i Ibsens hage”!

Noen utviklere baserer sin software på studier av brukerne, hva ønsker de å oppnå? De tester gjerne ut noen prototyper av brukergrensesnitt og registrerer hvordan disse blir tatt i mot, så itererer de, gjerne mens de er borte en stund, og leverer et produkt basert på dette.

Andre selskaper kaller seg smidige, de leverer funksjoner og brukergrensesnitt i en iterativ, kort prosess, og tilpasser seg hele tiden det som er optimalt for kunden. Bedre, men ingen sigar!

I begge tilfeller baserer man seg på at man har et tett samarbeid med brukeren av programvaren, og at man er i stand til å løpende gjøre korreksjoner som følge av en flyt av tilbakemeldinger. Det er ikke alltid slik.

Veldig mange av oss leverer ferdigpakketerte tjenester eller programvare som brukerne anskaffer gjennom butikk. Det kan være det neste store regnskapssystemet, en sosial mobil app, et spill, eller tjeneste ala OneDrive for å nevne noe.

Application Insights

Med tjenesten Application Insights har vi i praksis innført et “one-stop-shop” for en total oversikt over helsen, ytelsen, kostnaden til alle dine applikasjoner. Det hjelper deg å prioritere opp fokusområder som betyr noe for brukerne av din software.

Applikation insights består av to ting:

  • En portal, I Azure, der du kan overvåke alt som har med appen din å gjøre
  • En SDK som du bruker i koden din. Denne SDKen eksisterer i dag for .Net, Java, JavaScript, Windows, iOS og Android. Det finnes også opensource SDKer for Ruby, Python, PHP og NodeJS. For en komplett oversikt kan du kikke her

 

Let’s get started!

Jeg tar utgangspunkt i en UWP (Universal Windows Platform) app for dette eksemplet, men alt av prinsipper og metoder som du vil se her, kan du overføre til din platform. La deg derfor ikke skremme av mitt valg av platform. I min noe ikke-realistiske app trykker man på en knapp, og så kommer det en lyd (jada, jeg har ikke fantasi til mer!). Appen heter “SkvettWapp” (Skvett, Windows App), og ville selvsagt ha hett “SkvettLapp” på Linux Smile

image

DISCLAIMER Jeg ber ærbødigst om at vi ser bort fra at jeg bruker en sterk binding til UI ved å koble på et Click event. Dette er kun gjort for eksemplets makt. Selvsagt skal dere ikke bruke noe annet enn databinding og MVVM til denne typen kode!

Code-behind for knappetrykk skjer her:

image

Jeg kjører appen, og verifiserer at lyden spilles av hver gang jeg trykker på knappen.

Så over til Azure portalen

La oss nå legge til litt Application Insights til dette. Jeg starter ved å navigere meg til vår preview-portal i Azure (portal.azure.com), og finner frem Application Insights noden:

image
Til venstre ser du Application Insights noden i den nye portalen, til høyre ser du appene som du har application insights aktive med

Jeg klikker på pluss-ikonet (ADD) for å melde inn en ny app, noe som ekspanderer et nytt blad til høyre for listen over eksisterende noder.

image

Velg applikasjonstype, og lag gjerne et finere navn enn “Group-2”. Jeg endte opp med å døpe min ressursgruppe til  “SkvettWappGroup”, som for meg gav mer mening. Mens jeg skriver dette, så er lokasjon for Application Insights foreløpig kun tilgjengelig i sentrale USA.

Etter å ha lagret, så går det noen sekunder mens min Application Insights node opprettes. Når den er klar, så har vi fått det vi trenger for å begynne å registrere data. Det jeg trenger å gjøre i neste omgang er å hente en nøkkel som jeg må bruke til å assosiere min applikasjon med denne portalen. Denne kalles “Instrumentation Key” i SDK:

image
Jeg har plassert tallene 1-2-3 for å vise navigasjonen du gjør for å finne din “Instrumentation Key”

Tilbake i Visual Studio (eller Eclipse, IntelliJ, XCode eller hva det nå er du bruker) skal vi legge til støtte for Application insights. Det er ulike fremgangsmåter for å gjøre dette, sørg for å se over Application Insights dokumentasjonen for hvordan du gjør dette. For min del, i Visual Studio, høyreklikker jeg på prosjektet mitt og velger “Add Application Insights Telemetry…”

SNAGHTML18c8d066

Nå dukker dialogen for Application Insights opp i Visual Studio. Jeg velger rett abonnement, og velger Eksisterende SkvettWapp ressurs (Visual Studio tilbyr meg også å lage en ny Application Insights ressurs direkte i samme dialog.

 

image

Klikk Add for å legge til i prosjektet.

MERK Det kan hende at du må legge til pakken Microsoft.ApplicationInsights fra NuGet før du kjører dialogen over.

Etter at dialogen har fullført så ser du noen nye filer i prosjektet ditt, bl.a. ApplicationInsights.config:

image
Instrumenteringsnøkkelen er kjernen i konfigurasjonen av Application Insights

XML elementet TelemetryModules sier noe om hva slags telemetri som skal sendes. Modulen som ligger der som standard (DiagnosticsTelemetryModule) rapporterer om eventuelle feil i Application Insights instrumentering selv. Telemetri fra denne modulen finner du igjen i diagnostikksøk. For å hente inn telemetri fra din applikasjon, så trenger vi kun å opprette et objekt av typen TelemetryClient i kode.

TIPS: Modulen TelemetryClient er trådsikker, og jeg anbefaler at du oppretter en instans pr. modul i koden din (en modul = 1 dll, eller jar fil).

Siden jeg bare har en enkelt modul i min SkvetWapp (selve appen), så trenger jeg kun én instans av TelemetryClient. Jeg legger den på forsiden av appen min. Jeg liker også at det er mulighet til å kjøre all konfigurasjon i kode, så da blir min app seende slik ut:

image

TrackPageView

Du ser også at jeg har lagt på sporing av MainPage. Her er tanken at du kan få telemetri på hvilke sider i applikasjonen brukerne navigerer til og fra, hvor lenge de oppholder seg på en bestemt side, osv. Dette er data som er helt essensielt i å forstå hvordan dine brukere faktisk bruker applikasjonen din! SDK tilbyr flere ulike metoder, bl.a:

  • TrackException()
  • TrackDependency()
  • TrackMetric()
  • TrackRequest()
  • TrackTrace()

Når jeg nå starter appen, så sender den, med bare en enkelt TelemetryClient instans, en hel rekke data til min application insights portal, her fra første gangs kjøring:

image

Det er mer data på siden enn i bildet over, bl.a. hvilket land brukeren befinner seg i.

Siden appen min ikke har krasjet noen gang, så finnes det ikke data om dette – enda. Det stilige her er at mange aspekter fra appen dukker opp. Mulighetene her er jo fantastiske!

Som med alt annet i Azure previewportal, så kan du feste denne oversikten til startskjermen din for å få et levende bilde av antall brukere på appen din i nær sanntid. Og det stopper ikke der!

Show me the money!

Sjefer er merkelige vesen. Om du for eksempel utvikler en applikasjon som selger noe, så vil sjefen stort sett bare vite én ting om denne: Hvor mange ganger i løpet av en dag, har brukerne faktisk trykket på “betal” knappen? Vel, med Application Insights kan du faktisk SE pengene tikke inn i sanntid ved å bruke sk. “Cusom Events”:

image

La oss kjøre appen igjen, og klikke på knappen et par-tre ganger før vi kker i Azure portalen:

image

Her ser du at mine knappetrykk vises frem i Azure portalen.  Om jeg klikker på det markerte området, så får jeg detaljer rundt mine“Sweet Money” klikk:

image

Jeg kan også sende med data med custom event, i form av Dictionary<string, string>() som jeg legger til som andre parameter i mitt Custom Event. For betaling kan dette for eksempel være en produktId og et antall. Utvis gjerne litt forsiktighet her mht personopplysninger. Det er ingenting som hindrer deg i å legge inn personidentifiserbare data, så bruk dette med forsiktighet!

På siden for application insights kan du også sette opp en kontinuerlig eksport av all innsamlet telemetri, dersom du ønsker å visualisere/jobbe med disse dataene i for eksempel regneark eller dine egne analyseverktøy.

Ja ja ja, jeg begynner å se lyset!

Bra! – det du ser over er bare et bittelite uttrekk av all funksjonaliteten som tilbys gjennom application insights. Av ting du kan bruke application insights til som ikke har vært nevnt så langt er:

  • Se “stacktrace” til krasj i applikasjonen din
  • Finne ut av når i uken brukerne dine er mest aktive, eller når på døgnet
  • Se en geografisk oversikt over hvor brukerne dine er
  • Finne ut av hvilke devices som kjører applikasjonen, identifisere feil på enkelte typer enheter eller operativsystemversjoner, skjermstørrelser…
  • Se på hvordan applikasjonen din påvirker ytelsen på maskinen (ram/cpu/disk)
  • Samle inn performance counter data fra brukerens maskin
  • Osv. osv.

Jeg vil gjerne at DU setter i gang med testing av dette, og at du forteller litt om erfaringen din som en kommentar her. 

Bottom Line

Application insights er intet mindre enn fantastisk! Det gir deg en innsikt og forståelse for hvordan din applikasjon faktisk brukes som virkelig lar deg forstå brukerne dine utenfor konteksten av å lage noe nytt. Jeg kan ikke få understreket mange nok ganger hvor kraftig dette er. Prøv det nå – det er verd det!

 

Pedro