Звіт про винятки з відстеження винятків Google Analytics analytics.js


82

У Google Universal Analytics є тип виключення

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

Я очікував, що зможу просто зайти на консоль Google Analytics і знайти звіт про вилучення на тому ж рівні, що й „події”, проте його ніде не видно.

API для Android та iOS кажуть, Crash and exception data is available primarily in the Crash and Exceptions reportале я не можу знайти жодного звіту з таким ім’ям.

Відповіді:


129

Розібрався. Я не впевнений, чому вони не роблять це вбудованим звітом, але можливо колись.

Я створив власний віджет на інформаційній панелі з Exception Descriptionдля вимірювання та "Збої" для метрики:

введіть тут опис зображення

Що дає мені такий звіт:

введіть тут опис зображення

Ви також можете перейти на Customizationвкладку та створити власний звіт, щоб отримати таблицю помилок, а потім додати його на свою інформаційну панель.

введіть тут опис зображення

Використовується з цим глобальним обробником винятків

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

Ви можете розмістити цей обробник де завгодно під час ініціалізації вашого Javascript - це буде залежати від того, як ви налаштували всі свої файли JS. Крім того, ви можете просто помістити його всередину <script>тегу у верхній частині вашого тегу HTML.



3
Показник "Аварії" для мене не спрацював. Але цей спеціальний звіт спрацював imgur.com/a/Ux57LEE Я використовую gtag
Jayesh

2
Також це не відображається у звіті в режимі реального часу. Яка прикрість.
stevemao

5
О, це питання було задано чотири роки тому ... Вони ще не вдосконалили його :(
stevemao

1
За даними показників, «Збої» не показували для мене жодних даних. Мені довелося обрати винятки.
Панкай

42

Я взяв посібник Simon_Weaver, щоб зробити власний звіт ще на кілька кроків, і склав досить повний звіт про спеціальні винятки Google Analytics. Я зрозумів, що, можливо, варто поділитися ними, і завантажив його до GA "Галерея рішень".

Мій шаблон: Звіт про винятки Google Analytics

Ось картинка кінцевого результату:

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


3
Це стало моїм улюбленим звітом для відстеження винятків, і я настійно рекомендую іншим вибрати цей (поки Google Analytics не надасть вбудований звіт).
GreatBlakes

Якщо ви коли-небудь отримаєте можливість додати сюди кілька знімків екрану, як працює ваш шаблон, це було б чудово.
Simon_Weaver

@Simon_Weaver Я просто спробував, продовжив і додав, як це виглядає. Відфільтровано фактичні описи винятків, але вони відображаються. Сподіваюся , що допомагає
Август

7

Я просто хотів трохи розширити чудову відповідь @Simon_Weaver, щоб надати звіти про помилки з кількома додатковими деталями:

  • Перш ga()ніж намагатися викликати його, переконайтеся, що його визначено (оскільки помилка може бути спровокована до завантаження бібліотеки Analytics).
  • Номери рядків винятків журналу та індекс стовпців у звітах Analytics (хоча мінімізований код JavaScript, який використовується у виробництві, може бути важко прочитати).
  • Виконайте будь-який визначений раніше window.onerrorзворотний виклик.
/**
 * 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!');

Редагувати: Як належним чином зазначено @Simon_Weaver, Google Analytics тепер має документацію про відстеження винятків (на що я мав би зв’язати свою оригінальну відповідь - вибачте, помилка новачка!):


idk, якщо це допустимо для розміщення appNameта appVersionв об'єкті винятку, який ви надсилаєте? Я вважаю, що ви повинні чітко встановити тих, кого тут
серпень

1

Це те, що я придумав, тому вам не потрібно всюди включати код. Просто додайте new ErrorHandler();до кожного файлу .js. Це було зроблено для розширення Chrome, але, думаю, воно має працювати де завгодно. Я реалізую фактичний матеріал ga () в окремому файлі (отже, app.GA), але ви можете також спекти його тут.

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

Привіт Майкл. У мене швидке запитання ... Я не впевнений у необхідності цієї структури - навіщо створювати функцію як другий параметр, і передавати вікно, а потім повертати початкову функцію ?? Здається, тут є 3 непотрібні кроки. Або чогось мені не вистачає?
Дренай

0

Тепер ви можете знайти подання "Збої та винятки" в розділі "Поведінка" (якщо властивість створюється як "мобільний додаток" у Google Analytics).

Бічне меню в Google Analytics станом на травень 2018 року


Я не бачу цього на своїй інформаційній панелі GA
technomage

@technomage Чи було створено ваш ресурс GA як "веб-сайт" чи "мобільний додаток"?
ajcurtis

Він був створений як веб-сайт. Зрештою я знайшов вихідні дані, але мені довелося створити для них спеціальний звіт.
technomage

Я вручну надсилаю інформацію про "винятки" за допомогою JavaScript GA.
technomage

Гаразд, це має сенс, чому ви можете не бачити однаковий вигляд. Знімок екрана було зроблено з властивості, створеної як мобільний додаток (також за винятками, надісланими вручну).
ajcurtis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.