콘텐츠로 이동

브라우저 로그 수집


Web 브라우저 또는 JavaScript 클라이언트를 통해 다양한 수준의 로그 데이터(对应的 source:browser_log 메트릭 유형 로그 데이터)를 Guance로 능동적으로 전송합니다.

  • 사용자 정의 로그 데이터 수집: SDK를 클라이언트 애플리케이션에 통합하여 다양한 시나리오에 맞는 로그 데이터를 수집합니다.
  • 애플리케이션 측 오류 정보(네트워크 오류, console 오류, JS 오류 포함)를 자동으로 수집하여 Guance에 보고합니다.
  • 사용자 정의 오류 수준(debug, critical, error, info, warn), 사용자 정의 Logger 객체 및 사용자 정의 Log 필드를 지원합니다.
  • RUM 관련 데이터를 자동으로 수집하여 RUM 비즈니스 시나리오와 연동합니다.

시작하기

사전 조건

  1. DataKit이 설치되어 있고 공개 네트워크에서 접근 가능하며 IP 지리 정보 데이터베이스가 설치되어 있는지 확인합니다.
  2. SDK 통합 시 datakitOrigin를 DataKit의 도메인 또는 IP로 설정합니다.

  1. 콘솔에서 clientTokensite 등의 매개변수를 획득합니다.
  2. SDK 통합 시 datakitOrigin를 구성할 필요가 없으며, 데이터는 기본적으로 공용 DataWay로 전송됩니다.

SDK 구성

연동 방식 설명
NPM SDK 코드를 프런트엔드 프로젝트에 함께 번들링합니다. 이 방식은 프런트엔드 페이지 성능에 영향을 주지 않지만, SDK 초기화 이전의 요청 및 오류 수집을 놓칠 수 있습니다.
CDN 비동기 로드 CDN 가속 캐시를 통해 비동기 스크립트 방식으로 SDK 스크립트를 로드합니다. 이 방식은 SDK 스크립트 다운로드가 페이지 로딩 성능에 영향을 미치지 않도록 하지만, SDK 초기화 이전의 요청 및 오류 수집을 놓칠 수 있습니다.
CDN 동기 로드 CDN 가속 캐시를 통해 동기 스크립트 방식으로 SDK 스크립트를 로드합니다. 이 방식은 모든 오류, 리소스, 요청, 성능 지표를 수집할 수 있지만, 페이지 로딩 성능에 영향을 줄 수 있습니다.

NPM

import { datafluxLogs } from "@cloudcare/browser-logs"
datafluxLogs.init({
  datakitOrigin: "<DataKit的域名或IP>", // DK 방식 연동 시 필요
  clientToken: "clientToken", // 공용 OpenWay 연동 시 입력 필요
  site: "공용 OpenWay 주소", // 공용 OpenWay 연동 시 입력 필요
  //service: 'browser',
  //forwardErrorsToLogs:true
})

CDN 비동기 로드

<script>
  ;(function (h, o, u, n, d) {
    h = h[d] = h[d] || {
      q: [],
      onReady: function (c) {
        h.q.push(c)
      },
    }
    d = o.createElement(u)
    d.async = 1
    d.src = n
    n = o.getElementsByTagName(u)[0]
    n.parentNode.insertBefore(d, n)
  })(
    window,
    document,
    "script",
    "https://static.guance.com/browser-sdk/v3/dataflux-logs.js",
    "DATAFLUX_LOGS"
  )
  DATAFLUX_LOGS.onReady(function () {
    DATAFLUX_LOGS.init({
      datakitOrigin: "<DataKit的域名或IP>", // DK方式接入时需要配置
      clientToken: "clientToken", // 公网 OpenWay 接入时,需要填写
      site: "公网 OpenWay 地址", // 公网 OpenWay 接入时,需要填写
      //service: 'browser',
      //forwardErrorsToLogs:true
    })
  })
</script>

CDN 동기 로드

<script
  src="https://static.guance.com/browser-sdk/v3/dataflux-logs.js"
  type="text/javascript"
