Verwendungsanalyse mit Application Insights

Welche Funktionen Ihrer Web- oder mobilen App sind die beliebtesten? Erreichen die Benutzer mit Ihrer App ihre Ziele? Brechen sie an bestimmten Stellen ab, und kehren sie später zurück? Mit Application Insights erhalten Sie wertvolle Erkenntnisse zur Nutzung Ihrer App durch die Benutzer. Bei jeder Aktualisierung Ihrer App können Sie beurteilen, wie gut sie für Benutzer funktioniert. Mit diesem Wissen können Sie datengesteuerte Entscheidungen über die nächsten Entwicklungszyklen treffen.

Senden von Telemetriedaten aus der App

Die beste Erfahrung erzielen Sie, wenn Sie Application Insights sowohl in Ihrem App-Server-Code als auch auf Ihren Webseiten installieren. Die Client- und die Serverkomponente der App senden Telemetriedaten zur Analyse an das Azure-Portal.

  1. Servercode: Installieren Sie das entsprechende Modul für die ASP.NET-, Azure-, Java-, Node.js-App oder einen anderen Typ von App.

  2. Webseitencode: Fügen Sie Ihrer Webseite vor dem schließenden Tag </head> das folgende Skript hinzu. Ersetzen Sie den Instrumentierungsschlüssel durch den entsprechenden Wert für Ihre Application Insights-Ressource.

    Das aktuelle Snippet ist Version 5 und wird hier aufgelistet. Die Version ist im Snippet als sv:"#" kodiert. Die aktuelle Version ist auch auf GitHub verfügbar.

    <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>
    

    Hinweis

    Am 31. März 2025 wird der Support für die auf Instrumentierungsschlüsseln basierende Erfassung eingestellt. Die Erfassung von Instrumentierungsschlüsseln funktioniert zwar weiterhin, wir stellen jedoch keine Updates und keinen Support mehr für das Feature bereit. Wechseln Sie zu Verbindungszeichenfolgen, damit Sie neue Funktionen nutzen können.

    Informationen zu komplexeren Konfigurationen für die Websiteüberwachung finden Sie im Referenzartikel zum JavaScript SDK.

  3. Mobiler App-Code: Verwenden Sie das App Center SDK, um Ereignisse aus Ihrer App zu erfassen. Senden Sie dann Kopien dieser Ereignisse zur Analyse an Application Insights, indem Sie dieser Anleitung folgen.

  4. Telemetrie abrufen: Führen Sie Ihr Projekt einige Minuten lang im Debugmodus aus. Suchen Sie dann nach Ergebnissen im Übersichtsbereich in Application Insights.

    Veröffentlichen Sie die App, um die Leistung der App zu überwachen und zu ermitteln, was die Benutzer mit Ihrer App tun.

Untersuchen von demografische Daten und Statistiken zur Nutzung

Finden Sie heraus, wann Nutzer Ihre App verwenden und welche Seiten sie am meisten interessieren. Außerdem erfahren Sie, wo sich Ihre Nutzer befinden und welche Browser und Betriebssysteme sie verwenden.

Die Benutzer- und Sitzungsberichte filtern Ihre Daten nach Seiten oder benutzerdefinierten Ereignissen. Die Berichte segmentieren die Daten nach Eigenschaften wie Standort, Umgebung und Seite. Sie können auch eigene Filter hinzufügen.

Screenshot, der die Registerkarte „Benutzer“ mit einem Balkendiagramm zeigt.

Aus den Informationen auf der rechten Seite gehen interessante Muster im Datensatz hervor.

  • Der Bericht Benutzer zählt die eindeutigen Benutzer, die innerhalb der ausgewählten Zeiträume auf Ihre Seiten zugreifen. Für Web-Apps werden Benutzer mithilfe von Cookies gezählt. Wenn jemand mit unterschiedlichen Browsern oder Client-Computern auf Ihre Website zugreift oder seine Cookies löscht, wird er mehr als einmal gezählt.
  • Der Bericht Sitzungen zählt die Benutzersitzungen, die auf Ihre Website zugreifen. Eine Sitzung ist ein Aktivitätszeitraum eines Benutzers. Es wird durch eine Inaktivitätszeit von mehr als einer halben Stunde beendet.

Weitere Informationen zu den Tools „Benutzer“, „Sitzungen“ und „Ereignisse“ finden Sie unter Analyse von Benutzern, Sitzungen und Ereignissen in Visual Studio Online Application Insights.

Vermerkdauer – wie viele Benutzer kehren zurück?

Anhand der Vermerkdauer können Sie basierend auf Kohorten von Benutzern, die während eines bestimmten Zeitrahmens eine Businessaktion durchgeführt haben, nachvollziehen, wie oft Ihre Benutzer die App erneut verwenden. Ihre Möglichkeiten:

  • Verstehen, welche bestimmten Funktionen dazu führen, dass einige Benutzer häufiger zurückkehren als andere.
  • Bilden von Hypothesen basierend auf echten Benutzerdaten.
  • Bestimmen, ob die Vermerkdauer ein Problem in Ihrem Produkt darstellt.

Screenshot, der die Arbeitsmappe „Aufbewahrung“ zeigt, in der Informationen darüber angezeigt werden, wie oft Benutzer ihre App wieder verwenden.

