내부 분석

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

이 문서 페이지들은 새로운 기능을 개발하거나 기존 기능을 instrument하는 경우에 GitLab의 내부 분석 기능을 활용하는 방법에 대한 안내와 정보를 제공합니다.

기본 개념

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

이벤트

이벤트는 GitLab 인스턴스 내에서 발생한 동작의 기록입니다. 예를 들어 사용자 상호 작용(문제 페이지 방문, 상단 내비게이션 검색에 마우스 커서를 가져다 대는 것 등)의 동작이 될 수 있습니다. 기타 동작은 예약된 파이프라인의 성공 또는 제3자 시스템으로부터의 API 호출과 같은 백그라운드 시스템 처리로부터 발생할 수 있습니다. 모든 동작이 추적되어 기록된 이벤트로 자동으로 전환되는 것은 아닙니다. 대신, 동작이 제품 인텔리전스를 도출하고 더 잘 교육된 비즈니스 결정을 내릴 수 있도록 도와준다면, 그 동작에서 이벤트를 추적할 수 있습니다. 생성된 이벤트 레코드는 최소한 동작이 발생했음을 나타내는 정보를 보유하며, 해당 동작이 수반된 문맥에 대한 추가 세부 정보도 포함할 수 있습니다. 문맥의 예시로는 동작을 수행한 사람에 관한 정보나 동작 시의 시스템 상태 등이 있습니다.

메트릭

개별 이벤트 레코드 하나만으로는 충분한 정보를 제공하지 못할 수 있으며 우연히 발생한 것일 수 있습니다. 분석의 기초를 갖기 위해서는 공통적인 특성을 공유하는 이벤트 집합을 찾아야 합니다. 여기서 메트릭이 중요한 역할을 합니다. 메트릭은 정보에 대한 계산입니다. 예를 들어, 새로운 기능이 출시된 후 유료 사용자가 해당 기능 페이지를 방문하는 단일 이벤트는 새로운 기능의 성공에 대해 아무런 정보를 제공하지 않습니다. 그러나 새로운 기능 출시 전 주에 발생한 페이지 뷰 이벤트 수를 계산하고, 해당 기능 출시 후 주에 발생한 이벤트 수와 비교한다면, 신규 기능 출시로 인한 관심 증가에 대한 통찰을 얻을 수 있습니다.

이 프로세스는 메트릭으로 이어지게 됩니다. 이벤트 기반 메트릭은 이벤트가 전체적으로 또는 지정된 기간 내에 발생한 횟수를 계산합니다. 동일한 이벤트는 여러 메트릭에서 사용될 수 있으며, 메트릭은 단일 또는 여러 이벤트를 계산할 수 있습니다. 계산된 수는 고유성 기준을 기반으로 할 수도 있지만 기반으로 하지 않을 수도 있습니다. 즉, 동작을 수행한 고유 사용자만을 계산할 수도 있고 그렇지 않을 수도 있습니다.

메트릭은 이벤트에 기반하지 않을 필요도 없습니다. 메트릭은 또한 GitLab 인스턴스 자체의 상태에 대한 관찰일 수 있습니다. 예를 들어, 설정의 값이나 데이터베이스 테이블의 행 수 일 수 있습니다.

Instrumentation

데이터 제공

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

이벤트

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

메트릭

메트릭은 매주 한 번 계산되어 각 인스턴스로 전송됩니다. GitLab.com에서는 이 작업이 일요일에, 가장 최근 값은 월요일에 사용할 수 있습니다. 자기 관리형의 경우, 이는 특정 인스턴스에 따라 달라집니다. 일반적으로, 설치된 GitLab 버전에서 instrumented된 메트릭만 전송됩니다.

데이터 검색

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

Tableau

Tableau는 데이터 시각화 플랫폼으로 대시보드를 작성하고 GUI 기반의 이벤트 및 메트릭 검색을 가능하게 합니다. 사용자 개인 이해도, 기본 확인 및 영구 저장 및 공유 가능한 대시보드 및 시각화를 생성하는 데 가장 적합한 방법입니다. Tableau에 접근하려면 접근 요청이 필요합니다.

이벤트 확인

Snowplow event exploration dashboard을 방문하세요. 이 대시보드는 이벤트 수 및 가장 많이 발생한 이벤트를 보여줍니다. “Production Last 30 Days” 차트로 스크롤하고 특정 이벤트 동작에 대해 필터링할 수 있습니다. 필터는 정확한 이름으로만 작동합니다.

메트릭 확인

Metrics exploration dashboard를 방문할 수 있습니다. 사이드에는 메트릭 경로의 필터 및 GitLab.com에 대해 필터링하는 방법에 대한 안내가 있습니다.

Snowflake

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

이벤트 조회

다음 예시 쿼리는 feature_used 이벤트의 일일 발생 횟수를 반환합니다.

SELECT
  behavior_date,
  COUNT(*) as event_occurences
FROM 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

기타 메트릭 테이블 디렉터리은 데이터 모델 치트 시트를 참조하세요.

메트릭 조회

다음 예시 쿼리는 지난 6개월 동안 feature_used_7d의 모든 보고된 값 및 해당 instance_id를 반환합니다:

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

기타 메트릭 테이블 디렉터리은 데이터 모델 치트 시트를 참조하세요.

데이터 흐름

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[(스노우플레이크 데이터 웨어하우스)] vis[Tableau 대시보드]

데이터 프라이버시

GitLab은 Self-managed 인스턴스로부터 이벤트 카운트 또는 유사하게 집계된 정보만을 수신합니다. GitLab SaaS 버전의 개별 이벤트에 대한 사용자 식별자는 익명화됩니다. 의사 식별화된 인원입니다. 내부 분석 시스템을 통해 수집되는 데이터의 정확한 설명은 handbook에서 제공됩니다.