내부 분석

내부 분석 시스템은 GitLab 인스턴스의 사용자 동작과 시스템 상태를 추적하여 고객 성공 서비스 및 제품 개발에 도움을 주는 기능을 제공합니다.

이 문서 페이지들은 GitLab의 내부 분석 기능을 활용하는 방법 및 정보를 제공합니다.

기본 개념

이벤트와 메트릭은 내부 분석 시스템의 기초입니다. 두 개념 간의 차이를 이해하는 것은 이 시스템을 사용하는 데 중요합니다.

이벤트

이벤트란 GitLab 인스턴스 내에서 발생한 동작의 기록입니다. 예를 들어 사용자 상호 작용(이슈 페이지 방문 또는 상단 내비게이션 검색 위로 마우스 커서를 가져감)과 같은 동작이 있습니다. 예약된 파이프라인이 성공하거나 타사 시스템에서 API 호출을 받는 등 백그라운드 시스템 처리로 인한 다른 동작도 있습니다. 모든 동작이 추적되어 기록된 이벤트로 자동으로 전환되는 것은 아닙니다. 그 대신, 동작이 제품 통찰력을 도출하는 데 도움이 되고 더 학술적인 비즈니스 결정을 내리는 데 도움이 된다면, 해당 동작이 발생할 때 이벤트를 추적할 수 있습니다. 생성된 이벤트 기록은 최소한 동작이 발생했음을 나타내는 정보를 보유하지만 해당 동작 시 동반된 컨텍스트에 대한 추가 세부 정보도 포함할 수 있습니다. 컨텍스트의 예로는 동작을 수행한 사람에 대한 정보나 동작 시 시스템의 상태 등이 있습니다.

메트릭

단일 이벤트 기록만으로는 충분한 정보가 아니며 우연히 발생한 것일 수 있습니다. 분석을 위한 기초가 되는 공통된 특성을 가진 이벤트 집합을 찾아야 합니다. 이때 메트릭이 등장합니다. 메트릭은 정보 조각에 대해 수행된 계산입니다. 예를 들어, 새로운 기능이 출시된 후 유료 사용자가 해당 기능 페이지를 방문하는 단일 이벤트로는 새로운 기능의 성공에 대해 아무것도 알 수 없습니다. 그러나 새로운 기능 출시 전 주에 발생한 페이지 뷰 이벤트 수를 계산하고 기능 출시 후 주에 발생한 이벤트 수와 비교하면, 새로운 기능으로 인한 관심 증대에 대해 통찰을 얻을 수 있습니다.

이 과정은 우리가 메트릭이라고 부르는 것에 이르게 됩니다. 이벤트 기반 메트릭은 특정 기간동안 전체 또는 지정된 시간 단위로 이벤트가 발생한 횟수를 센다. 동일한 이벤트는 다른 메트릭에서도 사용될 수 있으며 메트릭은 하나 또는 여러 이벤트를 계산할 수 있습니다. 이러한 계산은 동일한 사용자를 구분하는 등의 고유성 기준에 따라 수행될 수 있지만, 반드시 그렇지 않아도 됩니다.

메트릭은 반드시 이벤트에 기반하지 않아도 됩니다. 메트릭은 GitLab 인스턴스 자체의 상태에 관한 관찰일 수도 있으며, 이는 설정 값이나 데이터베이스 테이블의 행 수일 수 있습니다.

계측

데이터 이용 가능성

GitLab의 경우 SaaS와 Self-Managed 또는 GitLab Dedicated 인스턴스 간에 분석 설정에 중요한 차이가 있습니다. SaaS 인스턴스에서는 개별 이벤트 및 사전 계산된 메트릭이 분석에 사용할 수 있습니다. 또한 SaaS의 페이지 뷰는 자동으로 계측됩니다. Self-Managed에서는 인스턴스에 설치된 GitLab 버전에서 계측된 메트릭만 사용할 수 있습니다.

이벤트

이벤트는 실시간으로 수집되지만 비동기적으로 처리됩니다. 일반적으로 이벤트는 발생 후 최대 48시간이 지나 데이터 웨어하우스에 사용 가능하지만 이보다 더 일찍 사용 가능할 수도 있습니다.

메트릭

메트릭은 매주 한 번씩 각 인스턴스에 대해 계산되어 전송됩니다. GitLab.com의 경우 이는 일요일에 이루어지며 가장 최신 값은 월요일에 추가됩니다. Self-Managed의 경우 특정 인스턴스에 따라 다릅니다. 일반적으로 설치된 GitLab 버전에서 계측된 메트릭만 전송됩니다.

데이터 검색

이벤트 및 메트릭 데이터는 궁극적으로 Snowflake 데이터 웨어하우스에 저장됩니다. 이 데이터는 ad-hoc 분석을 위해 직접적으로 Snowflake에서 SQL을 통해 액세스하거나 Snowflake에 액세스할 수 있는 데이터 시각화 도구인 Tableau를 통해 시각화될 수 있습니다. 두 플랫폼 모두 액세스 요청이 필요합니다.

