OpenTelemetry 일명 Otel을 추적, 메트릭, 로그와 같은 원격 측정 데이터를 계측하고
생성하고 수집하고 내보내는 오픈소스 Observability 프레임워크 입니다
Otel은 기본적으로 다른 플랫폼에서 receivers로 데이터를 수신받고 수집된 데이터를 1차가공하여
exporters로 다른 플랫폼으로 전송하게 된다
Microservices 뿐만아니라 Infra, Client 등 여러 데이터를 받아 OTel에서 하나의 통합된 로그 포맷으로 만든뒤
Grafana, Prometheus 등 여러 곳으로 데이터를 전송하게 된다
중간에서 데이터를 송, 수신하는 중계 역할을 하게된다
높은 확장성과 다른 플랫폼과 호환되는 호환성으로 간단하고 쉽게 계측이 가능하다
Otel을 이용한 계측 데이터를 수집하기위해서는 크게 2가지의 방법을 지원한다
1. API, SDK를 이용한 코드 베이스로 계측 기능 추가
- 직접 코드로 API, SDK를 연동하여 데이터를 송, 수신
2. 제로 코드 계측
- 코드로 연결하지 않고 Otel에서 제공하는 스크립트나 Agent로 연동
기본적으로 C, C++, Java, Python 등 여러 언어의 API와 SDK를 제공하며
공식문서에서는 API 참고문서나 예시 자료를 제공하여 가이드라인을 제공해주고 있다
직접 코드베이스에 API나 SDK를 연동해서 구현할수 있지만 코드를 건들이지 않고 연동하는 방법도 존재한다
제로코드 계측 같은 경우는 언어마다 지원하는 방법이 다르며, Java로 예시를 들어보자면
Java Agent를 이용해서 Jar파일 빌드하고 실행할때 Agent도 같이 올려 자동으로 계측데이터를 수집한다
Spring Boot 사용자라면 Otel Starter에 의존성을 추가해서 간단한 설정으로 사용이 가능하다
Otel에서는 Collector라는 녀석을 지원한다
OpenTelemetry Collector는 분산 추적 및 메트릭 데이터를 수집, 처리, 변환, 그리고 내보내는 독립 실행형 서비스이다 OpenTelemetry 에코시스템의 핵심 구성 요소로, 다양한 소스에서 데이터를 받아 표준화하고,
원하는 대상에 전송하는 역할을 하게된다
Otel Collector에 대표적인 기능은 다음과 같다
- 데이터 수집 (Receivers)
다양한 프로토콜과 에이전트를 통해 데이터를 수집합니다. 예를 들어:- 애플리케이션에서 OTLP(HTTP/GRPC) 프로토콜로 보낸 데이터
- Jaeger, Zipkin 등 다른 추적 시스템의 데이터
- 데이터 처리 (Processors)
수집된 데이터를 필요에 따라 전처리하거나 보강합니다. 예:- 데이터 샘플링
- 속성 추가/변경
- 오류 데이터 필터링
- 데이터 내보내기 (Exporters)
처리된 데이터를 최종 저장소나 관찰 도구로 내보냅니다. 예:- Grafana, Prometheus와 같은 메트릭 시스템
- Jaeger, Zipkin, Datadog, Splunk 같은 추적 도구
- 확장 가능성
플러그인 기반 아키텍처로, 새로운 수집기, 처리기, 내보내기 모듈을 추가하여 기능을 확장할 수 있다
Collector의 구성 요소
- Receivers
데이터를 수집하는 엔트리 포인트. 지원하는 주요 프로토콜:- OTLP (OpenTelemetry Protocol)
- Jaeger
- Zipkin
- Prometheus
- StatsD
- Processors
수집된 데이터를 전처리하는 단계:- Batching: 데이터를 배치 처리하여 전송 효율성을 높임.
- Filtering: 필요 없는 데이터를 걸러냄.
- Transforming: 데이터를 특정 요구 사항에 맞게 변환.
- Exporters
데이터를 외부 시스템으로 내보냄:- APM 도구 (Datadog, Splunk, New Relic 등)
- 데이터베이스 및 저장소
- 시각화 도구 (Grafana, Elasticsearch 등)
- Extensions
Collector의 동작을 보강하는 플러그인. 예:- 인증 및 보안 설정
- 메모리, CPU 사용량 모니터링
- Service
구성 파일을 기반으로 전체 파이프라인을 조정한다
OpenTelemetry Collector의 장점
- 표준화된 데이터 처리
서로 다른 데이터 형식(추적, 메트릭, 로그)을 하나의 표준으로 통합 처리 가능. - 유연성
다양한 데이터 소스와 대상 지원, 필요에 따라 플러그인 확장 가능. - 성능 최적화
데이터를 로컬에서 처리하므로 애플리케이션의 부하를 줄이고 네트워크 대역폭을 효율적으로 사용. - 벤더 중립성
특정 도구에 종속되지 않고 다양한 대상과 호환 가능. - 스케일링
경량 서비스로 설계되어 Kubernetes 등에서 쉽게 확장 가능. - 보안
데이터 암호화, 인증, 접근 제어를 통해 보안 강화 가능
OpenTelemetry Collector의 단점
- 구성 복잡성
다양한 구성 요소와 옵션이 있어 처음 설정 시 학습 곡선이 가파를 수 있음. - 추가 리소스 필요
별도의 서비스로 실행되므로 시스템 리소스를 추가로 소비. - 버그 및 호환성
특정 Exporter 또는 Processor에서 발생하는 호환성 문제나 버그. - 운영 관리 비용
Collector 인스턴스를 배포, 유지보수 및 모니터링해야 함
Otel은 오픈소스이기 떄문에 여러 컨트리뷰터들이 계속해서 플러그인을 추가하고있으며,
정말 많은 exporter들을 계속해서 업데이트하고 제공해준다
https://github.com/open-telemetry/opentelemetry-collector
GitHub - open-telemetry/opentelemetry-collector: OpenTelemetry Collector
OpenTelemetry Collector. Contribute to open-telemetry/opentelemetry-collector development by creating an account on GitHub.
github.com
'컴퓨터 > 기술' 카테고리의 다른 글
아파치 카프카(Apache Kafka) 는 왜 필요할까? (0) | 2024.11.02 |
---|---|
아파치 카프카(Apache Kafka) 사용하기 (4) | 2024.10.31 |