Notification
새로운 알림이 없습니다.

[Observability] OpenTelemetry(1)

Observability Tool: OpenTelemetry

  • Agenda
    • What is Observability?
    • What is OpenTelemetry?
      • Overview
      • Architecture
      • Collector Data Flow
  • Next Actions
  • Reference Link

What is Observability?

https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/observability/

OpenTelemetry에 대해서 알아보기 전에, Observability라는 단어의 유래에 대해서 알아야 할 것 같습니다.

Observability란, System의 External Outputs만을 이용해서 현재 상태를 이해할수 있는 능력이라고 Rudolf가 표현했습니다.

현대 IT 환경에서 Observability의 중요성이 부각되고 있는 이유는 IT 시스템의 성능을 평가하고 모니터링하며 문제를 해결하기 위해 필요한 통찰력과 도구를 제공하기 때문입니다. 현대의 복잡하고 분산된 시스템에서는 문제를 정확하게 식별하고 신속하게 해결해야 하며, 이를 위해 Observability가 필수적입니다.

Observability의 핵심 구성 요소로는 Metrics, Traces, Logs가 있으며, 상세 설명에 대한 내용은 아래와 같습니다.
  • Metrics
    • System의 성능 및 상태를 측정하는 항목은 다양한 성능 관련 정보를 수집
    • CPU, 디스크, 메모리 사용량, 네트워크 대역폭, 요청 횟수, 데이터베이스 쿼리 실행 횟수 등이 포함
    • 데이터는 정기적으로 수집되며, 시계열 데이터베이스에 저장함
    • 저장된 데이터는 시간에 따른 트렌드를 분석하고 시스템의 성능 문제를 식별하는 데 사용됨
  • Traces
    • Request 또는 Transaction의 실행 경로를 기록한 데이터는 시스템 내에서의 상호 작용을 추적
    • 분산 시스템에서 여러 서비스와 구성 요소 간의 상호 작용을 추적하여 어떤 요청이 어떤 서비스를 거치는지, 그리고 걸리는 시간을 시각적으로 나타냄
    • Trace Data는 System의 병목 현상을 식별하며 서비스 간의 종속성을 이해하는데 도움을 줌
  • Logs
    • System에서 발생하는 Event, 활동 및 Error에 대한 Text 또는 구조화된 데이터
    • 개발자와 운영팀이 시스템 동작을 이해하고 문제를 진단하는데 사용됨
    • Log Data에는 Software Error, Access Logs, Event Message, Debugging 정보 등이 포함됨

추가로 Observability 조직은 아래의 기능들을 지원 할 수 있습니다.
  • Business 통찰력
    • Incident가 Business에 미치는 중요성 파악 및 분석
  • 성능 최적화
    • Software 개발 수명 주기의 효율성 항상
    • 문제 해결과 디버깅
    • 시스템 안정성 향상
  • 팀 협업 강화
  • 보안 및 규정 준수
Observability에 대한 이해를 바탕으로 Observability Toolkit 중 하나인 OpenTelemetry에 대해 자세히 살펴보겠습니다.

What is OpenTelemetry?

Overview

OpenTelemetry는 Trace, Metrics, Logs와 같은 원격 측정 데이터를 생성하고 관리하도록 설계된 Observability framework 및 Toolkit 입니다.

OpenTelemetry의 주요 기능 및 특징은 아래와 같습니다.
  • Multi-language Support
    • Java, Python, GO, Node.js, .NET 및 Rust 등의 언어가 지원됨
  • Distributed tracing
    • 분산 응용 프로그램에서 서비스 간 호출 및 응답 경로를 추적하는데 사용되는 추적 데이터 수집 가능함
  • Metric Collection
    • 성능 지표와 사용량 정보를 모니터링하고 기록하는 데 사용되는 표준화 된 API를 제공
  • Context Management
    • OpenTelemetry는 Call Stacks and Request-Response 상태를 유지하며, Trace 및 Log Data에 연결하는 Context Management를 지원
  • Data export
    • OpenTelemetry는 다양한 Backend System에 Data를 내보내는 데 사용할 수 있는 Plugin을 제공
Architecture
https://opentelemetry.io/docs/

OpenTelemetry Architecture의 구성요소는 아래와 같습니다.
  • Microservices
    • OTel Auto. Inst.
      • Application Code에 Trace, Metrics, Logs 삽입하는데 사용됨
      • Application Code의 Function 및 Method 호출을 추적하고, User Event 및 Metric을 생성하여 Tracing을 활성화함
    • OTel API & SDK 
      • 개발자에게 Trace 및 Metric API를 제공해서 Application Code에서 OpenTelemetry Library와 상호 작용할 수 있도록 기능 제공
  • Shared Infra
    • CSP(AWS, Azure, GCP) & Kubernetes
      • Container Management Platform(Kubernetes, Docker) 및 Hosting Service(AWS, Azure, GCP)와 통합하여 Observability Component를 실행하고 관리 가능
    • L7 Proxy
      • L7 Proxy에서 생성된 Log 및 Monitoring Data를 분석하고 Monitoring하여 Observability를 향상 시킬수 있음
  • OTel Collector
    • 다양한 Service 및 Application에서 Data를 수집하고, Central Aggregation에서 Data를 처리, 저장 또는 전달하기 위한 중간 단계
  • Client Instrumentation
    • Managed DBs
      • 관리형 DB와의 상호 작용을 추적하고 모니터링 하는 역할
      • DB Query 또는 Transaction 시작과 종료를 Trace하여 어떤 DB와 어떤 작업이 수행되었는지를 기록
      • DB 작업의 성능 및 Latency를 측정하고 DB 성능 문제를 식별
      • DB Transaction 상태 와 결과를 추적하여 문제 진단 및 DB 오류를 감지
    • APIs
      • API 호출의 시작과 종료를 추적하여 외부 서비스간의 상호 작용을 기록
      • API 호출의 성능 및 지연시간 측정
  • Observability Frontends & APIs
    • Observability Data를 Graph, Dashboard, Chart등의 형식으로 시각화
      • Time Series Databases
        • 시계열 Metric Data를 저장하고 Query할 수 있는 DB를 제공
      • Trace Databases & Column Stores
        • Trace & Log Data를 저장하고 검색할 수 있는 Database 및 Store System을 제공
        • Column Stores의 경우, 분산 시스템의 대용량 데이터를 저장하고 조회하는데 유용함
