OpenTelemetry란 무엇인가요?
OpenTelemetry(OTel)는 분산 시스템(예: 마이크로서비스 아키텍처)에서 텔레메트리 데이터를 수집, 처리 및 내보내기 위한 벤더 중립적 표준을 제공하는 오픈 소스 프로젝트입니다. 이처럼 간소화된 범용 옵저버빌리티 접근 방식을 통해 개발자는 소프트웨어의 성능과 동작을 더 쉽게 분석하고 애플리케이션의 문제를 더욱 손쉽게 진단하고 디버깅할 수 있습니다. OTel은 다음 데이터를 수집합니다.
- 추적 – “문제가 어디에 있나요?”
- 메트릭 – “문제가 있나요?”
- 로그 – “문제가 무엇인가?”
OTel은 프로그래밍 언어나 제품이 아닙니다. 이 오픈 소스 프로젝트는 2019년부터 이어져 왔으며, 현재 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 관리하고 있습니다.
시작하는 방법을 알아보려면 이 동영상을 시청하세요:
OTel에서 생성되는 데이터 유형
트레이스
트레이스는 단일 요청 처리와 같은 작업 중에 발생하는 이벤트를 기록합니다. 트레이스는 일련의 스팬으로 나뉘며, 각 스팬은 하나의 작업 단위를 나타냅니다.
예를 들어 웹 요청의 트레이스에는 다음과 같은 세 개의 스팬이 포함될 수 있습니다:
- 요청 수락
- 데이터베이스 쿼리
- 응답 보내기
트레이스는 여러 서비스를 포함할 수 있는 데이터 흐름을 시간순으로 정렬된 일련의 구간으로 나누어 다음 내용을 쉽게 파악할 수 있도록 합니다:
- 각 청크에서 발생한 모든 단계
- 청크가 실행된 순서
- 각 단계에 걸린 시간
- 각 단계에 대한 메타데이터
OTel이 트레이스를 생성한 후 다음 단계는 분석을 위해 이를 트레이싱 백엔드나 도구로 내보내는 것입니다. OTel은 다음과 같은 널리 사용되는 백엔드를 위한 다양한 익스포터를 제공합니다. Jaeger, Zipkin, 그리고 AWS X‑Ray. 이러한 서비스는 트레이스 데이터를 분석하고 시각화하는 도구를 제공합니다.
메트릭
OTel에서 메트릭은 운영 체제 동작의 특정 측면을 측정한 값으로, 시간의 흐름에 따라 키-값 쌍(메트릭 레이블)으로 수집됩니다. 키-값 쌍은 시간에 따른 측정값에 대한 컨텍스트를 제공합니다. 예를 들어 웹 서비스의 응답 시간 메트릭에는 HTTP 상태 코드, 엔드포인트, HTTP 메서드에 대한 레이블이 포함될 수 있습니다. 또한 모든 메트릭에는 시간순으로 정렬할 수 있도록 타임스탬프가 지정됩니다.
로그
로그는 특정 서비스에서 어떤 일이 일어나고 있는지 파악하는 가장 오래되고 일반적인 방법입니다. 일반적으로 텍스트로 생성되며, 유용한 정보를 얻으려면 이를 파싱해야 합니다. OTel의 로그 지원은 아직 실험 단계입니다.
당사의 솔루션 아키텍트가 OTel의 관측 가능성 기능 세트를 다른 관측 가능성 도구와 비교하여 알아낸 내용을 자세히 살펴보려면 당사 블로그의 최신 앱 참조 아키텍처에 OpenTelemetry 통합하기 – 진행 상황 보고서를 참조하세요.
OTel 계측
OTel은 널리 사용되는 다양한 프로그래밍 언어, 라이브러리 및 프레임워크와 통합됩니다. 지원 수준은 언어마다 다릅니다. 예를 들어 JavaScript 계측 라이브러리는 트레이싱과 메트릭 모두에 대해 자체적으로 “안정적”이라고 평가하는 구현을 제공하며, 로그 지원도 가장 안정적인 편에 속합니다. 또한 서비스 로직에 계측 관련 코드를 추가하지 않고도 트레이스를 수신할 수 있는 자동 계측 옵션을 제공합니다. 반면 Go와 같은 언어는 메트릭 및 로그 지원의 성숙도가 낮고 자동 계측 기능도 제공하지 않습니다.
텔레메트리 목표
텔레메트리 계측을 설정할 때는 “모든 데이터를 전송하고 유용한 인사이트가 나오기를 기대한다”는 막연한 생각보다 구체적인 계측 목표를 먼저 세우는 것이 좋습니다. 실제로 데이터를 확인하기 전까지는 무엇이 가능한지 그 범위를 완전히 알 수 없지만, 최소한의 요구 사항을 정해 두면 서비스를 원활하게 운영하고 유지 관리하는 데 도움이 됩니다.
다음과 같은 기술적 고려 사항이 있을 수 있습니다:
- 서비스에 부하가 걸려 확장이 필요한 시점을 알고 싶습니다.
- 내 서비스가 자주 재시작되는지 알고 싶습니다.
하지만 다음과 같이 제품 및 사용자 경험과 관련된 문제일 수도 있습니다:
- 사용자가 시스템에서 새 메시지를 5초 이내에 볼 수 있기를 원합니다.
- 메시지가 전송된 후 1분 이내에 알림이 발송되기를 원합니다.
예를 들어, 다음 튜토리얼에서는 OpenTelemetry 추적을 사용하여 마이크로서비스를 이해하는 방법, 다음과 같은 핵심 목표를 정의할 수 있습니다:
- 새로운 메시지 흐름을 완료하기 위해 요청이 거치는 모든 단계를 파악합니다.
- 사용자 흐름이 성공적으로 완료되었는지 확인합니다.
- 사용자 흐름이 처음부터 끝까지 5초 이내에 실행된다는 확신을 가질 수 있습니다(‘정상적인’ 상황에서).
- 알림 서비스가 메신저 서비스에서 전달된 이벤트를 적시에 처리하고 있는지 확인합니다.
OTel 구현
OTel은 개발자가 애플리케이션을 일관되고 표준화된 방식으로 계측하는 데 사용할 수 있는 단일한 애플리케이션 프로그래밍 인터페이스(API), 소프트웨어 개발 키트(SDK), 계측 라이브러리 세트를 제공합니다.
OTel에서 생성되는 데이터 형식은 업계 표준으로 간주되므로 다양한 텔레메트리 집계 및 시각화 솔루션에서 이를 지원합니다. 이 튜토리얼에서 사용한 Jaeger와 같은 온프레미스 솔루션을 선택하거나, 다음과 같은 서비스형 소프트웨어(SaaS) 솔루션을 선택할 수 있습니다. SumoLogic 또는 SigNoz.
세 가지 유형의 텔레메트리를 모두 관리하려면 OTel 대신 여러 도구를 조합해서 사용해야 합니다. 이로 인해 마이크로서비스 아키텍처와 인프라를 운영할 때 수반되는 본질적인 복잡성에 더해 추가적인 복잡성까지 발생합니다.
OTel에서 API란 무엇인가요?
API는 소프트웨어 구성 요소가 서로 상호 작용하는 데 사용하는 메서드, 함수 및 프로토콜을 정의합니다. OTel API 는 개발자가 애플리케이션을 계측하고 텔레메트리 데이터를 수집하는 데 사용할 수 있는 표준 메서드 및 프로토콜 집합을 정의합니다.
OTel에서 SDK란 무엇인가요?
SDK는 표준 또는 애플리케이션의 제작자가 제공하는 소프트웨어 개발 도구로, 개발자가 해당 표준을 준수하거나 애플리케이션과 상호 작용하는 애플리케이션을 더 쉽게 구축할 수 있도록 지원합니다. SDK에는 일반적으로 라이브러리, 코드 샘플, 문서와 테스트, 디버깅 및 성능 튜닝을 위한 도구가 포함됩니다. OTel은 트레이싱, 메트릭, 리소스 관리를 위한 SDK를 제공합니다.
