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

Które funkcje aplikacji internetowej lub mobilnej są najbardziej popularne? Czy użytkownicy osiągają swoje cele w aplikacji? Czy wypadają w określonych punktach i czy wracają później? Usługa Application Insights pomaga uzyskać zaawansowany wgląd w sposób, w jaki użytkownicy korzystają z aplikacji. Za każdym razem, gdy aktualizujesz aplikację, możesz ocenić, jak dobrze działa ona dla użytkowników. Dzięki tej wiedzy możesz podejmować decyzje oparte na danych dotyczące następnego cyklu programowania.

Wysyłanie danych telemetrycznych z aplikacji

Najlepsze środowisko jest uzyskiwane przez zainstalowanie usługi Application Insights 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 na potrzeby analizy.

  1. Kod serwera: Zainstaluj odpowiedni moduł dla ASP.NET, azure, Java, Node.jslub inną aplikację.

  2. Kod strony internetowej: Dodaj następujący skrypt do strony internetowej przed zamknięciem </head>pliku . Zastąp klucz instrumentacji odpowiednią wartością dla zasobu usługi Application Insights.

    Bieżący fragment kodu jest w wersji 5 i jest wymieniony tutaj. Wersja jest kodowana w fragmencie kodu jako sv:"#". Bieżąca wersja jest również dostępna w usłudze 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>
    

    Uwaga

    31 marca 2025 r. zostanie zakończone świadczenie pomocy technicznej dla pozyskiwania klucza instrumentacji. Pozyskiwanie klucza instrumentacji będzie nadal działać, ale nie będziemy już zapewniać aktualizacji ani obsługi funkcji. Przejście do parametrów połączenia w celu skorzystania z nowych możliwości.

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

  3. Kod aplikacji mobilnej: Użyj zestawu SDK centrum aplikacji, aby zbierać zdarzenia z aplikacji. Następnie wyślij kopie tych zdarzeń do usługi Application Insights w celu analizy, postępując zgodnie z tym przewodnikiem.

  4. Pobieranie danych telemetrycznych: Uruchom projekt w trybie debugowania przez kilka minut. Następnie poszukaj wyników w okienku Przegląd w usłudze Application Insights.

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

Eksplorowanie danych demograficznych i statystyk użycia

Dowiedz się, kiedy użytkownicy korzystają z twojej aplikacji i jakie strony są najbardziej zainteresowane. Możesz również dowiedzieć się, gdzie znajdują się użytkownicy, oraz jakie przeglądarki i systemy operacyjne używają.

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

Zrzut ekranu przedstawiający 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 uzyskują dostęp do stron w wybranych okresach. W przypadku aplikacji internetowych użytkownicy są liczone 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 czyści pliki cookie, zostaną one zliczane więcej niż raz.
  • Raport Sesje zlicza liczbę sesji użytkowników, które uzyskują dostęp do witryny. Sesja to okres aktywności użytkownika. Jest on przerywany przez okres braku aktywności ponad pół godziny.

Aby uzyskać więcej informacji na temat narzędzi Użytkownicy, Sesje i Zdarzenia, zobacz Użytkownicy, sesje i analiza zdarzeń w usłudze Application Insights.

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 jakieś działania biznesowe w określonym przedziale czasu. Możesz:

  • Dowiedz się, jakie konkretne funkcje powodują, że użytkownicy wracają więcej niż inni.
  • Formułuj hipotezy oparte na rzeczywistych danych użytkownika.
  • Ustal, czy przechowywanie jest problemem w produkcie.

Zrzut ekranu przedstawiający skoroszyt Przechowywania, w którym są wyświetlane informacje o tym, jak często użytkownicy wracają do korzystania z aplikacji.

Możesz użyć kontrolek przechowywania u góry, aby zdefiniować określone zdarzenia i zakresy czasu w celu obliczenia przechowywania. Wykres w środku przedstawia wizualną reprezentację całkowitego procentu przechowywania według określonego zakresu czasu. Wykres na dole reprezentuje indywidualne przechowywanie w określonym przedziale czasu. 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 stopień szczegółowości.

