상용 APM 의존 벗는 산점도 파이프라인: OpenTelemetry와 ClickHouse 설계

ARCH-B

ARCH-B

여기어때 기술블로그 기반 · 2026년 10월 11일 · 5분 분량

0

한눈에 보는 핵심요약

여기어때 숙박플랫폼개선TF팀이 오픈소스 표준인 OpenTelemetry와 컬럼형 DBMS인 ClickHouse를 활용해 상용 APM 수준의 분산 추적 스캐터 차트를 구축하는 아키텍처를 공개했습니다. 개별 지연 분포를 시각화하기 위한 SpanKind 분류 기준과 MergeTree 스토리지 최적화 방안이 제시되었습니다.

  • 평균과 백분위(P99)가 가리는 개별 요청 지연 이상치를 보존하기 위해 스팬 단위를 시각화하는 APM 산점도를 자체 구축했습니다.
  • OpenTelemetry의 5가지 SpanKind를 진입점과 하위 호출로 구조화해 그래프의 가독성을 높이고 필터링 체계를 확보했습니다.
  • ClickHouse MergeTree의 컬럼 지향 저장, 희소 인덱스(Sparse Index), Delta·ZSTD 코덱을 결합해 데이터 압축률과 I/O 효율을 높였습니다.
  • 본 결과는 로컬 및 테스트 클러스터 기반 합성 트래픽 검증 단계로, 실제 대규모 운영 트래픽 적용 시 자원 소모량은 추가 검증이 필요합니다.
상용 APM 의존 벗는 산점도 파이프라인: OpenTelemetry와 ClickHouse 설계
이미지 제공: 여기어때 기술블로그 · 원출처 기사

집계 지표 사각지대와 산점도 도입 배경

여기어때 기술블로그를 통해 숙박플랫폼개선TF팀의 박준희 엔지니어는 OpenTelemetry와 ClickHouse를 결합한 APM 산점도(스캐터 차트) 수집 및 저장 계층 설계 과정을 공개했습니다. 개발팀은 기존 관측 환경에서 활용하던 평균 응답시간, P95, P99 백분위 같은 집계 지표가 개별 요청의 극단적 이상치를 가리는 구조적 한계를 안고 있다고 지적했습니다.

일반적인 백분위 지표는 다수의 성공 사례에 가려진 소수의 10초 이상 지연 구간을 온전히 포착하지 못합니다. 상용 APM 도구가 제공하는 스캐터 차트는 모든 요청을 점으로 펼쳐 분포 형태를 유지하지만, 라이선스 종속성과 비용 문제를 수반합니다. 이에 개발팀은 내부에서 이미 수집 중인 OpenTelemetry 트레이스 원본을 ClickHouse에 효율적으로 적재해 독립적인 분석 체계를 구성하기로 결정했습니다.

ARCH.B 분석

SpanKind 기반 데이터 분류와 좌표계 정의

스캐터 차트 설계의 핵심 과제는 차트에 찍히는 '점(Point)' 하나를 어떤 단위로 정의할 것인가였습니다. 전체 트랜잭션을 점 하나로 묶으면 화면 구성은 단순해지지만 내부 DB 병목인지 외부 API 지연인지 원인 구분이 불가능해집니다. 반대로 모든 스팬을 그대로 표시하면 화면에 점이 과도하게 쏠려 가독성이 저하됩니다.

개발팀은 스팬 단위를 점으로 삼되, OpenTelemetry 공식 명세에 명시된 SpanKind 구분을 기반으로 UI 제어 계층을 분리하는 방식을 택했습니다. 서버 수신(SERVER), 메시징 소비(CONSUMER), 스케줄러(INTERNAL)는 시스템 진입점으로 정의해 기본 노출하고, 클라이언트 호출(CLIENT)과 메시징 발행(PRODUCER)은 하위 호출로 묶어 필요에 따라 필터링할 수 있도록 설계했습니다.

동시에 X축 좌표를 트레이스 시작 시점이 아닌 종료 시각(시작 시각 + duration)으로 결정했습니다. 요청이 완료되기 전에는 소요 시간을 확정할 수 없기 때문입니다. 다만 저장소 엔진은 통상 시작 시각 기준으로 정렬되므로, 이러한 좌표 매핑 방식은 조회 시 인덱스 스캔 불일치 문제를 유발할 수 있어 정교한 쿼리 튜닝이 요구됩니다.

ClickHouse 컬럼 지향 스토리지와 압축 코덱 활용

시계열 대용량 트레이스 저장소로 선정된 ClickHouse는 대규모 데이터 분석에 특화된 컬럼형 DBMS입니다. 스캐터 차트 렌더링에는 종료 시각, 지연 시간, 상태 코드, URI 등 6개 안팎의 속성만 요구되며, 에러 메시지나 부가 메타데이터와 같이 디스크 점유율이 큰 컬럼은 화면 호출 시 스캔 대상에서 완전히 제외되어 I/O 비용을 크게 줄일 수 있습니다.

또한 컬럼별 물리적 특성에 맞춘 압축 코덱 조합이 적용되었습니다. 단조 증가하는 성격을 지닌 타임스탬프 필드에는 값의 차분만을 기록하는 Delta 코덱과 ZSTD 코덱을 결합했습니다. 자주 조회되는 지연 시간 필드에는 압축 해제 속도가 빠른 LZ4 코덱이 권장되었습니다. 단일 노드 로컬 실측 결과, ZSTD 코덱 적용 시 system.parts 메타데이터 기준으로 원본 크기 대비 약 10분의 1 수준(90% 감소)으로 용량이 절감되는 양상이 확인되었습니다.

