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
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:
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:
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.
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:
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…”
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.
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:
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:
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:
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”:
La oss kjøre appen igjen, og klikke på knappen et par-tre ganger før vi kker i Azure portalen:
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:
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