Tableau

Tableau는 데이터 시각화 플랫폼으로 대시보드 구축 및 GUI 기반의 이벤트 및 메트릭 탐색을 허용합니다. 이 방법은 비즈니스 지능 툴 사용에 익숙하고 기본 검증 및 영속적이고 공유 가능한 대시보드와 시각화를 만들기 원하는 사용자에게 가장 적합합니다. Tableau에 액세스하려면 액세스 요청이 필요합니다.

이벤트 확인

Snowplow 이벤트 탐색 대시보드를 방문하세요. 이 대시보드는 이벤트 카운트와 가장 많이 발생한 이벤트를 보여줍니다. “프로덕션 환경에서 지난 30일 동안 발생한 구조화된 이벤트” 차트로 스크롤하고 특정 이벤트 동작에 대해 필터링할 수 있습니다. 필터는 정확한 이름으로만 작동합니다.

메트릭 확인

메트릭 탐색 대시보드를 방문할 수 있습니다. 옆에는 key_path의 메트릭 경로를 필터링하는 옵션이 있으며 GitLab.com에 대한 필터링 방법에 대한 안내가 제공됩니다.

Snowflake

Snowflake을 사용하면 웨어하우스 내 관련 테이블을 직접 쿼리할 수 있으며 Snowflake SQL 언어로 안의 데이터를 확인할 수 있습니다. 이 방법은 SQL에 익숙하고 데이터가 올바르게 전파되었는지 신속하고 유연하게 확인하고 싶은 사용자에게 가장 적합합니다. Snowflake에 액세스하려면 액세스 요청이 필요합니다.

이벤트 쿼리

다음 예제 쿼리는 feature_used 이벤트에 대해 발생한 일일 이벤트 횟수를 반환합니다.

SELECT
  behavior_date,
  COUNT(*) as event_occurences
FROM prod.common_mart.mart_behavior_structured_event
WHERE event_action = 'feature_used'
AND behavior_date > '2023-08-01' --정확한 날짜 제한은 성능상 최소한의 제한이 적용됩니다
AND app_id='gitlab' --프로덕션 환경 이벤트에는 gitlab을, 스테이징에서의 이벤트에는 gitlab-staging을 사용하세요
GROUP BY 1 ORDER BY 1 desc

다른 메트릭 테이블 디렉터리에 대한 정보는 Data Models Cheat Sheet를 참조하세요.

메트릭 쿼리

다음 예제 쿼리는 지난 6개월 동안 count_distinct_user_id_from_feature_used_7d에 보고된 모든 값 및 해당 instance_id를 반환합니다.

SELECT
  date_trunc('week', ping_created_at),
  dim_instance_id,
  metric_value
FROM prod.common.fct_ping_instance_metric_rolling_6_months --성능 상 마지막 6개월에 한정된 모델
WHERE metrics_path = 'counts.users_visiting_dashboard_weekly' --관심 있는 메트릭으로 설정합니다
ORDER BY ping_created_at DESC

다른 메트릭 테이블 디렉터리에 대한 정보는 Data Models Cheat Sheet를 참조하세요.

데이터 흐름

SaaS 이벤트 레코드는 직접 Snowplow라는 수집 시스템에 전송되어 데이터 웨어하우스로 가져옵니다. Self-Managed 및 GitLab Dedicated 인스턴스는 이벤트 카운트를 로컬로 기록합니다. 매주 Service Ping 프로세스가 모든 사전 정의된 활성 메트릭의 현재 값들을 데이터 웨어하우스로 보냅니다. GitLab.com의 경우, 메트릭은 데이터 웨어하우스에서 직접 계산됩니다.

다음 차트는 이 데이터 흐름을 설명하기 위한 것입니다:

flowchart LR; feature-->track track-->|이벤트 레코드 전송 - gitlab.com에서만|snowplow track-->|메트릭 카운트 증가|redis database-->service_ping redis-->service_ping service_ping-->|주간 익스포트 - 메트릭 값의 JSON|snowflake snowplow-->|이벤트 레코드 - 지속적인 가져오기|snowflake snowflake-->vis subgraph glb[Gitlab 애플리케이션] feature[피처 코드] subgraph events[내부 분석 코드] track[track_event / trackEvent] redis[(Redis)] database[(데이터베이스)] service_ping[\Service Ping 프로세스\] end end snowplow[\Snowplow 파이프라인\] snowflake[(Snowflake 데이터 웨어하우스)] vis[Tableau 대시보드]

데이터 프라이버시

GitLab은 Self-Managed 인스턴스로부터 이벤트 카운트나 유사하게 집계된 정보만을 받습니다. GitLab의 SaaS 버전에서 개별 이벤트에 대한 사용자 식별자는 익명화(pseudonymized)됩니다. 내부 분석 시스템을 통해 수집되는 데이터의 정확한 설명은 핸드북에서 확인할 수 있습니다.