브라우저 로그 수집¶
Web 브라우저 또는 JavaScript 클라이언트를 통해 다양한 수준의 로그 데이터(对应的 source:browser_log 메트릭 유형 로그 데이터)를 Guance로 능동적으로 전송합니다.
- 사용자 정의 로그 데이터 수집: SDK를 클라이언트 애플리케이션에 통합하여 다양한 시나리오에 맞는 로그 데이터를 수집합니다.
- 애플리케이션 측 오류 정보(네트워크 오류, console 오류, JS 오류 포함)를 자동으로 수집하여 Guance에 보고합니다.
- 사용자 정의 오류 수준(
debug,critical,error,info,warn), 사용자 정의 Logger 객체 및 사용자 정의 Log 필드를 지원합니다. - RUM 관련 데이터를 자동으로 수집하여 RUM 비즈니스 시나리오와 연동합니다.
시작하기¶
사전 조건¶
- DataKit이 설치되어 있고 공개 네트워크에서 접근 가능하며 IP 지리 정보 데이터베이스가 설치되어 있는지 확인합니다.
- SDK 통합 시
datakitOrigin를 DataKit의 도메인 또는 IP로 설정합니다.
- 콘솔에서
clientToken및site등의 매개변수를 획득합니다. - 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를 통해 로그 데이터를 사용자 정의할 수 있습니다.
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 동기¶
매개변수 설명¶
| 매개변수 | 설명 |
|---|---|
<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
});
})
TAG 교체 (덮어쓰기)¶
설정된 모든 사용자 정의 TAG 가져오기¶
특정 key에 해당하는 사용자 정의 TAG 제거¶
모든 사용자 정의 TAG 제거¶
사용자 정의 사용자 식별¶
SDK는 기본적으로 사용자에게 고유 식별 ID를 자동으로 생성합니다. 이 ID는 식별 속성을 가지지 않으며, 서로 다른 사용자 속성을 구분하는 용도로만 사용됩니다. 따라서 현재 사용자에게 다양한 식별 속성을 추가할 수 있는 추가 API를 제공합니다.
| 속성 | 유형 | 설명 |
|---|---|---|
| user.id | string | 사용자 ID |
| user.name | string | 사용자 닉네임 또는 사용자 이름 |
| user.email | string | 사용자 이메일 |
참고: 다음 속성은 선택 사항이지만, 최소한 하나는 제공하는 것이 좋습니다.