ARCH.B 분석

희소 인덱스와 MergeTree 파트 관리의 실무 제약

ClickHouse의 핵심 테이블 엔진인 MergeTree는 8,192개 행을 단일 '그랜뉼(Granule)'로 묶고 인덱스 마크를 생성하는 희소 인덱스(Sparse Index) 방식을 취합니다. 모든 행을 인덱싱하는 전통적인 B-Tree 구조와 달리 인덱스 자체의 물리적 크기가 극히 작아, 수십억 건의 트레이스가 유입되어도 주요 인덱스를 메모리(RAM)에 상주시킬 수 있습니다.

그러나 스토리지 엔진의 동작 구조에 따른 실무적 운영 제약도 명확합니다. MergeTree는 삽입 시 불변(Immutable) 상태의 새 파트(Part)를 디스크에 기록하고 백그라운드에서 병합합니다. 만약 OpenTelemetry Collector가 짧은 간격으로 잦은 쓰기를 수행하면 파트 수가 급증하여 'Too many parts' 에러가 발생하고 조회 성능이 급격히 저하됩니다. 따라서 수집기 계층에서 충분한 버퍼를 두고 대규모 배치 단위로 데이터를 플러시하도록 파이프라인을 엄격히 제어해야 합니다.

ARCH.B 분석

검증 범위와 향후 해결 과제

이번 아키텍처 검증은 로컬 단일 노드 및 3-Keeper / 2-Shard x 2-Replica 클러스터 환경에서 합성 트래픽을 주입해 수행된 기술 검증 단계입니다. 실제 대규모 라이브 서비스 트래픽이 집중되는 프로덕션 환경에 즉각 도입된 것은 아니므로, 네트워크 대역폭 비용과 멀티 샤드 환경 내 Collector의 메모리 부하 변동폭은 추후 실측을 통한 확인이 필요합니다.

아울러 비단조적으로 튀는 지연 시간(duration) 컬럼에 Delta 코덱을 적용하는 것은 차분 압축 효율을 보장하기 어려워 현장 데이터 기반의 정밀 검증이 권장됩니다. 대규모 점 데이터를 웹 브라우저에서 직접 렌더링할 때 마주하는 메모리 과부하를 해소하기 위해 서버 측 버킷 집계나 롤업을 구현하는 시각화 영역의 세부 대응은 후속 검증 과제로 남아 있습니다.

출처

여기어때 기술블로그의 원출처와 본문에 표시한 참고자료를 바탕으로 한국어로 재구성했습니다. ‘ARCH.B 분석’은 자료를 읽고 덧붙인 편집 해석입니다.

OpenTelemetry + ClickHouse 로 APM 스캐터 차트 만들기 [1편]— 수집과 저장 (새 창)

Share

Related

함께 읽기 좋은 글

OpenTelemetry와 ClickHouse 데이터 시각화를 위한 그라파나 커스텀 APM 산점도 패널 구현

개발

OpenTelemetry와 ClickHouse 데이터 시각화를 위한 그라파나 커스텀 APM 산점도 패널 구현

여기어때 숙박플랫폼개선TF팀이 오픈텔레메트리와 클릭하우스에 적재된 대규모 트레이스 스팬 데이터를 효율적으로 시각화하기 위해 그라파나 커스텀 패널 플러그인을 개발한 사례를 공개했습니다. 기본 패널의 기능적 한계를 보완하고 10만 점 규모의 요청 지연 분포를 표현하기 위한 구조적 설계와 개발 방식을 다룹니다.

2026. 10. 9.

클라우드플레어, 에지 전 구간 관측하는 '트레이시스' 오픈 베타 출시… WAF·캐시부터 오리진까지 추적

개발

클라우드플레어, 에지 전 구간 관측하는 '트레이시스' 오픈 베타 출시… WAF·캐시부터 오리진까지 추적

클라우드플레어가 프록시 및 에지 계층 전체의 요청 흐름을 OpenTelemetry 호환 스팬으로 기록하는 '클라우드플레어 트레이시스(Cloudflare Traces)' 오픈 베타를 공개했습니다. W3C 분산 추적 표준과 데이터 볼륨 기반 과금제를 도입해 풀스택 관측성을 확장했으나, 일부 보안 제품군과 비동기 파이프라인의 스팬 누락 등 실무 적용 시 유의해야 할 한계도 명확합니다.

2026. 10. 11.

GitHub Copilot 텔레메트리, 사용자 식별과 프롬프트·도구 내용 수집을 분리

개발

GitHub Copilot 텔레메트리, 사용자 식별과 프롬프트·도구 내용 수집을 분리

GitHub가 관리 설정에서 Copilot 활동의 사용자·기기 식별 정보와 다섯 종류의 내용 수집을 독립 제어하도록 확장했다. 각 수집 항목은 기본적으로 꺼져 있으며 명시적 관리 값이 로컬 설정보다 우선한다. CLI·앱·VS Code의 실행 방식에 따라 적용 범위도 다르다.

2026. 10. 15.