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.