OpenTelemetry란?

OpenTelemetry(OTel)는 분산 시스템(예: 마이크로서비스 아키텍처)에서 텔레메트리 데이터를 수집, 처리 및 내보내기 위한 공급업체 중립적인 표준을 제공하는 오픈 소스 프로젝트입니다. 관찰 가능성에 대한 이러한 단순화되고 보편적인 접근 방식을 통해 개발자는 소프트웨어의 성능과 동작을 더 쉽게 분석하여 애플리케이션의 문제를 쉽게 진단하고 디버그할 수 있습니다. OTel은 다음과 같은 데이터를 수집합니다.

  • 추적 - "문제 위치는 어디입니까?"
  • 메트릭 - "문제가 있습니까?"
  • 로그 - "무엇이 문제입니까?"

OTel은 프로그래밍 언어나 제품이 아닙니다. 이 오픈 소스 프로젝트는 2019년부터 시작되었으며 현재 Cloud Native Computing Foundation(CNCF)에서 유지 관리하고 있습니다.

시작하는 방법을 알아보려면 이 동영상을 시청하십시오.

OTel에서 생성되는 데이터 유형

추적

추적은 단일 요청 처리와 같은 작업 중에 발생하는 이벤트를 기록합니다. 추적은 일련의 스팬으로 나뉘며, 각 스팬은 작업 단위를 나타냅니다.

예를 들어 웹 요청에 대한 추적에는 세 개의 스팬이 포함될 수 있습니다.

  • 요청 수락
  • 데이터베이스 쿼리
  • 응답 보내기

추적은 여러 서비스가 포함될 수 있는 데이터 흐름을 시간순으로 정렬된 일련의 청크로 분할하여 다음을 쉽게 이해할 수 있도록 도와줍니다.

  • 각 청크에서 발생한 모든 단계
  • 청크가 실행된 순서
  • 각 단계가 지속된 시간
  • 각 단계에 대한 메타데이터

OTel이 추적을 생성하고 나면 다음 단계는 분석을 위해 추적 백엔드 또는 도구로 내보내는 것입니다. OTel은 Jaeger, ZipkinAWS X‑Ray 등과 같이 널리 사용되는 백엔드용 내보내기 도구 세트를 제공합니다. 이들 서비스는 추적 데이터를 분석하고 시각화할 수 있는 도구를 제공합니다.

메트릭

OTel에서 메트릭은 운영 체제 동작의 특정 측면을 측정하며 키-값 쌍(메트릭 레이블이라고 함)으로 시간 경과에 따라 수집됩니다. 키-값 쌍은 시간 경과에 따른 측정에 대한 컨텍스트를 제공합니다. 예를 들어 웹 서비스의 응답 시간에 대한 메트릭에는 HTTP 상태 코드, 엔드포인트 및 HTTP 메서드에 대한 레이블이 포함될 수 있습니다. 또한 모든 메트릭에는 타임스탬프가 찍혀 있기 때문에 시간순으로 다시 정렬할 수 있습니다.

로그

로그는 지정된 서비스에서 어떤 일이 일어나고 있는지에 대한 인사이트를 얻는 가장 오래되고 가장 일반적인 방법입니다. 로그는 일반적으로 텍스트로 생성되며 인사이트를 생성하려면 구문 분석을 해야 합니다. OTel에서 로그 지원은 아직 실험 단계입니다.

F5 솔루션 설계자들이 다른 관찰 가능성 도구와 OTel의 관찰 가능성 기능 집합을 비교하면서 발견한 사항에 대해 자세히 알아보려면 F5 블로그에서 최신 앱 참조 아키텍처에 OpenTelemetry 통합 - 진행 보고서를 참조하십시오.

OTel 계측

