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에 따름) |
패키지
| 패키지 레지스트리 이그레스 |
레지스트리
| 컨테이너 레지스트리 이그레스 |
업로드
| 객체 리포지터리 이그레스 |
각 유형은 다른 구현을 가지고 있으며 별도로 메트릭할 수 있지만 메타데이터 / 데이터 전송 텔레메트리의 수집 / 사용 및 시각화는 동일한 추상화 위에 구축되어야 합니다.
개요
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을 사용합니다. 고객은 대시 보드에서 전송 데이터 세부 정보를 볼 수 있습니다. 그들은 전체 네임 스페이스 또는 특정 프로젝트에 대한 전송 데이터 보고서를 요청할 수 있습니다.