OpenTelemetry는 현대의 복잡한 IT 환경에서 중요한 도구 중 하나로, System의 Observability 향상시키고 성능을 모니터링하며 문제를 식별하는 데 도움을 줍니다. 

OpenTelemetry는 다양한 언어와 환경에서 사용할 수 있으며, 계속 발전하고 있습니다.

OpenTelemetry를 사용하면 시스템 동작을 실시간으로 모니터링하고 문제를 빠르게 진단하는 데 필요한 데이터를 효과적으로 수집하고 분석할 수 있습니다.


Collector Data Flow
 
https://opentelemetry.io/docs/demo/collector-data-flow-dashboard/

  • OpenTelemetry Demo App
    • Agent
      • Agent는 Traces Pipeline 및 Metrics Pipeline과 상호 작용하며, Data 수집과 전송을 조율함
      • Data를 수집하고 처리하는 여러 구성 요소 간의 통신을 간소화 및 성능 최적화를함
    • SDK
      • OTLP(OpenTelemetry Protocol) 형식으로 보내기 위한 Interface 및 Library 제공
      • Metric Data를 생성하고, Metric 표준 형식으로 내보내는 기능 제공
  • Traces Pipeline
    • OTLP Receiver
      • OTLP Protocol을 사용하여 수신한 Trace 및 Metric Data를 후속 처리 단계로 전달함 
    • Spanmetrics Processor
      • Trace Data에서 추출한 정보를 사용하여 Metric Data를 생성하고, 해당 Metric Data를 Trace Data에 연결하여 두 Data 유형 간의 상호 작용을 가능하게 함
    • Batch Processor
      • 대량의 Data를 효율적으로 처리하기 위해 Data를 일괄 처리하고, 여러개의 Event를 한 번에 전송하는 역할을 함
    • OTLP Exporter
      • OTLP 형식의 Data를 생성하고, 외부 시스템(Prometheus OR Jaeger)으로 전송하는 역할을 함
    • Logging Exporter
      • Log Data를 수집하고, 해당 Data를 Logging Server OR External Log Storage에 전송하는 역할을 함
  • Metrics Pipeline
    • Filter Processor
      • Metric Data를 평가하여, 지정된 조건에 따라 Data를 Filtering 하고, Filtering된 Data만 다음 처리 단계로 전달하는 역할
      • 불필요한 데이터를 제거하거나 특정 조건에 부합하는 데이터를 선택적으로 전달 가능
    • Transform Processor
      • Metric Data의 값을 변환하거나 새로운 Metric을 생성 가능
      • 단위 변환, Data 집계 또는 Metric 이름 변경과 같은 변환 작업 수행 가능
    • Prometheus Exporter
      • 수집된 Metric Data를 Prometheus로 전송하여, Prometheus가 이러한 Metric Data를 Scrape하고 저장할수 있도록 전달함
      • Prometheus Monitoring System에서 Metric Data를 시각화 하고 Query 가능(PromQL)
  • OTel Process와 Prometheus Connection
    • Prometheus 설정
      • Otelcol Process의 주소 및 Endpoint를 설정하여 Data 수집을 허용함
    • Pull 방식 통신
      • Prometheus는 주기적으로 Otelcol Process의 Endpoint를 호출하여 Metric Data를 가져옴
      • Prometheus는 위 과정으로 생성된 Metric Data를 Scrape하고 저장함
    • 시각화 및 쿼리
      • 수집된 Metric Data는 Prometheus 시각화 도구인 Grafana와 함께 사용하여 시각화 가능
이러한 구성 요소는 Opentelemetry Demo App에서 데이터 수집, 가공 및 전송을 위한 핵심 역할을 하며, 분산 시스템의 모니터링 및 분석을 용이하게 합니다. 

추가로 Filter Processor 및 Transform Processor는 수집된 메트릭 데이터를 필터링하고 가공하는 역할을 하며, Prometheus Exporter는 해당 메트릭 데이터를 Prometheus 형식으로 내보내어 Prometheus와 통신할 수 있도록 합니다.
이를 통해 메트릭 데이터를 모니터링하고 시각화하는 데 사용됩니다.

Next Actions

해당 글을 통해 Observability와 OpenTelemetry Architecture, 그리고 각각의 구성 요소들이 어떤 역할을 하는지와 그 기능에 대해 배워보았습니다. 다음 글에서는 VM 또는 Container 환경에서 OpenTelemetry를 활용하여 Monitoring 및 Logging 하는 방법에 대해 자세히 살펴보겠습니다.

끝으로 이 포스팅을 보시는 분들이 관련 정보를 얻으시는데 도움이 되었으면 합니다. 

Reference Link



Observability
Stan Cloud
Stan Cloud
An avid cloud engineering Fan
대화 참여하기
댓글 쓰기