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. The development, release, and timing of any products, features, or functionality may be subject to change or delay and 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 작업(pull, clone)에 관련된 이그레스 데이터
아티팩트 직접 및 프록시된 이그레스에 의한 아티팩트 전송
페이지 페이지의 이그레스 (아티팩트 API에 따름)
패키지 패키지 레지스트리 이그레스
레지스트리 컨테이너 레지스트리 이그레스
업로드 객체 리포지터리 이그레스

각 유형은 다른 구현을 가지고 있으며 별도로 메트릭할 수 있지만 메타데이터 / 데이터 전송 텔레메트리의 수집 / 사용 및 시각화는 동일한 추상화 위에 구축되어야 합니다.

개요

flowchart TB A[Applications] -->|로그 보냄| Pub(구글 Pub/Sub) Pub -->JSONParser subgraph DataflowPipeline direction TB JSONParser -->|JSON 라인만 선택| LogProcessor LogProcessor -->|데이터 전송 로그만 삽입|ClickHouse end ClickHouse -->|전송 로그 조회| Rails

Applications

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

Google Pub/Sub

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

Dataflow 파이프라인

Dataflow는 서버리스, 빠르고 비용 효율적인 Google 클라우드 통합 스트림 및 배치 데이터 처리입니다. 이것은 오픈 소스 Apache Beam 프로젝트에 기반을 두고 있습니다.

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

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

ClickHouse

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

ClickHouse는 로그의 추상 리포지터리입니다. Dataflow 파이프라인은 다양한 입력 소스를 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, container_registry, …)

Rails

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

구현 제안