This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed @vyaklushin @andrewn @grzesiek @ofernandez2 @sean_carroll group source_code 2023-09-07

데이터 이전

요약

GitLab은 이미 사용자에게 사용량 할당량에 대한 투명성을 제공합니다.

현재 우리는 다음에 대한 데이터를 표시합니다:

  • 사용된 라이선스 좌석
  • 사용된 저장 공간
  • CI/CD 분 사용량

그러나 우리는 전송 데이터(응용 프로그램의 다양한 부분에서 발생하는 이그레스 트래픽)를 수집하고 제공하지 않습니다.

고객, 클라이언트 및 서비스 간에 전송된 바이트 수에 대한 데이터 수집은 우리에게 새로운 효율성을 발견하고 운영 위험을 줄이는 데 도움이 될 것입니다. 우리는 전체 애플리케이션 스택을 통해 데이터 전송 패턴을 더 잘 이해하고 싶습니다.

해당 청사진의 목표는 결과를 얻기 위해 수행해야 하는 단계를 설명하는 것입니다.

목표

전체 애플리케이션 스택에 걸쳐 전송 데이터를 저장, 처리 및 표시하는 다양한 솔루션을 탐색합니다.

제안

전송된 데이터에는 다양한 유형이 있습니다.

유형 설명
저장소 Git fetch 작업(풀, 복제)과 관련된 익그레스 데이터
아티팩트 직접 및 프록시된 익그레스에 의한 아티팩트 전송
페이지 페이지 익그레스 (아티패크트 API에 따라 달라짐)
패키지 패키지 레지스트리 익그레스
레지스트리 컨테이너 레지스트리 익그레스
업로드 오브젝트 저장소 익그레스

각 유형은 다른 구현을 갖고 있으며 개별적으로 측정될 수 있지만 메타데이터/데이터 전송 텔레미터 및 해당 정보를 수집/시각화하는 것은 동일한 추상화 위에 구축되어야 합니다.

개요

flowchart TB A[응용 프로그램] -->|로그 전송| Pub(Google Pub/Sub) Pub -->JSONParser subgraph 데이터 흐름 파이프라인 direction TB JSONParser -->|JSON 라인만 선택| 로그 프로세서 LogProcessor -->|데이터 전송 로그만 삽입|ClickHouse end ClickHouse -->|전송 로그 쿼리| Rails

응용 프로그램

각 응용 프로그램은 구조화된 형식의 로그를 생성합니다. 데이터 전송 요청과 관련된 로그에는 전송된 바이트 수, 루트 네임스페이스 ID, 프로젝트 ID 및 이그레스 이벤트의 타임스탬프와 같은 메타데이터 필드가 포함됩니다.

Google Pub/Sub

응용 프로그램 로그는 수집되어 Google Pub/Sub으로 전송됩니다. Pub/Sub를 사용하면 토픽을 구독하고 들어오는 로그를 읽을 수 있습니다.

데이터플로우 파이프라인

Dataflow는 Google Cloud의 통합 스트림 및 배치 데이터 처리 도구로, 서버리스, 빠르며 비용 효율적입니다. 이는 오픈 소스 Apache Beam 프로젝트 위에 구축되었습니다.

데이터플로우 파이프라인은 Java, Python 또는 Go로 작성될 수 있는 데이터 처리 추상화를 제공합니다.

데이터플로우 파이프라인은 처리 로직의 핵심입니다. 이것은 Dataflow의 스트리밍 구현에 의존합니다. 파이프라인은 Pub/Sub 토픽을 구독하고 로그를 읽고 처리하여 ClickHouse 데이터베이스에 삽입합니다.

ClickHouse

ClickHouse는 대량의 데이터 집합과 빠른 액세스를 제공하기 위해 설계되었습니다. 이것은 고객이 동적 시간 범위에 대한 집계된 데이터를 쿼리할 수 있도록 합니다.

ClickHouse는 로그의 추상 저장소입니다. 데이터플로우 파이프라인은 ClickHouse에 저장되는 일관된 구조로 다양한 입력 소스를 변환할 것입니다. 이는 ClickHouse에 저장된 시계열에 영향을 주지 않고 다양한 입력과 형식을 지원할 수 있도록 합니다.

ClickHouse 테이블 스키마

CREATE TABLE transfer_data
(
    created_at DateTime,
    bytes UInt64,
    project_id UInt64,
    root_namespace_id UInt64,
    type String
)
ENGINE = MergeTree
PRIMARY KEY (project_id, root_namespace_id)
  • created_at - 이벤트의 타임스탬프
  • bytes - 전송된 바이트 수
  • project_id - 프로젝트 ID
  • root_namespace_id - 루트 네임스페이스 ID
  • type - 익그레스 유형 (git, 컨테이너_레지스트리, …)

Rails

Rails 애플리케이션은 ClickHouse와 연결하고 쿼리하는 gem을 사용합니다. 고객은 대시보드에서 전송 데이터 세부 정보를 볼 수 있습니다. 그들은 자신의 전체 네임스페이스 또는 특정 프로젝트에 대한 전송 데이터 보고서를 요청할 수 있습니다.

구현 제안