Analiza użycia za pomocą usługi Application Insights

Które funkcje aplikacji internetowej lub mobilnej są najpopularniejsze? Czy użytkownicy osiągają swoje cele za pomocą aplikacji? Czy są one wypuszczane w określonych punktach i czy wracają później? Funkcje Szczegółowe informacje pomagają uzyskać zaawansowane szczegółowe informacje na temat sposobu, w jaki ludzie korzystają z aplikacji. Za każdym razem, gdy aktualizujesz aplikację, możesz ocenić, jak dobrze działa ona dla użytkowników. Mając tę wiedzę, możesz podejmować oparte na danych decyzje dotyczące następnych cykli projektowania.

Wysyłanie danych telemetrycznych z aplikacji

Najlepsze środowisko można uzyskać, instalując usługę Application Szczegółowe informacje zarówno w kodzie serwera aplikacji, jak i na stronach internetowych. Składniki klienta i serwera aplikacji wysyłają dane telemetryczne z powrotem do Azure Portal do analizy.

  1. Kod serwera: Zainstaluj odpowiedni moduł dla aplikacji ASP.NET, Azure, Java, Node.jslub innej aplikacji.

  2. Kod strony internetowej: Dodaj następujący skrypt do strony internetowej przed zamykającym </head> . Zastąp klucz instrumentacji odpowiednią wartością dla zasobu application Szczegółowe informacje:

    Bieżący fragment kodu (wymieniony poniżej) to wersja "5", wersja jest kodowana we fragmencie kodu sv:"#", a bieżąca wersja jest również dostępna w GitHub .

    <script type="text/javascript">
    !function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]}],r)),l.push(function(e,t,n,a){var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties={endpoint:a},i}(0,0,t,p)),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!t&&m.core||a()},500)}var e=function(){var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t)},n}();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function(){l.getElementsByTagName(k)[0].parentNode.appendChild(e)},y.ld||0)}try{m.cookie=l.cookie}catch(p){}function t(e){for(;e.length;)!function(t){m[t]=function(){var e=arguments;g||m.queue.push(function(){m[t].apply(m,e)})}}(e.pop())}var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4};var s=(d.extensionConfig||{}).ApplicationInsightsAnalytics||{};if(!0!==d[I]&&!0!==s[I]){var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i){var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c]({message:e,url:t,lineNumber:n,columnNumber:a,error:i}),r},d.autoExceptionInstrumented=!0}return m}(y.cfg);function a(){y.onInit&&y.onInit(n)}(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView({})):a()}(window,document,{
    src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source
    // name: "appInsights", // Global SDK Instance name defaults to "appInsights" when not supplied
    // ld: 0, // Defines the load delay (in ms) before attempting to load the sdk. -1 = block page load and add to head. (default) = 0ms load after timeout,
    // useXhr: 1, // Use XHR instead of fetch to report failures (if available),
    crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
    // onInit: null, // Once the application insights instance has loaded and initialized this callback function will be called with 1 argument -- the sdk instance (DO NOT ADD anything to the sdk.queue -- As they won't get called)
    cfg: { // Application Insights Configuration
      instrumentationKey:"INSTRUMENTATION_KEY"
    }});
    </script>
    

    Aby dowiedzieć się więcej o bardziej zaawansowanych konfiguracjach monitorowania witryn internetowych, zapoznaj się z artykułem referencyjnym zestawu SDK języka JavaScript.

  3. Kod aplikacji mobilnej: Użyj zestawu APP CENTER SDK do zbierania zdarzeń z aplikacji, a następnie wyślij kopie tych zdarzeń do usługi Application Szczegółowe informacje do analizy, korzystając z tego przewodnika.

  4. Pobierz dane telemetryczne: Przez kilka minut uruchamiaj projekt w trybie debugowania, a następnie poszukaj wyników w okienku Przegląd w okienku Application Szczegółowe informacje.

    Opublikuj aplikację, aby monitorować jej wydajność i dowiedzieć się, co użytkownicy robią z aplikacją.

Eksplorowanie danych demograficznych i statystyk użycia

Dowiedz się, kiedy użytkownicy korzystają z Aplikacji, jakie strony najbardziej ich interesują, gdzie znajdują się użytkownicy, jakich przeglądarek i systemów operacyjnych używają.

Raporty Użytkownicy i sesje filtrują dane według stron lub zdarzeń niestandardowych i segmentują je według właściwości, takich jak lokalizacja, środowisko i strona. Możesz również dodać własne filtry.

Przechwytywanie ekranu przedstawia kartę Użytkownicy z wykresem słupkowym.

Szczegółowe informacje po prawej stronie wskazują interesujące wzorce w zestawie danych.

  • Raport Użytkownicy zlicza unikatowych użytkowników, którzy mają dostęp do twoich stron w wybranych okresach. W przypadku aplikacji internetowych użytkownicy są zliczane przy użyciu plików cookie. Jeśli ktoś uzyskuje dostęp do witryny za pomocą różnych przeglądarek lub komputerów klienckich lub wyczyści pliki cookie, zostanie zliczony więcej niż raz.
  • Raport Sesje zlicza sesje użytkowników, które mają dostęp do witryny. Sesja to okres aktywności użytkownika, zakończony okresem braku aktywności dłuższym niż pół godziny.

Więcej informacji o narzędziach Użytkownicy, Sesje i Zdarzenia

Przechowywanie — ilu użytkowników wraca?

Przechowywanie pomaga zrozumieć, jak często użytkownicy wracają do korzystania z aplikacji, na podstawie kohort użytkowników, którzy wykonali pewne działania biznesowe w określonym przedziału czasu.

  • Dowiedz się, jakie konkretne funkcje powodują, że użytkownicy powracają więcej niż inne
  • Form hypotheses based on real user data (Hipotezy formularza oparte na rzeczywistych danych użytkownika)
  • Określanie, czy przechowywanie jest problemem w produkcie

