Bericht für Ausnahmen von Google Analytics Analytics.js Ausnahmeverfolgung

81

Google Universal Analytics hat eine Ausnahme vom Typ Treffer

ga('send', 'exception', {
  'exDescription': 'DatabaseError'
});

Ich hatte erwartet, dass ich einfach zur Google Analytics-Konsole gehen und einen Ausnahmebericht auf der gleichen Ebene wie "Ereignisse" finden kann, der jedoch nirgends zu sehen ist.

Die Android- und iOS-APIs sagen, Crash and exception data is available primarily in the Crash and Exceptions reportaber ich kann keinen Bericht mit diesem Namen finden.

Simon_Weaver
quelle

Antworten:

128

Herausgefunden. Ich bin mir nicht sicher, warum sie dies nicht zu einem eingebauten Bericht machen, aber vielleicht eines Tages.

Ich habe ein benutzerdefiniertes Widget in einem Dashboard mit Exception Descriptionfür Dimension und 'Abstürze' für die Metrik erstellt:

Geben Sie hier die Bildbeschreibung ein

Was mir einen Bericht wie diesen gibt:

Geben Sie hier die Bildbeschreibung ein

Sie können auch zur CustomizationRegisterkarte gehen und einen benutzerdefinierten Bericht erstellen, um eine Fehlertabelle zu erhalten, und ihn dann Ihrem Dashboard hinzufügen.

Geben Sie hier die Bildbeschreibung ein

Wird mit diesem globalen Ausnahmebehandler verwendet

if (typeof window.onerror == "object")
{
    window.onerror = function (err, url, line)
    {
        if (ga) 
        {
           ga('send', 'exception', {
               'exDescription': line + " " + err
           });
        }
    };
}

Sie können diesen Handler an einer beliebigen Stelle in die Initialisierung Ihres Javascript einfügen. Dies hängt davon ab, wie Sie alle Ihre JS-Dateien konfiguriert haben. Alternativ können Sie es einfach in ein <script>Tag am oberen Rand Ihres HTML-Body-Tags einfügen.