Aby uzyskać więcej informacji na temat skoroszytu przechowywania, zobacz Analiza przechowywania użytkowników dla aplikacji internetowych za pomocą usługi Application Insights.

Niestandardowe zdarzenia biznesowe

Aby zrozumieć, co użytkownicy robią z aplikacją, warto wstawić wiersze kodu do rejestrowania zdarzeń niestandardowych. Te zdarzenia mogą śledzić wszystkie elementy od szczegółowych akcji użytkownika, takich jak wybieranie określonych przycisków, do bardziej znaczących wydarzeń biznesowych, takich jak dokonywanie zakupu lub wygranie gry.

Do zbierania zdarzeń niestandardowych można również użyć wtyczki Automatycznego zbierania analiz kliknięć .

W niektórych przypadkach widoki stron mogą reprezentować przydatne zdarzenia, ale ogólnie nie są prawdziwe. Użytkownik może otworzyć stronę produktu bez zakupu produktu.

W przypadku określonych zdarzeń biznesowych możesz wykresować postęp użytkowników w witrynie. Możesz dowiedzieć się, jakie są ich preferencje dotyczące różnych opcji i gdzie wypadają lub mają trudności. Dzięki tej wiedzy możesz podejmować świadome decyzje dotyczące priorytetów na liście prac programistycznych.

Zdarzenia mogą być rejestrowane po stronie klienta aplikacji:

      appInsights.trackEvent({name: "incrementCount"});

Lub zdarzenia mogą być rejestrowane 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");

Wartości właściwości można dołączyć do tych zdarzeń, aby można było filtrować lub dzielić zdarzenia podczas ich inspekcji w portalu. Standardowy zestaw właściwości jest również dołączany do każdego zdarzenia, takiego 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 fragmentatora i kostki

W narzędziach Użytkownicy, Sesje i Zdarzenia można podzielić i podzielić zdarzenia niestandardowe według użytkownika, nazwy zdarzenia i właściwości.

Zrzut ekranu przedstawiający kartę Zdarzenia przefiltrowane według elementu AnalyticsItemsOperation i podzielone według identyfikatora AppID.

Projektowanie telemetrii za pomocą aplikacji

Podczas projektowania każdej funkcji aplikacji zastanów się, w jaki sposób zamierzasz zmierzyć jej sukces z użytkownikami. Zdecyduj, jakie zdarzenia biznesowe chcesz rejestrować, i kod wywołań śledzenia tych zdarzeń do aplikacji od samego początku.

| Testowanie B

Jeśli nie wiesz, który wariant funkcji będzie bardziej udany, wydaj i udostępnij każdy wariant różnym użytkownikom. Zmierz powodzenie każdego wariantu, 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 obiekcie TelemetryContext. Te domyślne właściwości są dodawane do każdego komunikatu telemetrii wysyłanego przez aplikację. Oznacza to, że właściwości są dodawane do niestandardowych komunikatów i standardowej telemetrii.

W portalu usługi Application Insights przefiltruj i podziel dane na wartości właściwości, aby można było porównać różne wersje.

Aby wykonać ten krok, skonfiguruj inicjator telemetrii:

Aplikacje ASP.NET

    // Telemetry initializer class
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        // In this example, to differentiate versions, we use the value specified in the AssemblyInfo.cs
        // for ASP.NET apps, or in your project file (.csproj) for the ASP.NET Core apps. Make sure that
        // you set a different assembly version when you deploy your application for A/B testing.
        static readonly string _version = 
            System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
            
        public void Initialize(ITelemetry item)
        {
            item.Context.Component.Version = _version;
        }
    }

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 polecenia ApplicationInsights.config lub TelemetryConfiguration.Active nie jest prawidłowe dla aplikacji ASP.NET Core.

W przypadku ASP.NET Core aplikacji dodanie nowego inicjatora telemetrii odbywa się przez dodanie go do kontenera Wstrzykiwanie zależności, jak pokazano tutaj. Ten krok jest wykonywany w metodzie ConfigureServicesStartup.cs klasy .

using Microsoft.ApplicationInsights.Extensibility;

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Następne kroki