본문 바로가기
AWS/운영

ADOT(AWS Distro for OpenTelemetry)설명 및 배포 가이드

by ssyeon 2025. 11. 25.

 

AWS 환경에서의 OpenTelemetry Collector 활용에 대해 정리한 글입니다

특히 AWS Distro for OpenTelemetry(이하 ADOT)를 중심으로 Collector를 어떻게 구성하고 활용할 수 있는지 정리했습니다. 

 


 

OpenTelemetry Collector란?

OpenTelemetry Collector(이하 OTEL Collector)는 로그, 메트릭, 트레이스와 같은 관측성 데이터(observability data)를 수집하고 처리한 후, 외부 백엔드(예: AWS CloudWatch, X-Ray, Prometheus 등)로 전송해주는 오픈소스 컴포넌트 입니다. Collector는 관측성 파이프라인의 중심에 위치하며, 다양한 수집기(Receiver)와 전처리기(Processor), 전송기(Exporter)를 플러그인처럼 조합하여 동작합니다.

애플리케이션에서 나오는 다양한 관측성 데이터를 표준화된 방식으로 모아서 필요한 곳으로 넘겨주는 역할이라고 볼 수 있습니다. 

 


 

AWS가 배포하는 ADOT란?

AWS는 OpenTelemetry 프로젝트의 주요 기여자 중 하나로, OpenTelemetry Collector를 AWS에 최적화하여 배포한 것이 바로 ADOT(AWS Distro for OpenTelemetry)다. ADOT는 다음과 같은 특징을 가집니다

 

  • AWS 서비스(CW Logs, X-Ray 등)와의 연동 기능이 내장돼 있음
  • OpenTelemetry Collector를 기반으로 하되 AWS 인증, 네트워크, 모니터링에 최적화된 구성 제공
  • 사용자가 직접 컴포넌트를 조합하여 Collector를 커스터마이징할 수 있도록 제공

 


 

Collector 구성요소 상세 설명

OTEL Collector는 크게 세 가지 핵심 컴포넌트로 구성됩니다

 

  1. Receivers
    • 데이터를 수신하는 컴포넌트
    • 예: OTLP, Prometheus, Jaeger, Zipkin, FluentForward 등 다양한 프로토콜을 지원
  2. Processors
    • 수신된 데이터를 전처리하는 컴포넌트
    • 데이터 필터링, 속성 추가, 배치 처리, 샘플링 등을 수행한다.
  3. Exporters
    • 데이터를 외부 시스템으로 전송하는 컴포넌트
    • 예: awscloudwatchlogs, awsxray, prometheusremotewrite 등

 


 

ADOT Collector의 빌드 종류

Collector는 사용 환경에 따라 다양한 빌드로 나뉘어 제공됩니다

 

  • otelcol-otlp: OTLP 프로토콜만 수신 가능한 최소 구성
  • otelcol: 일반적인 오픈소스 Collector 표준 빌드
  • otelcol-k8s: Kubernetes 환경 전용 빌드 (k8s observer, kubeletstats 등 포함)
  • otelcol-contrib: 모든 기여자 컴포넌트를 포함한 풀 옵션 빌드

AWS에서는 보통 otelcol 또는 otelcol-contrib을 사용하고, EKS 환경이라면 otelcol-k8s를 DaemonSet 또는 sidecar 형태로 배포하는 것이 일반적입니다.

 


 

Collector는 왜 필요한가? CloudWatch Agent랑 뭐가 다른가?

 "로그나 메트릭을 CloudWatch에 보낼 거면 그냥 CloudWatch Agent 쓰면 되는 거 아닌가?"라는 생각을 할 수 있는데 아래와 같은 차이점이 있습니다. 

 

  • CloudWatch Agent는 단순히 로그/시스템 메트릭만 전송하는 역할
  • OTEL Collector는 앱 수준의 트레이스, 커스텀 메트릭, 구조화 로그까지 수집 가능
  • Collector는 수집한 데이터를 가공, 필터링, re라우팅 할 수 있음
  • Collector를 통해 AWS뿐 아니라 Datadog, Grafana, New Relic 등 다양한 백엔드에 동시에 데이터 전송 가능

 

즉, Collector는 단순 에이전트를 넘어서는 관측성 파이프라인 플랫폼이라고 볼 수 있습니다.

 


 

Collector를 배포할 때 고려할 점

  • 인프라 환경: EC2, ECS, EKS 어디에 배포할지에 따라 구성 방식이 달라짐
  • IAM 권한 설정: CloudWatch Logs, X-Ray, EMF 등을 사용하는 경우 Collector 실행 주체에 적절한 IAM 권한이 부여되어야 함
  • 리소스 사용량: Collector 자체가 CPU/메모리를 차지하므로, 수집량이 많은 경우 성능 최적화가 필요함
  • 비용 관리: 필터링 없이 모든 데이터를 AWS로 전송하면 CloudWatch 비용이 급증할 수 있음. Processor 설정에서 불필요한 데이터 제거 및 샘플링 적용 권장

 


 