Sie können die Aufbewahrungssteuerelemente oben verwenden, um bestimmte Ereignisse und Zeiträume zur Berechnung der Aufbewahrung zu definieren. Das Diagramm in der Mitte bietet eine visuelle Darstellung des Prozentsatzes der gesamten Vermerkdauer nach dem angegebenen Zeitbereichs. Die Grafik unten zeigt die individuelle Speicherung in einem bestimmten Zeitraum. Dank dieses Detaillierungsgrads können Sie mit höherer Granularität verstehen, was Ihre Benutzer tun und was sich auf zurückkehrende Benutzer auswirkt.

Weitere Informationen zur Arbeitsmappe „Aufbewahrung“ finden Sie unter Analyse der Benutzeraufbewahrung für Webanwendungen mit Visual Studio Online Application Insights.

Benutzerdefinierte Geschäftsereignisse

Um ein genaues Verständnis davon zu erhalten, was Benutzer mit Ihrer App machen, ist es hilfreich, Codezeilen einzufügen, um benutzerdefinierte Ereignisse zu protokollieren. Diese Ereignisse können alles nachverfolgen, von detaillierten Benutzeraktionen wie dem Auswählen bestimmter Schaltflächen bis hin zu wichtigeren Geschäftsereignissen wie dem Tätigen eines Kaufs oder dem Gewinnen eines Spiels.

Sie können auch das Plug-in für die automatische Erfassung von Click Analytics verwenden, um benutzerdefinierte Ereignisse zu erfassen.

In einigen Fällen können Seitenaufrufe nützliche Ereignisse darstellen, aber das ist im Allgemeinen nicht der Fall. Ein Benutzer kann eine Produktseite öffnen, ohne das Produkt zu kaufen.

Mit bestimmten Geschäftsereignisse können Sie den Aufenthalt von Benutzern auf Ihrer Website in einem Diagramm darstellen. Sie können herausfinden, welche Präferenzen sie für verschiedene Optionen haben und wo sie abbrechen oder Schwierigkeiten haben. Mit diesem Wissen können Sie fundierte Entscheidungen über die Prioritäten in Ihrem Entwicklungs-Backlog treffen.

Ereignisse können von der Clientseite der App aus protokolliert werden:

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

Oder Ereignisse können serverseitig protokolliert werden:

    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");

Sie können diesen Ereignissen Eigenschaftswerte zuweisen, sodass Sie die Ereignisse filtern oder aufteilen können, wenn Sie sie im Portal untersuchen. Jedem Ereignis wird ein Standardsatz von Eigenschaften angefügt, z. B. eine anonyme Benutzer-ID, die Ihnen die Ablaufverfolgung der Sequenz von Aktivitäten eines einzelnen Benutzers ermöglicht.

Erfahren Sie mehr über benutzerdefinierte Ereignisse und Eigenschaften.

Aufteilen von Ereignissen

In den Tools für Benutzer, Sitzungen und Ereignisse können Sie benutzerdefinierte Ereignisse nach Benutzer, Ereignisname und Eigenschaften aufteilen.

Screenshot, der die Registerkarte „Ereignisse“ zeigt, die nach AnalyticsItemsOperation gefiltert und nach AppID aufgeteilt ist.

Entwerfen der Telemetrie mit der App

Überlegen Sie beim Entwerfen der einzelnen Funktionen Ihrer App, wie Sie den Erfolg bei Ihren Benutzern messen können. Entscheiden Sie, welche Geschäftsereignisse aufgezeichnet werden müssen, und codieren Sie die Aufrufnachverfolgung für diese Ereignisse von Anfang an in die App.

A/B-Tests

Wenn Sie nicht wissen, welche Variante eines Features erfolgreicher sein wird, geben Sie beide frei und machen Sie jede Variante für verschiedene Benutzer zugänglich. Messen Sie den Erfolg jeder Variante und wechseln Sie dann zu einer einheitlichen Version.

Bei dieser Technik fügen Sie allen Telemetriedaten, die von jeder Version Ihrer App gesendet werden, eindeutige Eigenschaftswerte hinzu. Sie können diesen Schritt ausführen, indem Sie Eigenschaften im aktiven TelemetryContext definieren. Diese Standardeigenschaften werden jeder Telemetrienachricht hinzugefügt, die die Anwendung sendet. Das bedeutet, dass die Eigenschaften zu Ihren benutzerdefinierten Nachrichten und der Standardtelemetrie hinzugefügt werden.

Filtern und teilen Sie Ihre Daten im Application Insights-Portal nach Eigenschaftswerten auf, damit Sie die verschiedenen Versionen vergleichen können.

Dazu richten Sie einen Telemetrieinitialisierer ein:

ASP.NET-Apps

    // 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;
        }
    }

Im Web-App-Initialisierer wie „Global.asax.cs“:


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

ASP.NET Core Apps

Hinweis

Das Hinzufügen eines Initialisierers mit ApplicationInsights.config oder TelemetryConfiguration.Active ist für ASP.NET Core-Anwendungen nicht zulässig.

Für ASP.NET Core-Anwendungen erfolgt das Hinzufügen eines neuen Telemetrie-Initialisierers durch Hinzufügen zum Dependency Injection-Container, wie hier gezeigt. Dieser Schritt erfolgt in der ConfigureServices-Methode Ihrer Startup.cs-Klasse.

using Microsoft.ApplicationInsights.Extensibility;

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

Nächste Schritte