></script>
<script>
  window.DATAFLUX_LOGS &&
    window.DATAFLUX_LOGS.init({
      datakitOrigin: "<DataKit的域名或IP>", // DK方式接入时需要配置
      clientToken: "clientToken", // 公网 OpenWay 接入时,需要填写
      site: "公网 OpenWay 地址", // 公网 OpenWay 接入时,需要填写
      //service: 'browser',
      //forwardErrorsToLogs:true
    })
</script>

구성

초기화 매개변수

매개변수 유형 필수 여부 기본값 설명
datakitOrigin String DataKit 데이터 보고 Origin 참고: 协议(包括://),域名(或 IP 地址)[和端口号] 예: https://www.datakit.com, http://100.20.34.3:8088。
clientToken String openway 방식으로 데이터를 보고하기 위한 토큰, Guance 콘솔에서 획득, 필수(공용 openway 방식 연동).
site String 공용 openway 방식으로 데이터를 보고할 주소, Guance 콘솔에서 획득, 필수(공용 openway 방식 연동).
service String 아니요 browser 로그 Service 이름
env String 아니요 Web 애플리케이션의 현재 환경, 예: Prod: 프로덕션 환경; Gray: 카나리 환경; Pre: 사전 릴리스 환경; Common: 일반 환경; Local: 로컬 환경.
version String 아니요 Web 애플리케이션의 버전 번호
sessionSampleRate Number 아니요 100 지표 데이터 수집 비율: 100은 전체 수집, 0은 수집하지 않음
tracingSampleRate Number 아니요 100 트레이스 데이터 샘플링 비율: 100은 전체 수집, 0은 수집하지 않음
forwardErrorsToLogs Boolean 아니요 true false로 설정하면 console.error, JS 및 네트워크 오류를 Guance 로그 데이터로 보고하는 것을 중지합니다.
silentMultipleInit Boolean 아니요 false 여러 로그 객체가 초기화되는 것을 허용하지 않습니다.
forwardConsoleLogs 문자열/배열 수집할 브라우저 console 로그 유형, 선택 가능 값: error, log, info, warn, error
storeContextsToLocal Boolean 아니요 버전 요구 사항: >3.1.2. 사용자 정의 데이터를 로컬 localStorage에 캐시할지 여부. 예: setUser, addGlobalContext API로 추가한 사용자 정의 데이터.
storeContextsKey String 아니요 버전 요구 사항: >3.1.18. localStorage에 저장할 key를 정의합니다. 기본값은 비어 있으며 자동 생성됩니다. 이 매개변수는 동일한 도메인 내에서 서로 다른 하위 경로가 store를 공유하는 문제를 구분하기 위한 것입니다.

사용법

애플리케이션에서 SDK를 초기화한 후, 노출된 JS API를 통해 로그 데이터를 사용자 정의할 수 있습니다.

logger.debug | info | warn | error | critical (message: string, messageContext = Context)

NPM

import { datafluxLogs } from "@cloudcare/browser-logs"

datafluxLogs.logger.info("Button clicked", { name: "buttonName", id: 123 })

CDN 비동기

DATAFLUX_LOGS.onReady(function () {
  DATAFLUX_LOGS.logger.info("Button clicked", { name: "buttonName", id: 123 })
})

CDN 동기

window.DATAFLUX_LOGS && DATAFLUX_LOGS.logger.info("Button clicked", { name: "buttonName", id: 123 })

반환 데이터 구조

{
  "service": "browser",
  "session": {
    "id": "c549c2b8-4955-4f74-b7f8-a5f42fc6e79b"
  },
  "type": "logger",
  "_dd": {
    "sdk_name": "Web LOG SDK",
    "sdk_version": "1.0.0",
    "env": "",
    "version": ""
  },
  "device": {
    "os": "Mac OS",
    "os_version": "10.14.6",
    "os_version_major": "10",
    "browser": "Chrome",
    "browser_version": "90.0.4430.85",
    "browser_version_major": "90",
    "screen_size": "2560*1440",
    "network_type": "3g",
    "divice": "PC"
  },
  "user": {},
  "date": 1621321916756,
  "view": {
    "referrer": "",
    "url": "http://localhost:8080/",
    "host": "localhost:8080",
    "path": "/",
    "path_group": "/",
    "url_query": "{}",
    "id": "5dce64f4-8d6d-411a-af84-c41653ccd94a"
  },
  "application": {
    "id": "app_idxxxxxx"
  },
  "message": "XHR error get http://testing-ft2x-api.cloudcare.cn/api/v1/workspace/xxx",
  "status": "error",
  "tags": {},
  "error": {
    "source": "network",
    "stack": "Failed to load"
  },
  "resource": {
    "method": "get",
    "status": 0,
    "status_group": 0,
    "url": "http://testing-ft2x-api.cloudcare.cn/api/v1/workspace/xxx",
    "url_host": "testing-ft2x-api.cloudcare.cn",
    "url_path": "/api/v1/workspace/xxx",
    "url_path_group": "/api/?/workspace/xxx"
  }
}

Status 매개변수

SDK 초기화 후 제공되는 log API를 사용하여 다양한 유형의 상태를 정의할 수 있습니다.

log (message: string, messageContext: Context, status? = 'debug' | 'info' | 'warn' | 'error' | 'critical')

NPM

import { datafluxLogs } from '@cloudcare/browser-logs'

datafluxLogs.logger.log(<MESSAGE>,<JSON_ATTRIBUTES>,<STATUS>);

CDN 비동기

DATAFLUX_LOGS.onReady(function () {
  DATAFLUX_LOGS.logger.log(<MESSAGE>,<JSON_ATTRIBUTES>,<STATUS>);
})

CDN 동기

window.DATAFLUX_LOGS && DATAFLUX_LOGS.logger.log(<MESSAGE>,<JSON_ATTRIBUTES>,<STATUS>);

매개변수 설명

매개변수 설명
<MESSAGE> Guance 로그의 Message 필드
<JSON_ATTRIBUTES> Message를 설명하는 추가 데이터, JSON 객체
<STATUS> 로그 수준, 선택 가능 값: debug, info, warn, error, critical

사용자 정의 추가 데이터 TAG


LOG 초기화 후 setGlobalContextProperty(key:string,value:any) API를 사용하여 애플리케이션에서 수집된 모든 LOG 이벤트에 추가 TAG를 추가합니다.

TAG 추가

window.DATAFLUX_LOGS && window.DATAFLUX_LOGS.setGlobalContextProperty('<CONTEXT_KEY>', '<CONTEXT_VALUE>');

// 코드 예시
window.DATAFLUX_LOGS && window.DATAFLUX_LOGS.setGlobalContextProperty('isvip', 'xxxx');
window.DATAFLUX_LOGS && window.DATAFLUX_LOGS.setGlobalContextProperty('activity', {
    hasPaid: true,
    amount: 23.42
});
DATAFLUX_LOGS.onReady(function() {
    DATAFLUX_LOGS.setGlobalContextProperty('<CONTEXT_KEY>', '<CONTEXT_VALUE>');
})

// 코드 예시
DATAFLUX_LOGS.onReady(function() {
    DATAFLUX_LOGS.setGlobalContextProperty('isvip', 'xxxx');
})
DATAFLUX_LOGS.onReady(function() {
    DATAFLUX_LOGS.setGlobalContextProperty('activity', {
        hasPaid: true,
        amount: 23.42
    });
})
import { datafluxLogs } from '@cloudcare/browser-logs'
datafluxLogs.setGlobalContextProperty('<CONTEXT_KEY>', <CONTEXT_VALUE>);

// 코드 예시
datafluxLogs && datafluxLogs.setGlobalContextProperty('isvip', 'xxxx');
datafluxLogs.setGlobalContextProperty('activity', {
    hasPaid: true,
    amount: 23.42
});

TAG 교체 (덮어쓰기)

window.DATAFLUX_LOGS &&
     window.DATAFLUX_LOGS.setGlobalContext({ '<CONTEXT_KEY>': '<CONTEXT_VALUE>' });

// 코드 예시
window.DATAFLUX_LOGS &&
     window.DATAFLUX_LOGS.setGlobalContext({
        codeVersion: 34,
    });
 window.DATAFLUX_LOGS.onReady(function() {
     window.DATAFLUX_LOGS.setGlobalContext({ '<CONTEXT_KEY>': '<CONTEXT_VALUE>' });
})

// 코드 예시
 window.DATAFLUX_LOGS.onReady(function() {
     window.DATAFLUX_LOGS.setGlobalContext({
        codeVersion: 34,
    })
})
import { datafluxLogs } from '@cloudcare/browser-logs'

datafluxLogs.setGlobalContext({ '<CONTEXT_KEY>': '<CONTEXT_VALUE>' });

// 코드 예시
datafluxLogs.setGlobalContext({
    codeVersion: 34,
});

설정된 모든 사용자 정의 TAG 가져오기

var context = window.DATAFLUX_LOGS &&  window.DATAFLUX_LOGS.getGlobalContext();
 window.DATAFLUX_LOGS.onReady(function() {
    var context =  window.DATAFLUX_LOGS.getGlobalContext();
});
import { datafluxLogs } from '@cloudcare/browser-logs'

const context = datafluxLogs.getGlobalContext();

특정 key에 해당하는 사용자 정의 TAG 제거

var context = window.DATAFLUX_LOGS &&  window.DATAFLUX_LOGS.removeGlobalContextProperty('<CONTEXT_KEY>');
 window.DATAFLUX_LOGS.onReady(function() {
    var context =  window.DATAFLUX_LOGS.removeGlobalContextProperty('<CONTEXT_KEY>');
});
import { datafluxLogs } from '@cloudcare/browser-logs'

const context = datafluxLogs.removeGlobalContextProperty('<CONTEXT_KEY>');

모든 사용자 정의 TAG 제거

var context = window.DATAFLUX_LOGS &&  window.DATAFLUX_LOGS.clearGlobalContext();
 window.DATAFLUX_LOGS.onReady(function() {
    var context =  window.DATAFLUX_LOGS.clearGlobalContext();
});
import { datafluxLogs } from '@cloudcare/browser-logs'

const context = datafluxLogs.clearGlobalContext();

사용자 정의 사용자 식별


SDK는 기본적으로 사용자에게 고유 식별 ID를 자동으로 생성합니다. 이 ID는 식별 속성을 가지지 않으며, 서로 다른 사용자 속성을 구분하는 용도로만 사용됩니다. 따라서 현재 사용자에게 다양한 식별 속성을 추가할 수 있는 추가 API를 제공합니다.

속성 유형 설명
user.id string 사용자 ID
user.name string 사용자 닉네임 또는 사용자 이름
user.email string 사용자 이메일

참고: 다음 속성은 선택 사항이지만, 최소한 하나는 제공하는 것이 좋습니다.

사용자 식별 추가

window.DATAFLUX_LOGS && window.DATAFLUX_LOGS.setUser({
    id: '1234',
    name: 'John Doe',
    email: 'john@doe.com',
})
window.DATAFLUX_LOGS.onReady(function() {
    window.DATAFLUX_LOGS.setUser({
        id: '1234',
        name: 'John Doe',
        email: 'john@doe.com',
    })
})
import { datafluxLogs } from '@cloudcare/browser-logs'
datafluxLogs.setUser({
    id: '1234',
    name: 'John Doe',
    email: 'john@doe.com',
})

사용자 식별 제거

window.DATAFLUX_LOGS && window.DATAFLUX_LOGS.clearUser()
window.DATAFLUX_LOGS.onReady(function() {
    window.DATAFLUX_LOGS.clearUser()
})
import { datafluxLogs } from '@cloudcare/browser-logs'
datafluxLogs.clearUser()

문서 평가

이 페이지가 도움이 되었나요?