작동 순서
- SDK를 이용하여 어플리케이션 측정
- Collector agent를 통해 트레이스 데이터 전송
- Collector는 OLTP를 이용해 4317(gRPC) and/or 4318(http)로 전송
- Traces는 예로 예거 등으로 전달되어 백엔드에 저장된다.
- Jaeger Query는 검색된 trace를 Jaeger UI로 전달한다.
- Jaeger UI는 trace를 분석할 수 있는 웹기반의 사용자 인터페이스를 제공한다.
- 백엔드는 1. Jaeger, Zipkin, Elastic, Cassandra, Tempo, Splunk, a vendor (Honeycomb, Lightstep, Signoz, Logz.io, Aspecto etc..). 등이 될 수 있다.
Otel을 사용하는 이유
Otel은 trace 데이터를 생성해서 우리에게 주는 도구이다. 벤더에 상관없이 표준화된 trace를 목표로 관찰한다.
어떤 툴이던 구애받지 않는 것은 좋다.
언어나 저장소를 타지 않음 → 구매가 필수가 아니다.
개발자들에겐 본인 환경에 맞게 사용하면 되는 툴인 것이다.
OpenTelemetry API
Defines how OpenTelemetry is used. → 어떻게 사용할지 정의
OpenTelemetry SDK
Defines the specific implementation of the API for a language. → 어떤 언어의 API를 구현할지 정의
구현
trace 데이터를 얻기 위해서는 사전에 구현된 어플리케이션이 필요하다 . trace 데이터를 수집하는 것은 SDK를 사용 할 수 있다는 것이다.
trace 데이터는 자동 혹은 메뉴얼대로 생성되고 사용 될수 있다.
Otel을 어플리케이션에서 구현하기 위해서는 Otel repo에 어플리케이션에 맞는 언어의 지침을 따라야한다.
어플리케이션을 제공하는 가장 좋은 방법은 Otel 자동화 도구를 사용하는것
접근하기 쉽고 간단하고 많은 코드를 바꿀 필요가 없다.
auto 라이브러리를 사용하는 것은수집되는 trace 정보를 수집하기 위한 코드를 쓸필요가 없다는 걸 의미한다.
Otel API, SDK는 쉽게 소프트웨어에서 trace를 분리해주는 부트스트랩을 제공한다.
opentelemetry-instrument python app.py
자동 계측을 사용하면 사전 정의된 세트 오프 범위가 생성되고 관련 속성으로 채워집니다.
OTLP(OpenTelemetry Protocol) 사양은 원격 측정 소스, 수집기와 같은 중간 노드 및 원격 측정 백엔드 간의 원격 측정 데이터의 인코딩, 전송 및 전달 메커니즘을 설명합니다.
OTLP 프로토콜은 원격 측정 데이터를 인코딩하고 전송하는 방법을 설명하므로 데이터 전송을 위한 자연스러운 선택이 됩니다. 각 언어 SDK는 OTLP를 통해 데이터를 내보내도록 구성할 수 있는 OTLP 내보내기를 제공합니다. 그런 다음 OpenTelemetry SDK는 이벤트를 OTLP 데이터로 변환합니다.
Collector
계측된 애플리케이션의 데이터는 OpenTelemetry 수집기로 전송될 수 있습니다.
수집기는 추적 데이터(범위, 지표, 로그 등) 프로세스를 수집 하고 (데이터 사전 처리) 데이터를 내보내는 (통신하려는 백엔드로 전송) OpenTelemetry 의 구성 요소입니다.
How to configure the OpenTelemetry Collector
Agent vs Gateway
The collector can be setup as an agent or as a gateway.
We usually first send traces to a (collector) agent. This (collector) agent handles the trace data from the instrumented application.
The (collector) agent can offload responsibilities that the client instrumentation otherwise need to handle. This includes batching, retry, encryption, compression and more.
You can also perform sampling here depending on the amount of traces/traffic you want to send. (ie. take only 10% of the traces).
You need to configure receivers (how data gets into the collector), which then transform the data (process) before sending it to one or more backends using exporters.
Receivers
port 4317 (gRPC)
otlp:
protocols:
grpc:
endpoint: "0.0.0.0:4317"
Exporters
Exporters OpenTelemetry 프로토콜( OTLP ) 형식의 데이터를 각각의 사전 정의된 백엔드 형식으로 변환 하고 백엔드 또는 시스템에서 해석할 수 있도록 이 데이터를 내보냅니다.
일반적인 시나리오(특히 테스트 중)는 jaeger-exporter 를 사용하여 모든 데이터를 Jaeger 로 직접 내보내는 것입니다 .
Storage Backend
OpenTelemetry 수집기는 자체 백엔드를 제공하지 않는다
Otel on Kubernetes
동작 구조
전통적인 Application 로그는 파일 로그를 통하여 수집하고 있습니다. OpenTelemetry Collector 에서는 filelogreceiver 를 이용하여 로그를 수집해서 Backend 시스템으로 전달을 할 수 있습니다.
다음으로는 가장 일반적으로 많이 사용되고 있는 Fluentd 또는 FluentBit 로그 수집 전용 Agent를 통한 로그를 수집하는 방식입니다. OpenTelemetry Collector 에서는 fluentforward를 통해서 Fluentbit에서 해당 포트로 로그를 전달받을 수 있습니다.
'Engineering' 카테고리의 다른 글
AWS External ALB, Internal ALB, EKS Targetgroupbinding 구성 (0) | 2024.03.08 |
---|---|
AWS EKS ALB 하나로 여러 Ingress 구성 ( Ingress Group, TargetGroupBinding) (0) | 2024.02.06 |
eksctl로 eks 구축해보기 with 스팟 인스턴스 (0) | 2024.01.25 |
OpenTelemetry Beginner & Kubernetes (0) | 2024.01.16 |
Helm Chart 인덱스 파일과 패키지 생성 및 GitHub 페이지로 호스팅하기 (1) | 2023.12.08 |