Google Analytics analytics.js 예외 추적에서 예외보고


81

Google 유니버설 애널리틱스에는 조회 유형 예외가 있습니다.

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

Google Analytics 콘솔로 이동하여 '이벤트'와 동일한 수준의 예외 보고서를 찾을 수있을 것으로 기대했지만 볼 수있는 곳이 없습니다.

Android 및 iOS API에 따르면 Crash and exception data is available primarily in the Crash and Exceptions report해당 이름으로 보고서를 찾을 수 없습니다.

답변:


128

그것을 알아 냈습니다. 왜 그들이 이것을 내장 된 보고서로 만들지 않는지 모르겠지만 언젠가는 아마.

Exception Description차원 에 대한 대시 보드와 메트릭에 대한 'Crashes'를 사용하여 사용자 정의 위젯을 만들었습니다 .

여기에 이미지 설명 입력

다음과 같은 보고서를 제공합니다.

여기에 이미지 설명 입력

Customization탭으로 이동하여 오류 표를 제공하는 사용자 지정 보고서를 만든 다음 대시 보드에 추가 할 수도 있습니다.

여기에 이미지 설명 입력

이 전역 예외 처리기와 함께 사용

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

이 핸들러는 자바 스크립트 초기화의 어느 곳에 나 배치 할 수 있습니다. 이는 모든 JS 파일을 어떻게 구성했는지에 따라 달라집니다. 또는 <script>html body 태그 상단 근처의 태그 안에 넣을 수도 있습니다 .



2
'Crashes'메트릭이 작동하지 않았습니다. 하지만이 사용자 지정 보고서는 작동했습니다. imgur.com/a/Ux57LEE gtag를 사용하고 있습니다
— Jayesh

2
또한 이것은 실시간 보고서에 나타나지 않습니다. 유감입니다.
— stevemao

5
오,이 질문은 ... 그들은 :( 아직 개선되지 않은 4 년 전에 질문을 받았다
— stevemao을

1
메트릭에서 Crashes는 나에게 데이터를 표시하지 않았습니다. 나는 예외를 선택해야했다.
— Pankaj

42

Simon_Weaver의 가이드를 통해 맞춤 보고서를 몇 단계 더 발전 시켰고 상당히 완전한 Google Analytics 맞춤 예외 보고서를 작성했습니다. 공유 할 가치가있을 것 같아서 GA "솔루션 갤러리"에 업로드했습니다.

내 템플릿 : Google Analytics 예외 보고서

다음은 최종 결과의 그림입니다.

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


3
이것은 예외 추적을 위해 제가 가장 좋아하는 보고서가되었으며, 다른 사람들이이 보고서를 선택하는 것이 좋습니다 (Google Analytics가 기본 제공 보고서를 제공 할 때까지).
— GreatBlakes 2017-06-13

템플릿이 어떻게 작동하는지 여기에 스크린 샷을 추가 할 기회가 있다면 좋을 것입니다.
— Simon_Weaver

@Simon_Weaver 방금 시도해보고 어떻게 생겼는지 추가했습니다. 실제 예외 설명을 필터링했지만 표시됩니다. 도움이 되었기를 바랍니다
— aug

7

몇 가지 추가 세부 정보와 함께 오류 보고서를 제공하기 위해 @Simon_Weaver의 훌륭한 답변에 대해 조금 확장하고 싶었습니다.

  • ga()호출을 시도하기 전에이 정의되어 있는지 확인하십시오 (분석 라이브러리가로드되기 전에 오류가 트리거 될 수 있음).
  • 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보내는 예외 개체에 넣을 수 있습니까? 여기에서
— aug

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 단계가있는 것 같습니다. 아니면 내가 놓친 것이 있습니까?
— Drenai

0

이제 동작 아래에서 '비정상 종료 및 예외'보기를 찾을 수 있습니다 (Google 애널리틱스에서 속성이 '모바일 앱'으로 생성 된 경우).

2018 년 5 월 현재 Google Analytics의 사이드 메뉴


나는 나의 GA 대시 보드이 표시되지 않습니다
— technomage

@technomage GA 속성이 "웹 사이트"또는 "모바일 앱"으로 생성 되었습니까?
— ajcurtis

웹 사이트로 만들어졌습니다. 결국 원시 데이터를 찾았지만 이에 대한 맞춤형 보고서를 만들어야했습니다.
— technomage

GA 자바 스크립트를 통해 "예외"정보를 수동으로 보내고 있습니다.
— technomage

좋아, 그게 당신이 같은 관점을 보지 못할 수도있는 이유입니다. 스크린 샷은 모바일 앱으로 생성 된 속성에서 가져온 것입니다 (수동으로 전송 된 예외도 있음).
— ajcurtis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.