Simon_Weaver
quelle
1
Und gtag.js ? developer.google.com/analytics/devguides/collection/gtagjs/…
PreguntonCojoneroCabrón
2
Die Metrik "Abstürze" hat bei mir nicht funktioniert. Aber dieser benutzerdefinierte Bericht funktionierte imgur.com/a/Ux57LEE Ich verwende gtag
Jayesh
2
Auch dies erscheint nicht im Echtzeitbericht. Was für eine Schande.
Stevemao
5
Oh, diese Frage wurde vor vier Jahren gestellt ... Sie haben sie noch nicht verbessert :(
stevemao
1
Unter Metriken zeigte Crashes keine Daten für mich an. Ich musste Ausnahmen wählen.
Pankaj
42

Ich habe den Leitfaden von Simon_Weaver verwendet, um ein paar Schritte weiter einen benutzerdefinierten Bericht zu erstellen, und einen ziemlich vollständigen Bericht über benutzerdefinierte Ausnahmen von Google Analytics erstellt. Ich dachte, es könnte sich lohnen, es zu teilen, und habe es in die GA "Solutions Gallery" hochgeladen.

Meine Vorlage: Google Analytics-Ausnahmebericht

Hier ist ein Bild des Endergebnisses:

https://imgur.com/a/1UYIzrZ

rwdsco
quelle
3
Dies ist mein Lieblingsbericht für die Ausnahmeverfolgung geworden, und ich empfehle anderen dringend, diesen zu wählen (bis Google Analytics einen integrierten Bericht bereitstellt).
GreatBlakes
Wenn Sie jemals die Möglichkeit haben, hier einige Screenshots der Funktionsweise Ihrer Vorlage hinzuzufügen, wäre das großartig.
Simon_Weaver
@ Simon_Weaver Ich habe es gerade ausprobiert und hinzugefügt, wie es aussieht. Die tatsächlichen Ausnahmebeschreibungen wurden herausgefiltert, aber sie werden angezeigt. Hoffentlich hilft
aug
7

Ich wollte nur die ausgezeichnete Antwort von @Simon_Weaver etwas erweitern, um Fehlerberichte mit ein paar zusätzlichen Details zu versehen:

  • Stellen Sie sicher, dass ga()es definiert ist, bevor Sie versuchen, es aufzurufen (da ein Fehler ausgelöst werden kann, bevor die Analytics-Bibliothek geladen wird).
  • Protokollieren Sie die Ausnahmezeilennummern und den Spaltenindex in den Analytics-Berichten (obwohl der in der Produktion verwendete minimierte JavaScript-Code möglicherweise schwer zu lesen ist).
  • Führen Sie einen zuvor definierten window.onerrorRückruf aus.
/**
 * Send JavaScript error information to Google Analytics.
 * 
 * @param  {Window} window A reference to the "window".
 * @return {void}
 * @author Philippe Sawicki <https://github.com/philsawicki>
 */
(function (window) {
    // Retain a reference to the previous global error handler, in case it has been set:
    var originalWindowErrorCallback = window.onerror;

    /**
     * Log any script error to Google Analytics.
     *
     * Third-party scripts without CORS will only provide "Script Error." as an error message.
     * 
     * @param  {String}           errorMessage Error message.
     * @param  {String}           url          URL where error was raised.
     * @param  {Number}           lineNumber   Line number where error was raised.
     * @param  {Number|undefined} columnNumber Column number for the line where the error occurred.
     * @param  {Object|undefined} errorObject  Error Object.
     * @return {Boolean}                       When the function returns true, this prevents the 
     *                                         firing of the default event handler.
     */
    window.onerror = function customErrorHandler (errorMessage, url, lineNumber, columnNumber, errorObject) {
        // Send error details to Google Analytics, if the library is already available:
        if (typeof ga === 'function') {
            // In case the "errorObject" is available, use its data, else fallback 
            // on the default "errorMessage" provided:
            var exceptionDescription = errorMessage;
            if (typeof errorObject !== 'undefined' && typeof errorObject.message !== 'undefined') {
                exceptionDescription = errorObject.message;
            }

            // Format the message to log to Analytics (might also use "errorObject.stack" if defined):
            exceptionDescription += ' @ ' + url + ':' + lineNumber + ':' + columnNumber;

            ga('send', 'exception', {
                'exDescription': exceptionDescription,
                'exFatal': false, // Some Error types might be considered as fatal.
                'appName': 'Application_Name',
                'appVersion': '1.0'
            });
        }

        // If the previous "window.onerror" callback can be called, pass it the data:
        if (typeof originalWindowErrorCallback === 'function') {
            return originalWindowErrorCallback(errorMessage, url, lineNumber, columnNumber, errorObject);
        }
        // Otherwise, Let the default handler run:
        return false;
    };
})(window);

// Generate an error, for demonstration purposes:
//throw new Error('Crash!');

Bearbeiten: Wie @Simon_Weaver ordnungsgemäß feststellte, verfügt Google Analytics jetzt über eine Dokumentation zur Ausnahmeverfolgung (auf die ich in meiner ursprünglichen Antwort hätte verweisen sollen - Entschuldigung, Anfängerfehler!):

Philippe Sawicki
quelle
IDK , wenn es gültig ist , zu setzen appNameund appVersionin dem Ausnahmeobjekt Sie schicken? Ich glaube , Sie müssen explizit diejenigen sehen hier
aug
1

Dies ist, was ich mir ausgedacht habe, damit Sie den Code nicht überall einfügen müssen. new ErrorHandler();Fügen Sie einfach zu jeder .js-Datei hinzu. Dies wurde für eine Chrome-Erweiterung durchgeführt, sollte aber meiner Meinung nach überall funktionieren. Ich implementiere das eigentliche ga () Zeug in eine separate Datei (daher die app.GA), aber Sie können es auch hier backen.

/*
 *  Copyright (c) 2015-2017, Michael A. Updike All rights reserved.
 *  Licensed under the BSD-3-Clause
 *  https://opensource.org/licenses/BSD-3-Clause
 *  https://github.com/opus1269/photo-screen-saver/blob/master/LICENSE.md
 */
// noinspection ThisExpressionReferencesGlobalObjectJS
(function(window, factory) {
    window.ExceptionHandler = factory(window);
}(this, function(window) {
    'use strict';

    return ExceptionHandler;

    /**
     * Log Exceptions with analytics. Include: new ExceptionHandler();<br />
     * at top of every js file
     * @constructor
     * @alias ExceptionHandler
     */
    function ExceptionHandler() {
        if (typeof window.onerror === 'object') {
            // global error handler
            window.onerror = function(message, url, line, col, errObject) {
                if (app && app.GA) {
                    let msg = message;
                    let stack = null;
                    if (errObject && errObject.message && errObject.stack) {
                        msg = errObject.message;
                        stack = errObject.stack;
                    }
                    app.GA.exception(msg, stack);
                }
            };
        }
    }
}));
Michael Updike
quelle
Hallo Michael. Ich habe eine kurze Frage ... Ich bin mir nicht sicher, ob diese Struktur erforderlich ist - warum die Funktion als zweiten Parameter erstellen, das Fenster übergeben und dann die ursprüngliche Funktion zurückgeben? Es scheint, dass es hier 3 unnötige Schritte gibt. Oder fehlt mir etwas?
Drenai
0

Sie finden jetzt unter Verhalten eine Ansicht "Abstürze und Ausnahmen" (wenn die Eigenschaft in Google Analytics als "mobile App" erstellt wurde).

Seitenmenü in Google Analytics ab Mai 2018

Ajcurtis
quelle
Ich sehe das nicht in meinem GA-Dashboard
Technomage
@technomage Wurde Ihre GA-Eigenschaft als "Website" oder "mobile App" erstellt?
Ajcurtis
Es wurde als Website erstellt. Ich fand schließlich die Rohdaten, musste aber einen benutzerdefinierten Bericht dafür erstellen.
Technomage
Ich sende manuell "Ausnahme" -Informationen über GA-Javascript.
Technomage
Ok, das macht Sinn, warum Sie möglicherweise nicht dieselbe Ansicht sehen. Der Screenshot stammt aus einer Eigenschaft, die als mobile App erstellt wurde (auch mit manuell gesendeten Ausnahmen).
Ajcurtis