Amazon EC2 환경에서 ADOT Collector로 OTLP 로그/트레이스를 수집하여 CloudWatch Logs 및 X-Ray로 전송 가이드

 

1. ADOT Collector /파이썬 설치

EC2 인스턴스에 python과 ADOT Collector를 설치합니다. 

 

  • ADOT Collector 설치
sudo yum install -y https://aws-otel-collector.s3.amazonaws.com/amazon_linux/amd64/v0.43.1/aws-otel-collector.rpm

출처 : Releases · aws-observability/aws-otel-collector

 

 

  • 필요한 라이브러리 설치 

 

pip install opentelemetry-api opentelemetry-sdk \             
opentelemetry-exporter-otlp \             
opentelemetry-instrumentation-requests \             
opentelemetry-sdk-logs

 

 

 

2. Collector/파이썬 설정 파일 작성

  • Collectort 설정 파일 작성 

/opt/aws/aws-otel-collector/etc/config.yaml 경로에 yaml 파일을 만들어 줍니다. 

 

receivers:
  otlp:
    protocols:
      grpc:
      http:
  filelog:
    include: [ /var/log/myapp/application.log ]
    start_at: beginning
    operators:
type: json_parser
        timestamp:
          parse_from: attributes.time
          layout: '%Y-%m-%d %H:%M:%S'
        severity:
          parse_from: attributes.level
processors:
  batch:
exporters:
  awscloudwatchlogs:
    log_group_name: "adot-ec2-logs"
    log_stream_name: "ec2-instance"
    region: ap-northeast-2
  awsxray:
    region: ap-northeast-2
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [awsxray]
    logs:
      receivers: [otlp, filelog]
      processors: [batch]
      exporters: [awscloudwatchlogs]

 

 

  • python 코드 생성 

OpenTelemetry를 이용해 HTTP 요청을 수행하고 트레이스를 생성하여 OTLP Collector로 전송하는 실습용 Python 스크립트를 작성합니다. 

/opt/aws/otel_trace_demo.py 경로에 파이썬 파일을 만들어 줍니다. 

 
 
import time
import requests
import logging
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.requests import RequestsInstrumentor

#  로그 설정
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler("/var/log/myapp/application.log"),  # Collector가 읽을 파일 경로
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

# Trace Provider 초기화
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)

# OTLP Exporter 설정
otlp_exporter = OTLPSpanExporter(endpoint="localhost:4317", insecure=True)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

# 외부 요청 트레이싱
RequestsInstrumentor().instrument()

# 애플리케이션 로직
def make_request():
    with tracer.start_as_current_span("main-workflow"):
        logger.info("SY opentelemetry")
        logger.info("외부 API 호출 중...")
        response = requests.get("https://httpbin.org/get")
        logger.info("응답 코드: %s", response.status_code)
        time.sleep(0.5)

if __name__ == "__main__":
    for _ in range(3):
        make_request()
        time.sleep(1)

 

 

 

3. IAM Role 역할 설정

새로운 IAM 역할을 생성해 대상 EC2에 연결합니다.

 
 

 

 

 

4. Collector 서비스 시작

sudo systemctl start aws-otel-collector 
sudo systemctl status aws-otel-collector

 

 

 

 

5. 애플리케이션에서 Collector로 데이터 전송

 

OpenTelemetry SDK를 통해 자동으로 Collector에 데이터가 전송됩니다.

CloudWatch Logs → 로그 그룹 adot-ec2-logs로 전송된 로그 확인

AWS X-Ray → Trace ID 기반으로 요청 흐름 시각화 가능

 

 

 

 

6. 로그 확인 

application 로그를 저장하는 위치 

/var/log/myapp

 

 

 

  • Cloudwatch Logs 확인 
 
 

 

 

 

  • x-ray 확인 
 
 
 
 
 

 

 

 


 

OpenTelemetry Collector는 단순한 로그 수집기 수준을 넘어서 클라우드 환경에서의 통합 관측성 플랫폼으로 진화하고 있습니다. AWS에서 제공하는 ADOT는 이를 쉽게 구현할 수 있도록 다양한 최적화와 구성을 제공하며, 특히 멀티 서비스/멀티 포맷 환경에서 매우 유용합니다.

단순한 모니터링에서 벗어나 의미 있는 관측성과 운영 인사이트를 구축할 수 있습니다.

 

 

 

Made by 이승연 (LEE SEUNGYEON) 

 

참고 문서

OpenTelemetry Collector の中身と種類を知ろう - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

GitHub - open-telemetry/opentelemetry-collector: OpenTelemetry Collector

GitHub - open-telemetry/opentelemetry-collector-contrib: Contrib repository for the OpenTelemetry Collector

 

반응형

댓글