OpenTelemetry란?
Trace, Metric, Log 같은 데이터를 instrumenting, generating, collecting, exporting하는 Observability framework이다. OTel은 상용 서비스 또는 Jaeger, Prometheus, Grafana와 같은 오픈소스 백엔드로 데이터를 전송하여 데이터를 저장하고, trace, metric, log 데이터를 저장하거나 쿼리할 수 있는 방법을 제공하지는 않는다.
OTel 아키텍처 및 구성 요소
개발 연어별 SDK, 데이터 수집, 변환 및 데이터 내보내기, 자동 계측 패키지를 포함한 여러 구성 요소로 구성된다. 아래 그림은 오픈텔레메트리의 아키텍처와 구성요소를 나타낸 그림이다.
구성 요소
- 신호: 로그, 메트릭, 추적에 대한 기술적인 스펙을 정의
- 구성
- 데이터 모델
- API
- SDK
- 계측 라이브러리
- 리소스
- 배기지
- 이벤트
- 링크
- 구성
- 콘텍스트 전파: 다양한 스트림 간에 문맥을 전달하는 과정을 의미하고, 이를 통해 사용자 정의값(배기지) 전파가 가능
- 추적 콘텍스트를 전파하려면 오픈텔레메트리 API에 전파자를 등록해야 함
- 파이프라인: OTel에서 컬렉터를 구현하는 구체적인 방법을 설명
- otel 파이프라인 아키텍처
- 1) 프로바이더: 텔레메트리 데이터를 생성하기 전 애플리케이션 코드를 초기에 구성해야 함
- 2) 텔레메트리 생성기
- 프로바이더가 인스턴스화한 텔레메트리 생성기를 SDK에서 사용할 수 있음
- 텔레메트리 생성기를 인스턴스화할 때 애플리케이션과 계측 라이브러리는 프로바이더에게 이름을 전달해야 함
- 3) 프로세서
- 텔레메트리 데이터가 생성되면 프로세스는 데이터 내용을 추가로 수정할 수 있는 기능을 제공
- 4) 익스포터
- 오픈텔레메트리의 내부 데이터 모델을 구성된 익스포터와 가장 일치하는 형식으로 변환
- otel 파이프라인 아키텍처
OTel collector
메트릭, 추적, 로그를 수신, 처리 후에 오텔 백엔드로 데이터를 내보내는 방법을 제공한다. OTel의 구성은 Receivers, processors, exporters 세 가지로 구성된다.
- Receivers: 프로토콜을 통해 데이터를 수신받을 수 있고, 오텔 컬렉터는 다양한 receivers를 제공한다.
- Processors: 수신한 데이터를 백엔드로 보내기 전 데이터를 변경할 수 있다.
- Exporters: 데이터를 하나 이상의 오텔 백엔드로 보내는 방법이다.
컬렉터를 사용해 아래와 같이 데이터 파이프라인 YAML을 구성할 수 있다.
receivers:
jaeger:
protocols:
thrift_http:
exporters:
otlp:
endpoint: tempo:4317
insecure: true
service:
pipelines:
traces:
receivers: [jeager]
exporters: [otlp]
OpenTelemetry Demo
GitHub - open-telemetry/opentelemetry-demo: This repository contains the OpenTelemetry Astronomy Shop, a microservice-based dist
This repository contains the OpenTelemetry Astronomy Shop, a microservice-based distributed system intended to illustrate the implementation of OpenTelemetry in a near real-world environment. - ope...
github.com
책에 있는 데모 대신 위의 깃허브 데모를 간단히 알아보겠습니다. 도커와 쿠버네티스로 데모를 실행할 수 있는데 저는 쿠버네티스로 데모를 실행하는 것에 대해 알아봤습니다.
1. 데모 실행
# helm 사용한 설치
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install my-otel-demo open-telemetry/opentelemetry-demo
kubectl apply --namespace otel-demo -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-demo/main/kubernetes/opentelemetry-demo.yaml
# 포트포워딩
kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
2. 인그레스를 사용해 데모 구성 요소 노출
components:
frontendProxy:
ingress:
enabled: true
annotations: {}
hosts:
- host: otel-demo.my-domain.com
paths:
- path: /
pathType: Prefix
port: 8080
3. 콜렉터 구성하기
opentelemetry-collector:
config:
exporters:
otlphttp/example:
endpoint: <your-endpoint-url>
service:
pipelines:
traces:
exporters: [spanmetrics, otlphttp/example]
4. 사용자 정의 파일로 helm 차트 설치
helm install my-otel-demo open-telemetry/opentelemetry-demo --values my-values-file.yaml
'Observability' 카테고리의 다른 글
[모니터링의 새로운 미래 관측성] Ch3-1. 관측 가능성의 시작, 프로메테우스 (프로메테우스의 기능, 노드 익스포터 예제) (0) | 2024.11.18 |
---|---|
[모니터링의 새로운 미래 관측 가능성] Ch1. 관측 가능성의 개념과 방향성 (3) | 2024.11.11 |