내부 이벤트 페이로드 샘플
GitLab v19.1중요: 내부 이벤트 추적(Internal Event Tracking)은 GitLab 내부 분석 목적으로만 데이터를 수집합니다. 이 가이드는 프론트엔드 및 백엔드 서비스에서 추적되는 내부 이벤트의 페이로드 샘플을 제공합니다.
중요: 내부 이벤트 추적(Internal Event Tracking)은 GitLab 내부 분석 목적으로만 데이터를 수집합니다. 이 데이터는 어떠한 서드파티 서비스나 도구와도 공유되지 않습니다. GitLab은 구현 시 Snowplow와 같은 컴포넌트를 사용하지만, 모든 데이터는 GitLab 인프라 내에서 수집, 처리 및 저장됩니다. 사용자 ID는 개인 정보 보호를 위해 가명화되며, GitLab은 사용자를 재식별하는 어떠한 프로세스도 수행하지 않습니다. 데이터 개인 정보 보호에 관한 자세한 내용은 고객 제품 사용 정보를 참조하세요.
내부 이벤트 페이로드#
이 가이드는 프론트엔드 및 백엔드 서비스에서 추적되는 내부 이벤트의 페이로드 샘플을 제공합니다. 각 이벤트 유형에는 필드와 설명이 상세하게 포함되어 있습니다. 내부 이벤트는 Snowplow를 사용하여 이벤트를 추적합니다. 자세한 내용은 Snowplow 이벤트 파라미터 가이드를 참조하세요.
GitLab 18.0부터 Self-Managed 및 Dedicated 인스턴스는 구조화된 이벤트, 자기 설명 이벤트(self-describing event), 페이지 뷰, 페이지 핑을 수집하여 전송합니다. 이는 이전 버전에서 Self-Managed 인스턴스로부터 집계된 메트릭만 수집하던 것과 비교하여 중요한 변경 사항입니다.
이벤트 유형#
내부 이벤트 추적 시스템의 핵심은 이벤트의 세분화된 추적을 위해 설계되었습니다. 각 이벤트는 e=... 파라미터로 표시됩니다.
이벤트에는 세 가지 범주가 있습니다:
-
페이지 뷰 및 페이지 핑과 같은 표준 이벤트
-
커스텀 구조화 이벤트
-
스키마 기반 자기 설명 이벤트
| 추적 유형 | 이벤트 유형 (e의 값) |
|---|---|
| 자기 설명 이벤트 | ue |
| 페이지 뷰 추적 | pv |
| 페이지 핑 | pp |
| 커스텀 구조화 이벤트 | se |
공통 파라미터#
이벤트 파라미터#
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| e | event | text | 이벤트 유형 | pv, pp, ue, se |
| eid | event_id | text | 이벤트 UUID | 606adff6-9ccc-41f4-8807-db8fdb600df8 |
애플리케이션 파라미터#
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| tna | namespace_tracker | text | 트래커 네임스페이스 | gl |
| aid | app_id | text | 애플리케이션의 고유 식별자 | gitlab-sm |
| p | platform | text | 앱이 실행되는 플랫폼 | web, srv, app |
| tv | v_tracker | text | 트래커 버전 식별자 | js-3.24.2 |
타임스탬프 파라미터#
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| dtm | dvce_created_tstamp | int | 클라이언트 장치에서 기록된 이벤트 발생 시각의 타임스탬프 | 1361553733313 |
| stm | dvce_sent_tstamp | int | 클라이언트 장치에서 수집기로 이벤트를 전송한 시각의 타임스탬프 | 1361553733371 |
| ttm | true_tstamp | int | 사용자가 설정한 정확한 타임스탬프 | 1361553733371 |
| tz | os_timezone | text | 클라이언트 장치 OS의 시간대 | Europe%2FLondon |
참고: 내부 이벤트 수집기는 이벤트가 수집기에 도달한 시각인 collector_tstamp도 캡처합니다.
사용자 관련 파라미터#
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| duid | domain_userid | text | 퍼스트파티 쿠키를 기반으로 한 사용자의 고유 순환 식별자. | aeb1691c5a0ee5a6 |
| uid | user_id | text | Snowplow 파이프라인에서 가명화되는 user_id | 1234567890 |
| vid | domain_sessionidx | int | 이 사용자가 애플리케이션을 방문한 횟수의 인덱스 | 1 |
| sid | domain_sessionid | text | 사용자의 단일 방문 또는 세션 중 활동을 추적하기 위해 생성된 고유 식별자(UUID). 이 식별자는 세션 간에 초기화됩니다. 식별자는 개인 정보와 연결되지 않습니다. | 9c65e7f3-8e8e-470d-b243-910b5b300da0 |
| ip | user_ipaddress, Geo 정보는 수집하지만 Snowplow 파이프라인에서 IP 주소는 저장하지 않음 | text | IP 주소 재정의 | 37.157.33.178 |
플랫폼 파라미터#
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| url | page_url | text | 페이지 URL. URL에서 민감한 데이터를 가명화합니다(예시 참조). | https://gitlab.com/dashboard/projects |
| ua | useragent | text | 사용자 에이전트 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0 |
| page | page_title | text | 이 값은 항상 GitLab으로 하드코딩됩니다 | GitLab |
| refr | page_referrer | text | 리퍼러 URL로, page_url과 유사합니다. 리퍼러 URL을 가명화합니다. | https://gitlab.com/group:123/project:356 |
| cookie | br_cookies | boolean | 브라우저가 쿠키를 허용합니까? | 1 |
| lang | br_lang | text | 브라우저 언어 | en-US |
| cd | br_colordepth | integer | 브라우저 색 깊이 | 24 |
| cs | doc_charset | text | 웹 페이지의 문자 인코딩 | UTF-8 |
| ds | doc_width and doc_height | text | 웹 페이지 너비 및 높이 | 1090x1152 |
| vp | br_viewwidth and br_viewheight | text | 브라우저 뷰포트 너비 및 높이 | 1105x390 |
| res | dvce_screenwidth and dvce_screenheight | text | 화면/모니터 해상도 | 1280x1024 |
자기 설명 이벤트#
자기 설명 이벤트(Self-describing event)는 내부 이벤트 추적으로 커스텀 이벤트를 추적하는 권장 방법입니다. 이를 통해 미리 정의된 스키마에 따라 이벤트를 추적할 수 있습니다.
자기 설명 이벤트를 추적할 때:
-
이벤트 유형은
e=ue로 설정됩니다. -
이벤트 데이터는 base64로 인코딩되어 페이로드에 포함됩니다.
특정 이벤트 유형#
페이지 뷰#
페이지 뷰 추적은 웹 페이지의 조회를 기록하는 데 사용됩니다.
페이지 뷰를 기록하려면 e=pv인 이벤트를 기록합니다. 웹 이벤트와 관련된 모든 필드를 추적할 수 있습니다.
페이지 핑#
페이지 핑 이벤트는 사용자가 페이지에 활성 상태로 있는 동안 주기적으로 발생하여 사용자 참여를 추적합니다. 페이지에서 실제로 소비한 시간을 측정합니다.
페이지 핑은 e=pp로 식별되며 다음과 같은 추가 필드를 포함합니다:
| 파라미터 | 테이블 칼럼 | 유형 | 설명 |
|---|---|---|---|
| pp_mix | pp_xoffset_min | integer | 마지막 핑 기간에 확인된 최소 페이지 x 오프셋 |
| pp_max | pp_xoffset_max | integer | 마지막 핑 기간에 확인된 최대 페이지 x 오프셋 |
| pp_miy | pp_yoffset_min | integer | 마지막 핑 기간에 확인된 최소 페이지 y 오프셋 |
| pp_may | pp_yoffset_max | integer | 마지막 핑 기간에 확인된 최대 페이지 y 오프셋 |
구조화 이벤트 추적#
e=se를 설정하는 것 외에도, 설정할 수 있는 5개의 커스텀 이벤트 전용 파라미터가 있습니다:
| 파라미터 | 테이블 칼럼 | 유형 | 설명 | 예시 값 |
|---|---|---|---|---|
| se_ca | se_category | text | 이벤트 카테고리. 기본적으로 이벤트가 발생한 위치입니다. 프론트엔드 이벤트의 경우 페이지 이름이며, 백엔드 이벤트의 경우 컨트롤러 이름입니다. | projects:merge_requests:show |
| se_ac | se_action | text | 액션 또는 이벤트 이름 | code_suggestion_accepted |
| se_la | se_label | text | 액션이 수행되는 '객체'를 참조하는 데 자주 사용되는 라벨 | ${editor_name} |
| se_pr | se_property | text | 액션 또는 객체와 관련된 속성 | ${suggestion_type} |
| se_va | se_value | decimal | 사용자 액션과 관련된 값 | ${suggestion_shown_duration} |
| cx | contexts | JSON | 이벤트에 base64 인코딩된 컨텍스트를 전달합니다 | JSON |
컨텍스트에는 각 이벤트와 함께 전송될 미리 정의된 필드가 일부 포함되어 있습니다. 모든 미리 정의된 스키마는 gitlab-org/iglu 리포지터리에 저장되어 있습니다.
대부분의 자기 설명 이벤트에는 모든 이벤트에 공통적인 필드 세트인 gitlab_standard 컨텍스트가 있습니다. gitlab_standard 컨텍스트에 관한 자세한 내용은 표준 컨텍스트 필드를 참조하세요.
내부 이벤트 페이로드 예시#
페이지 뷰#
{
"schema": "iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",
"data": [
{
"e": "pv",
"url": "https://gitlab.com/",
"page": "GitLab",
"refr": "https://gitlab.com/",
"eid": "564f9834-3f98-4d78-a738-b7977d621371",
"tv": "js-3.24.2",
"tna": "gl",
"aid": "gitlab",
"p": "web",
"cookie": "1",
"cs": "UTF-8",
"lang": "en-GB",
"res": "1728x1117",
"cd": "30",
"tz": "Asia/Calcutta",
"dtm": "1742205227525",
"vp": "1920x331",
"ds": "1920x388",
"vid": "720",
"sid": "1574509e-5d6d-43d1-9e76-e42801ae2e55",
"duid": "9e5500ac-3437-4457-a007-351911d54983",
"cx": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5z...",
"stm": "1742205227528"
}
]
}
cx 필드는 base64로 인코딩되어 있으며 다음 JSON을 포함합니다:
{
"schema": "iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",
"data": [
{
"schema": "iglu:com.gitlab/gitlab_standard/jsonschema/1-1-1",
"data": {
"environment": "production",
"source": "gitlab-javascript",
"correlation_id": "01JPHRC3K30KDDV165EWTCFJ02",
"plan": null,
"extra": {},
"user_id": 11979729,
"global_user_id": "XsZfAb677xjp9zut/lL6X0ZKX5b7pli65uk2wnfu0SY=",
"is_gitlab_team_member": true,
"namespace_id": null,
"project_id": null,
"feature_enabled_by_namespace_ids": null,
"realm": "saas",
"instance_id": "ea8bf810-1d6f-4a6a-b4fd-93e8cbd8b57f",
"host_name": "gitlab-webservice-web-58446c98b5-zprvd",
"instance_version": "17.10.0",
"context_generated_at": "2025-03-17T09:53:46.709Z",
"google_analytics_id": "GA1.1.424273043.1737451027"
}
},
{
"schema": "iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0",
"data": {
"id": "90ea98bd-3bdb-48d2-935c-59a4d03a4710"
}
},
{
"schema": "iglu:com.google.analytics/cookies/jsonschema/1-0-0",
"data": {
"_ga": "GA1.1.424273043.1737451027"
}
},
{
"schema": "iglu:com.google.ga4/cookies/jsonschema/1-0-0",
"data": {
"_ga": "GA1.1.424273043.1737451027",
"session_cookies": [
{
"measurement_id": "G-ENFH3X7M5Y",
"session_cookie": "GS1.1.1742200876.45.1.1742202521.0.0.0"
}
]
}
},
{
"schema": "iglu:org.w3/PerformanceTiming/jsonschema/1-0-0",
"data": {
"navigationStart": 1742205226288,
"redirectStart": 0,
"redirectEnd": 0,
"fetchStart": 1742205226289,
"domainLookupStart": 1742205226289,
"domainLookupEnd": 1742205226289,
"connectStart": 1742205226289,
"secureConnectionStart": 0,
"connectEnd": 1742205226289,
"requestStart": 1742205226323,
"responseStart": 1742205226969,
"responseEnd": 1742205226972,
"unloadEventStart": 1742205226975,
"unloadEventEnd": 1742205226975,
"domLoading": 1742205226980,
"domInteractive": 1742205227044,
"domContentLoadedEventStart": 1742205227437,
"domContentLoadedEventEnd": 1742205227437,
"domComplete": 0,
"loadEventStart": 0,
"loadEventEnd": 0
}
},
{
"schema": "iglu:org.ietf/http_client_hints/jsonschema/1-0-0",
"data": {
"isMobile": false,
"brands": [
{
"brand": "Chromium",
"version": "134"
},
{
"brand": "Not:A-Brand",
"version": "24"
},
{
"brand": "Google Chrome",
"version": "134"
}
]
}
}
]
}
페이지 핑#
{
"schema": "iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",
"data": [
{
"e": "pp",
"url": "https://gitlab.com/",
"page": "GitLab",
"refr": "https://gitlab.com/",
"eid": "ac958a76-5360-44e1-a9f3-8172d6df0f80",
"tv": "js-3.24.2",
"tna": "gl",
"aid": "gitlab",
"p": "web",
"cookie": "1",
"cs": "UTF-8",
"lang": "en-GB",
"res": "1728x1117",
"cd": "30",
"tz": "Asia/Calcutta",
"dtm": "1742205324496",
"vp": "1920x331",
"ds": "1920x1694",
"vid": "720",
"sid": "1574509e-5d6d-43d1-9e76-e42801ae2e55",
"duid": "9e5500ac-3437-4457-a007-351911d54983",
"cx": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy...",
"stm": "1742205324501"
}
]
}
자기 설명 이벤트#
{
"schema": "iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",
"data": [
{
"e": "ue",
"eid": "67ae8ec1-3ec0-46b7-89e0-fd944d90acc6",
"tv": "js-3.24.2",
"tna": "gl",
"aid": "gitlab",
"p": "web",
"cookie": "1",
"cs": "UTF-8",
"lang": "en-GB",
"res": "1728x1117",
"cd": "30",
"tz": "Asia/Calcutta",
"dtm": "1742205393772",
"vp": "1920x331",
"ds": "1920x1694",
"vid": "720",
"sid": "1574509e-5d6d-43d1-9e76-e42801ae2e55",
"duid": "9e5500ac-3437-4457-a007-351911d54983",
"refr": "https://gitlab.com/",
"url": "https://gitlab.com/",
"ue_px": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy...",
"cx": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy...",
"stm": "1742205393774"
}
]
}
이것은 링크 클릭 추적의 일부입니다. ue_px 필드는 base64로 인코딩되어 있으며 다음 JSON을 포함합니다:
{
"schema": "iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",
"data": {
"schema": "iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1",
"data": {
"targetUrl": "https://gitlab.com/",
"elementId": "",
"elementClasses": [
"brand-logo"
],
"elementTarget": ""
}
}
}
구조화 이벤트#
{
"schema": "iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",
"data": [
{
"e": "se",
"se_ca": "root:index",
"se_ac": "render_duo_chat_callout",
"eid": "12c18f54-ef65-489e-99f8-00922f9c3249",
"tv": "js-3.24.2",
"tna": "gl",
"aid": "gitlab",
"p": "web",
"cookie": "1",
"cs": "UTF-8",
"lang": "en-GB",
"res": "1728x1117",
"cd": "30",
"tz": "Asia/Calcutta",
"dtm": "1742205394848",
"vp": "1920x331",
"ds": "1920x388",
"vid": "720",
"sid": "1574509e-5d6d-43d1-9e76-e42801ae2e55",
"duid": "9e5500ac-3437-4457-a007-351911d54983",
"refr": "https://gitlab.com/",
"url": "https://gitlab.com/",
"cx": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy...",
"stm": "1742205395080"
}
]
}
백엔드 이벤트#
{
"e": "se",
"eid": "2e78c447-c18e-4087-a3a8-35723ecfb602",
"aid": "asdfsadf",
"cx": "eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy...",
"tna": "gl",
"stm": "1742268163018",
"tv": "rb-0.8.0",
"se_ac": "perform_action",
"se_la": "redis_hll_counters.manage.unique_active_users_monthly",
"se_ca": "Users::ActivityService",
"p": "srv",
"dtm": "1742268163016"
}
cx 필드는 base64로 인코딩되어 있으며 다음 JSON을 포함합니다:
{
"schema": "iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-1",
"data": [
{
"schema": "iglu:com.gitlab/gitlab_standard/jsonschema/1-1-1",
"data": {
"environment": "development",
"source": "gitlab-rails",
"correlation_id": "01JPKMCRCBSMB07DPGVSJJ708F",
"plan": null,
"extra": {},
"user_id": 1,
"global_user_id": "KaAjqePKpCsnc6P40up8ZOi4+BUwEUIyab6W5jWIg5M=",
"is_gitlab_team_member": null,
"namespace_id": null,
"project_id": null,
"feature_enabled_by_namespace_ids": null,
"realm": "self-managed",
"instance_id": "e1baa3de-7e45-4fbc-b17e-95995935cf09",
"host_name": "nbelokolodov--20220811-Y26WJ",
"instance_version": "17.10.0",
"context_generated_at": "2025-03-18 03:22:43 UTC"
}
},
{
"schema": "iglu:com.gitlab/gitlab_service_ping/jsonschema/1-0-1",
"data": {
"data_source": "redis_hll",
"event_name": "unique_active_user"
}
}
]
}