Przechwytywanie ekranu przedstawia skoroszyt Przechowywania, który zawiera informacje o tym, jak często użytkownicy wracają do korzystania z aplikacji.

Kontrolki przechowywania u góry umożliwiają zdefiniowanie określonych zdarzeń i zakresu czasu w celu obliczenia okresu przechowywania. Wykres w środku przedstawia wizualną reprezentację całkowitego procentu utrzymania według określonego zakresu czasu. Wykres u dołu reprezentuje indywidualne przechowywanie w danym okresie. Ten poziom szczegółowości pozwala zrozumieć, co robią użytkownicy i co może mieć wpływ na zwracanie użytkowników na bardziej szczegółowy poziom szczegółowości.

Więcej informacji o skoroszycie utrzymania

Niestandardowe zdarzenia biznesowe

Aby lepiej zrozumieć, co użytkownicy robią z aplikacją, warto wstawić wiersze kodu, aby rejestrować zdarzenia niestandardowe. Te zdarzenia mogą śledzić wszystko od szczegółowych akcji użytkownika, takich jak klikanie określonych przycisków, po bardziej znaczące zdarzenia biznesowe, takie jak dokonanie zakupu lub wygranie gry.

Do zbierania zdarzeń niestandardowych można również użyć wtyczki automatycznego zbierania danych usługi Click Analytics.

Chociaż w niektórych przypadkach wyświetlenia stron mogą reprezentować przydatne zdarzenia, ogólnie nie jest to prawdziwe. Użytkownik może otworzyć stronę produktu bez kupowania produktu.

W przypadku określonych zdarzeń biznesowych możesz przedstawiać postęp użytkowników w witrynie. Dowiedz się, jakie są ich preferencje dotyczące różnych opcji i gdzie są one rozwijane lub mają trudności. Mając tę wiedzę, możesz podejmować świadome decyzje dotyczące priorytetów listy prac programistów.

Zdarzenia mogą być rejestrowane po stronie klienta aplikacji:

    appInsights.trackEvent("ExpandDetailTab", {DetailTab: tabName});

Lub po stronie serwera:

    var tc = new Microsoft.ApplicationInsights.TelemetryClient();
    tc.TrackEvent("CreatedAccount", new Dictionary<string,string> {"AccountType":account.Type}, null);
    ...
    tc.TrackEvent("AddedItemToCart", new Dictionary<string,string> {"Item":item.Name}, null);
    ...
    tc.TrackEvent("CompletedPurchase");

Do tych zdarzeń można dołączyć wartości właściwości, aby można było filtrować lub dzielić zdarzenia podczas ich inspekcji w portalu. Do każdego zdarzenia jest również dołączany standardowy zestaw właściwości, taki jak anonimowy identyfikator użytkownika, który umożliwia śledzenie sekwencji działań poszczególnych użytkowników.

Dowiedz się więcej o zdarzeniach niestandardowych i właściwościach.

Zdarzenia wycinka i kostki

W narzędziach Użytkownicy, Sesje i Zdarzenia można tworzyć wycinki i niestandardowych zdarzeń według użytkownika, nazwy zdarzenia i właściwości.

Przechwytywanie ekranu przedstawia kartę Zdarzenia przefiltrowana według wartości AnalyticsItemsOperation i podzielona według wartości AppID.

Projektowanie telemetrii za pomocą aplikacji

Podczas projektowania każdej funkcji aplikacji zastanów się, jak zamierzasz zmierzyć jej sukces z użytkownikami. Zdecyduj, które zdarzenia biznesowe musisz rejestrować, i koduj wywołania śledzenia dla tych zdarzeń w aplikacji od początku.

| Testowanie B

Jeśli nie wiesz, który wariant funkcji będzie bardziej pomyślny, wydaj oba, aby każdy z nich był dostępny dla różnych użytkowników. Zmierz sukces każdego z nich, a następnie przejdź do ujednoliconej wersji.

W przypadku tej techniki dołączasz odrębne wartości właściwości do wszystkich danych telemetrycznych wysyłanych przez każdą wersję aplikacji. Możesz to zrobić, definiując właściwości w aktywnym telemetrii TelemetryContext. Te domyślne właściwości są dodawane do każdego komunikatu telemetrii wysyłanego przez aplikację — nie tylko do komunikatów niestandardowych, ale także do standardowej telemetrii.

W portalu application Szczegółowe informacje przefiltruj i podziel dane według wartości właściwości, aby porównać różne wersje.

W tym celu skonfiguruj inicjator telemetrii:

Aplikacje ASP.NET

    // Telemetry initializer class
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry item)
            {
                var itemProperties = item as ISupportProperties;
                if (itemProperties != null && !itemProperties.Properties.ContainsKey("AppVersion"))
                {
                    itemProperties.Properties["AppVersion"] = "v2.1";
                }
            }
    }

W inicjatorze aplikacji internetowej, takim jak Global.asax.cs:


    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers
         .Add(new MyTelemetryInitializer());
    }

Aplikacje platformy ASP.NET Core

Uwaga

Dodawanie inicjatora przy użyciu lub using jest nieprawidłowe ApplicationInsights.config TelemetryConfiguration.Active ASP.NET Core aplikacji.

Na ASP.NET Core dodawanie nowego jest wykonywane przez dodanie go do TelemetryInitializer kontenera wstrzykiwania zależności, jak pokazano poniżej. Odbywa się to ConfigureServices w metodzie Startup.cs klasy .

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Wszystkie nowe elementy TelemetryClients automatycznie dodają podaną wartość właściwości. Poszczególne zdarzenia telemetrii mogą przesłonić wartości domyślne.

Następne kroki