OTel은 대중적으로 많이 사용되는 프로그래밍 언어, 라이브러리 및 프레임워크와 통합됩니다. 일부 언어의 지원은 다른 언어보다 더 포괄적입니다. 예를 들어 JavaScript 계측 라이브러리는 추적 및 메트릭에 대해 자칭 "안정적"인 구현을 갖추고 있으며, 로그에 대해서도 가장 안정적인 지원 중 일부를 제공합니다. 또한 서비스 로직에 계측 관련 코드를 추가하지 않고도 추적 내용 수신을 시작할 수 있는 자동 계측 옵션을 제공합니다. 반면에 Go와 같은 언어는 메트릭 및 로그에 대한 덜 신중한 지원을 제공하며 자동 계측 기능이 부족합니다.

텔레메트리 목표

텔레메트리 계측을 설정할 때는 "모든 것을 전송하고 인사이트를 얻겠다"는 것보다 명확한 계측 목표로 시작하는 것이 좋습니다. 데이터를 확인하기 전까지는 가능한 모든 범위를 알 수 없는 것이 사실이지만, 몇 가지 최소한의 요구 사항을 설정하면 서비스의 원활한 운영 및 유지 관리를 보장하는 데 도움이 됩니다.

다음과 같은 기술적 문제일 수 있습니다.

  • 서비스가 압박을 받고 있어 확장이 필요한 시기를 알고 싶습니다.
  • 서비스가 종종 재시작되는지 알고 싶습니다.

하지만 다음과 같은 제품 및 사용자 경험과 관련된 문제일 수도 있습니다.

  • 사용자가 5초 이내에 시스템에서 새 메시지를 볼 수 있도록 하려고 합니다.
  • 메시지가 전송된 후 1분 이내에 알림이 전송되기를 원합니다.

자습서 OpenTelemetry 추적을 사용하여 마이크로서비스를 이해하는 방법의 예로, 다음을 주요 목표로 정의할 수 있습니다.

  • 새로운 메시지 흐름을 완료하기 위해 요청이 수행하는 모든 단계를 이해합니다.
  • 사용자 흐름이 성공적으로 완료되었는지 확인합니다.
  • 사용자 흐름이 처음부터 끝까지 5초 이내 실행되고 있다는 확신을 갖습니다(“정상적인” 상황에서).
  • 알림 서비스가 (메신저 서비스에서 발송한) 이벤트를 적시에 처리하고 있는지 알아봅니다.
OTel 구현

OTel은 개발자가 일관되고 표준화된 방식으로 애플리케이션을 계측하는 데 사용할 수 있는 단일 애플리케이션 프로그래밍 인터페이스(API), 소프트웨어 개발 키트(SDK) 및 계측 라이브러리 세트를 제공합니다.

OTel에서 생성되는 데이터 형식은 업계 표준으로 간주되므로 여러 텔레메트리 집계 및 시각화 솔루션에서 이를 수용합니다. Jaeger(이 자습서에서 사용)와 같은 온프레미스 솔루션을 선택하거나 SumoLogic 또는 SigNoz와 같은 SaaS(Software-as-a-Service) 솔루션을 선택할 수 있습니다.

세 가지 유형의 텔레메트리를 모두 관리하려면 여러 도구를 조합하는 것이 OTel에 대한 유일한 대안입니다. 이는 마이크로서비스 아키텍처 및 인프라 운영과 관련된 고유한 복잡성에 더해 훨씬 더 복잡성을 가중시킵니다.

OTel의 맥락에서 API는 무엇입니까?

API는 소프트웨어 구성 요소가 서로 상호 작용하는 데 사용하는 방법, 기능 및 프로토콜을 정의합니다. OTel API는 개발자가 애플리케이션을 계측하고 텔레메트리 데이터를 수집하는 데 사용할 수 있는 표준 방법 및 프로토콜 세트를 정의합니다.

OTel의 맥락에서 SDK는 무엇입니까?

SDK는 표준 또는 애플리케이션 작성자가 제공하는 소프트웨어 개발 도구로, 개발자가 표준을 준수하거나 앱과 상호 작용하는 애플리케이션을 쉽게 빌드할 수 있도록 지원합니다. SDK에는 일반적으로 라이브러리, 코드 샘플, 문서 및 도구(테스트, 디버깅 및 성능 조정에 사용)가 포함됩니다. OTel은 추적, 메트릭리소스 관리를 위한 SDK를 제공합니다.