Trace analytics with Data Prepper
출처: 문서
본문
Data Prepper로 트레이스 분석
트레이스 분석을 사용하면 트레이스 데이터를 수집하고, 데이터를 수집 및 변환하여 OpenSearch에서 사용할 수 있도록 파이프라인을 사용자 지정할 수 있어요. 다음은 OpenSearch Data Prepper에서 트레이스 분석 워크플로우, 구성 방법, 트레이스 데이터 시각화 방법에 대한 개요를 제공해요.
소개
Data Prepper를 서버 측 구성 요소로 사용하여 트레이스 데이터를 수집할 때, Data Prepper 파이프라인을 사용자 지정하여 데이터를 수집 및 변환하고 OpenSearch에서 사용할 수 있어요. 변환 후에는 OpenSearch Dashboards 내의 Observability 플러그인과 함께 사용하기 위해 변환된 트레이스 데이터를 시각화할 수 있어요. 트레이스 데이터는 애플리케이션 성능에 대한 가시성을 제공하고 개별 트레이스에 대한 더 많은 정보를 얻는 데 도움을 줘요.
다음 순서도는 OpenTelemetry Collector 실행부터 OpenSearch Dashboards를 사용한 시각화까지의 트레이스 분석 워크플로우를 보여줘요.

트레이스 분석을 모니터링하려면 서비스 환경에서 다음 구성 요소를 설정해야 해요:
- 애플리케이션에 계측을 추가하여 텔레메트리 데이터를 생성하고 OpenTelemetry 수집기로 보낼 수 있도록 해요.
- OpenTelemetry 수집기를 Amazon EKS의 사이드카 또는
daemonset, Amazon ECS의 사이드카, Amazon EC2의 에이전트로 실행해요. 수집기가 트레이스 데이터를 Data Prepper로 내보내도록 구성해야 해요. - Data Prepper를 OpenSearch의 수집 수집기로 배포해요. 강화된 트레이스 데이터를 OpenSearch 클러스터 또는 Amazon OpenSearch Service 도메인으로 보내도록 구성해요.
- OpenSearch Dashboards를 사용하여 분산 애플리케이션의 문제를 시각화하고 감지해요.
트레이스 분석 파이프라인
Data Prepper에서 트레이스 분석을 모니터링하기 위해 세 가지 파이프라인(entry-pipeline, raw-trace-pipeline, service-map-pipeline)을 제공해요. 다음 이미지는 파이프라인이 함께 작동하여 트레이스 분석을 모니터링하는 방법에 대한 개요를 제공해요.

OpenTelemetry 트레이스 소스
OpenTelemetry 소스는 OpenTelemetry 수집기로부터 트레이스 데이터를 수락해요. 이 소스는 OpenTelemetry 프로토콜을 따르며 gRPC를 통한 전송과 업계 표준 암호화(TLS/HTTPS) 사용을 공식적으로 지원해요.
프로세서
트레이스 분석 기능에는 세 가지 프로세서가 있어요:
otel_traces--otel_traces프로세서는otel-trace-source에서 span 레코드 모음을 수신하고, 상태 저장 처리, 추출, 트레이스 그룹 관련 필드 완성을 수행해요.otel_traces_group--otel_traces_group프로세서는 OpenSearch 백엔드를 조회하여 span 레코드 모음에서 누락된 트레이스 그룹 관련 필드를 채워요.service_map--service_map프로세서는 트레이스 데이터에 필요한 전처리를 수행하고service-map대시보드를 표시하기 위한 메타데이터를 구축해요.
OpenSearch 싱크
OpenSearch는 데이터를 대상인 OpenSearch에 쓰는 일반 싱크를 제공해요. OpenSearch 싱크에는 엔드포인트, SSL, 사용자 이름/비밀번호, 인덱스 이름, 인덱스 템플릿, 인덱스 상태 관리와 같은 OpenSearch 클러스터 관련 구성 옵션이 있어요.
싱크는 트레이스 분석 기능에 대한 특정 구성을 제공해요. 이러한 구성을 통해 싱크는 트레이스 분석에 특화된 인덱스와 인덱스 템플릿을 사용할 수 있어요. 다음 OpenSearch 인덱스는 트레이스 분석에 특화되어 있어요:
otel-v1-apm-span--otel-v1-apm-span인덱스는otel_traces프로세서의 출력을 저장해요.otel-v1-apm-service-map--otel-v1-apm-service-map인덱스는service_map프로세서의 출력을 저장해요.
트레이스 튜닝
버전 0.8.x부터 Data Prepper는 트레이스 분석에 대해 수직 및 수평 확장을 모두 지원해요. 단일 Data Prepper 인스턴스의 크기를 조정하여 워크로드 요구 사항을 충족하고 수직으로 확장할 수 있어요.
핵심 Peer Forwarder를 사용하여 여러 Data Prepper 인스턴스를 배포하여 클러스터를 구성함으로써 수평으로 확장할 수 있어요. 이를 통해 Data Prepper 인스턴스가 클러스터 내의 인스턴스와 통신할 수 있으며, 수평 확장 배포에 필요해요.
확장 권장 사항
Data Prepper를 확장하려면 다음 권장 구성을 사용해요. 요구 사항에 따라 매개변수를 수정하는 것이 좋아요. 또한 구성이 예상대로 작동하는지 확인하기 위해 Data Prepper 호스트 메트릭과 OpenSearch 메트릭을 모니터링하는 것이 좋아요.
버퍼
Data Prepper에서 처리하는 총 트레이스 요청 수는 otel-trace-pipeline과 raw-trace-pipeline의 buffer_size 값의 합과 같아요. OpenSearch로 전송되는 총 트레이스 요청 수는 raw-trace-pipeline의 batch_size와 workers의 곱과 같아요. raw-trace-pipeline에 대한 자세한 내용은 트레이스 분석 파이프라인을 참조해요.
버퍼 설정을 변경할 때는 다음을 권장해요:
otel-trace-pipeline과raw-trace-pipeline의buffer_size값은 동일해야 해요.buffer_size는raw-trace-pipeline의workers*batch_size보다 크거나 같아야 해요.
Workers
workers 설정은 Data Prepper가 버퍼의 요청을 처리하는 데 사용하는 스레드 수를 결정해요. CPU 사용률에 따라 workers를 설정하는 것이 좋아요. Data Prepper는 OpenSearch로 데이터를 보낼 때 상당한 입출력 시간을 사용하기 때문에 이 값은 사용 가능한 프로세서 수보다 높을 수 있어요.
힙
JVM_OPTS 환경 변수를 설정하여 Data Prepper 힙을 구성해요. 힙 값을 최소 4 * batch_size * otel_send_batch_size * 개별 span의 최대 크기로 설정하는 것이 좋아요.
OpenTelemetry Collector 섹션에서 언급했듯이 OpenTelemetry Collector 구성에서 otel_send_batch_size를 50으로 설정해요.
로컬 디스크
Data Prepper는 서비스 맵 처리에 필요한 메타데이터를 저장하기 위해 로컬 디스크를 사용하므로 다음 키 필드만 저장하는 것이 좋아요: traceId, spanId, parentSpanId, spanKind, spanName, serviceName. service-map 플러그인은 각각 window_duration초의 데이터를 저장하는 두 개의 파일만 저장해요. 예를 들어, 3000 spans/second의 처리량으로 테스트한 결과 총 디스크 사용량은 4 MB였어요.
Data Prepper는 또한 로그를 쓰기 위해 로컬 디스크를 사용해요. 최신 버전의 Data Prepper에서는 로그를 원하는 경로로 리디렉션할 수 있어요.
AWS CloudFormation 템플릿 및 Kubernetes/Amazon EKS 구성 파일
AWS CloudFormation 템플릿은 트레이스 튜닝 섹션에서 설명한 확장 속성을 구성하기 위한 사용자 친화적인 메커니즘을 제공해요.
Kubernetes 구성 파일과 Amazon EKS 구성 파일을 사용하여 클러스터 배포에서 이러한 속성을 구성할 수 있어요.
벤치마크 테스트
벤치마크 테스트는 r5.xlarge EC2 인스턴스에서 다음 구성으로 수행되었어요:
buffer_size: 4096batch_size: 256workers: 8Heap: 10 GB
이 설정은 20% CPU 사용률에서 2100 spans/second의 처리량을 처리할 수 있었어요.
파이프라인 구성
다음 섹션에서는 다양한 유형의 파이프라인 예제와 각 유형을 구성하는 방법을 제공해요.
예: 트레이스 분석 파이프라인
다음 예제는 OpenSearch Dashboards Observability 플러그인을 지원하는 파이프라인을 구축하는 방법을 보여줘요. 이 파이프라인은 OpenTelemetry 수집기에서 데이터를 가져와 두 개의 다른 파이프라인을 싱크로 사용해요. 이 두 개의 별도 파이프라인은 서로 다른 목적을 제공하며 서로 다른 OpenSearch 인덱스에 써요. 첫 번째 파이프라인은 OpenSearch를 위해 트레이스 데이터를 준비하고 span 문서를 보강하여 OpenSearch 내의 span 인덱스에 수집해요. 두 번째 파이프라인은 트레이스를 서비스 맵으로 집계하고 서비스 맵 문서를 OpenSearch 내의 서비스 맵 인덱스에 써요.
Data Prepper 버전 2.0부터 Data Prepper는 더 이상 otel_traces_prepper 프로세서를 지원하지 않아요. otel_traces 프로세서가 otel_traces_prepper 및 otel_trace_raw 프로세서를 대체하며 Data Prepper의 최근 데이터 모델 변경 사항 중 일부를 지원해요. 다음은 YAML 파일 구성 예시예요:
entry-pipeline:
delay: "100"
source:
otel_trace_source:
ssl: false
buffer:
bounded_blocking:
buffer_size: 500000
batch_size: 10000
sink:
- pipeline:
name: raw-trace-pipeline
- pipeline:
name: service-map-pipeline
raw-trace-pipeline:
source:
pipeline:
name: entry-pipeline
buffer:
bounded_blocking:
buffer_size: 500000
batch_size: 10000
processor:
- otel_traces:
sink:
- opensearch:
hosts: ["https://localhost:9200"]
insecure: true
username: admin
password: admin_password
index_type: trace-analytics-raw
service-map-pipeline:
delay: "100"
source:
pipeline:
name: entry-pipeline
buffer:
bounded_blocking:
buffer_size: 500000
batch_size: 10000
processor:
- service_map:
sink:
- opensearch:
hosts: ["https://localhost:9200"]
insecure: true
username: admin
password: admin_password
index_type: trace-analytics-service-map
{% include copy.html %}
비슷한 수집 처리량과 지연 시간을 유지하려면 클라이언트 요청 페이로드의 예상 최대 배치 크기만큼 buffer_size와 batch_size를 조정해요. {: .tip}
예: otel trace
다음은 SSL 및 기본 인증이 활성화된 otel-trace-source .yaml 파일 예시예요. otel-collector-config.yaml 파일을 수정하여 자체 자격 증명을 사용해야 한다는 점에 유의해요.
source:
otel_trace_source:
#record_type: event # Add this when using Data Prepper 1.x. This option is removed in 2.0
ssl: true
sslKeyCertChainFile: /full/path/to/certfile.crt
sslKeyFile: /full/path/to/keyfile.key
authentication:
http_basic:
username: my-user
password: my_s3cr3t
{% include copy.html %}
예: pipeline.yaml
다음은 otel-trace-pipeline 파이프라인에 대해 SSL 및 기본 인증이 활성화되지 않은 pipeline.yaml 파일 예시예요:
otel-trace-pipeline:
# workers is the number of threads processing data in each pipeline.
# We recommend same value for all pipelines.
# default value is 1, set a value based on the machine you are running Data Prepper
workers: 8
# delay in milliseconds is how often the worker threads should process data.
# Recommend not to change this config as we want the entry-pipeline to process as quick as possible
# default value is 3_000 ms
delay: "100"
source:
otel_trace_source:
#record_type: event # Add this when using Data Prepper 1.x. This option is removed in 2.0
ssl: false
authentication:
unauthenticated:
buffer:
bounded_blocking:
# buffer_size is the number of ExportTraceRequest from otel-collector the Data Prepper should hold in memory.
# We recommend to keep the same buffer_size for all pipelines.
# Make sure you configure sufficient heap
# default value is 512
buffer_size: 500000
# This is the maximum number of request each worker thread will process within the delay.
# Default is 8.
# Make sure buffer_size >= workers * batch_size
batch_size: 10000
sink:
- pipeline:
name: raw-trace-pipeline
- pipeline:
name: entry-pipeline
raw-trace-pipeline:
# Configure same as the otel-trace-pipeline
workers: 8
# We recommend using the default value for the raw-trace-pipeline.
delay: 3000
source:
pipeline:
name: otel-trace-pipeline
buffer:
bounded_blocking:
# Configure the same value as in entry-pipeline
# Make sure you configure sufficient heap
# The default value is 512
buffer_size: 500000
# The raw processor does bulk request to your OpenSearch sink, so configure the batch_size higher.
# If you use the recommended otel-collector setup each ExportTraceRequest could contain max 50 spans. https://github.com/opensearch-project/data-prepper/tree/v0.7.x/deployment/aws
# With 64 as batch size each worker thread could process upto 3200 spans (64 * 50)
batch_size: 10000
processor:
- otel_traces:
# Optional: only if you want the group-filler stage.
- otel_traces_group:
hosts: [ "https://opensearch:9200" ]
# Change to your credentials
username: admin
password: admin_password
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
sink:
- opensearch:
hosts: [ "https://opensearch:9200" ]
index_type: trace-analytics-raw
# Change to your credentials
username: admin
password: admin_password
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
service-map-pipeline:
workers: 8
delay: 100
source:
pipeline:
name: otel-trace-pipeline
processor:
- service_map:
# The window duration is the maximum length of time the data prepper stores the most recent trace data to evaluvate service-map relationships.
# The default is 3 minutes, this means we can detect relationships between services from spans reported in last 3 minutes.
# Set higher value if your applications have higher latency.
window_duration: 180
buffer:
bounded_blocking:
# buffer_size is the number of ExportTraceRequest from otel-collector the Data Prepper should hold in memory.
# We recommend to keep the same buffer_size for all pipelines.
# Make sure you configure sufficient heap
# default value is 512
buffer_size: 500000
# This is the maximum number of request each worker thread will process within the delay.
# Default is 8.
# Make sure buffer_size >= workers * batch_size
batch_size: 10000
sink:
- opensearch:
hosts: [ "https://opensearch:9200" ]
index_type: trace-analytics-service-map
# Change to your credentials
username: admin
password: admin_password
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
{% include copy.html %}
OpenSearch 클러스터에 맞게 앞의 구성을 수정하여 환경과 일치하도록 해야 해요. 수정해야 할 두 개의 opensearch 싱크가 있다는 점에 유의해요.
{: .note}
다음 변경을 수행해야 해요:
hosts– 호스트로 설정해요.username– OpenSearch 사용자 이름을 제공해요.password– OpenSearch 비밀번호를 제공해요.aws_sigv4– AWS 서명과 함께 Amazon OpenSearch Service를 사용하는 경우 이 값을true로 설정해요. 기본 AWS 자격 증명 공급자로 요청에 서명해요.aws_region– AWS 서명과 함께 Amazon OpenSearch Service를 사용하는 경우 이 값을 AWS 리전으로 설정해요.
OpenSearch 싱크에 사용할 수 있는 다른 구성은 Data Prepper OpenSearch 싱크를 참조해요.
OpenTelemetry Collector
서비스 환경에서 OpenTelemetry Collector를 실행해야 합니다. Getting Started를 따라 OpenTelemetry Collector를 설치하세요. 수집기에 Data Prepper 인스턴스에 맞게 구성된 exporter를 설정해야 합니다. 다음 예제 otel-collector-config.yaml 파일은 다양한 계측에서 데이터를 수신하여 Data Prepper로 내보냅니다.
Docker Compose를 사용한 예제 설정
다음은 Docker 컨테이너를 사용하는 OpenSearch, OpenSearch Dashboards, Data Prepper 및 OpenTelemetry Collector의 예제 구성입니다.
Data Prepper에 사용할 인증서를 생성하여 certs 디렉터리에 저장하세요.
mkdir -p certs
# single self-signed server cert for Data Prepper; adds SAN=DNS:data-prepper
openssl req -x509 -nodes -newkey rsa:2048 \
-keyout certs/dp.key \
-out certs/dp.crt \
-days 365 \
-subj "/CN=data-prepper" \
-addext "subjectAltName = DNS:data-prepper"
{% include copy.html %}
다음 파일을 생성하세요.
docker-compose.yaml 파일:
version: "3.8"
networks:
opensearch-net:
services:
opensearch:
image: opensearchproject/opensearch:3.2.0
environment:
- discovery.type=single-node
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=<strong_password>
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
ulimits:
memlock: { soft: -1, hard: -1 }
nofile: { soft: 65536, hard: 65536 }
ports:
- "9200:9200"
- "9600:9600"
networks: [opensearch-net]
dashboards:
image: opensearchproject/opensearch-dashboards:3.2.0
environment:
OPENSEARCH_HOSTS: '["https://opensearch:9200"]'
OPENSEARCH_USERNAME: admin
# password must match OpenSearch
OPENSEARCH_PASSWORD: "<strong_password>"
ports:
- "5601:5601"
depends_on: [opensearch]
networks: [opensearch-net]
data-prepper:
image: opensearchproject/data-prepper:latest
command: ["/usr/share/data-prepper/bin/data-prepper"]
volumes:
- ./pipelines:/usr/share/data-prepper/pipelines:ro
- ./config/data-prepper-config.yaml:/usr/share/data-prepper/config/data-prepper-config.yaml:ro
- ./certs:/usr/share/data-prepper/certs:ro
ports:
# Data Prepper control API (HTTP)
- "4900:4900"
# OTLP gRPC (TLS)
- "21890:21890"
depends_on: [opensearch]
networks: [opensearch-net]
otel-collector:
image: otel/opentelemetry-collector:latest
command: ["--config=/etc/otelcol/otel-collector.yaml"]
volumes:
- ./otel-collector.yaml:/etc/otelcol/otel-collector.yaml:ro
depends_on: [data-prepper]
networks: [opensearch-net]
ports:
# OTLP gRPC
- "4317:4317"
# OTLP HTTP (optional)
- "4318:4318"
{% include copy.html %}
admin password requirements를 따라 강력한 관리자 비밀번호를 설정하세요. {: .note}
pipelines/pipelines.yaml 파일:
entry-pipeline:
source:
otel_trace_source:
port: 21890
ssl: true
sslKeyCertChainFile: "certs/dp.crt"
sslKeyFile: "certs/dp.key"
authentication:
unauthenticated:
buffer:
bounded_blocking:
buffer_size: 500000
batch_size: 10000
sink:
- pipeline:
name: raw-trace-pipeline
- pipeline:
name: service-map-pipeline
raw-trace-pipeline:
source:
pipeline:
name: entry-pipeline
processor:
- otel_traces:
sink:
- opensearch:
hosts: ["https://opensearch:9200"]
insecure: true
username: admin
password: <strong_password>
index_type: trace-analytics-raw
service-map-pipeline:
source:
pipeline:
name: entry-pipeline
processor:
- service_map:
sink:
- opensearch:
hosts: ["https://opensearch:9200"]
insecure: true
username: admin
password: <strong_password>
index_type: trace-analytics-service-map
{% include copy.html %}
config/data-prepper-config.yaml 파일:
# Disable TLS on the Data Prepper REST API (local only)
ssl: false
serverPort: 4900
peer_forwarder:
ssl: false
discovery_mode: local_node
{% include copy.html %}
otel-collector.yaml 파일:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
otlp:
endpoint: data-prepper:21890
tls:
# TLS is enabled, but hostname/chain is not verified
insecure_skip_verify: true
# optional: see incoming/outgoing spans in logs
debug:
verbosity: basic
processors:
batch: {}
extensions:
health_check: {}
service:
extensions: [health_check]
telemetry:
logs:
level: debug
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp, debug]
{% include copy.html %}
docker-compose up 명령어를 사용하여 모든 컨테이너를 시작하세요.
다음 명령어를 실행하여 telemetrygen을 시작하세요. 이 도구는 30초 동안 합성 OpenTelemetry 트레이스를 생성하고(약 50 spans/sec) 일반 텍스트 gRPC를 통해 otel-collector:4317로 전송합니다.
docker run --rm --network anton_opensearch-net \
ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:latest \
traces \
--otlp-endpoint=otel-collector:4317 \
--otlp-insecure \
--duration=30s \
--rate=50
{% include copy.html %}
이렇게 하면 샘플 텔레메트리가 별칭 otel-v1-apm-span으로 전송되고 문서가 인덱스 otel-v1-apm-span-000001에 저장됩니다. 저장된 문서는 다음과 같은 구조를 가집니다.
"hits": [
{
"_index": "otel-v1-apm-span-000001",
"_id": "b7446942445f1f0220cc9e3707dcd7d3/153de4602f5169d3",
"_score": 1,
"_source": {
"traceId": "b7446942445f1f0220cc9e3707dcd7d3",
"droppedLinksCount": 0,
"kind": "SPAN_KIND_CLIENT",
"droppedEventsCount": 0,
"traceGroupFields": {
"endTime": "2025-11-11T12:52:42.791867180Z",
"durationInNanos": 123000,
"statusCode": 0
},
"traceGroup": "lets-go",
"serviceName": "telemetrygen",
"parentSpanId": "",
"spanId": "153de4602f5169d3",
"traceState": "",
"name": "lets-go",
"startTime": "2025-11-11T12:52:42.791744180Z",
"links": [],
"endTime": "2025-11-11T12:52:42.791867180Z",
"droppedAttributesCount": 0,
"durationInNanos": 123000,
"events": [],
"span.attributes.network@peer@address": "1.2.3.4",
"instrumentationScope.name": "telemetrygen",
"span.attributes.peer@service": "telemetrygen-server",
"resource.attributes.service@name": "telemetrygen",
"status.code": 0
}
},
...
서비스 환경에서 OpenTelemetry를 실행한 후에는 애플리케이션이 OpenTelemetry Collector를 사용하도록 구성해야 합니다. OpenTelemetry Collector는 일반적으로 애플리케이션과 함께 실행됩니다.
다음 단계 및 추가 정보
OpenSearch Dashboards Observability plugin 문서는 OpenSearch Dashboards에서 트레이스 분석을 보기 위해 OpenSearch를 구성하는 방법에 대한 추가 정보를 제공합니다.
트레이스 분석을 위해 Data Prepper를 조정하고 확장하는 방법에 대한 자세한 내용은 Trace tuning을 참조하세요.
Data Prepper 2.0으로 마이그레이션
Data Prepper 버전 1.4부터 트레이스 처리는 Data Prepper의 이벤트 모델을 사용합니다. 이를 통해 파이프라인 작성자는 다른 프로세서를 구성하여 스팬이나 트레이스를 수정할 수 있습니다. 마이그레이션 경로를 제공하기 위해 Data Prepper 버전 1.4에서는 다음과 같은 변경 사항이 도입되었습니다.
otel_trace_source에는event로 설정할 수 있는 선택적record_type매개변수가 있습니다. 구성되면 이벤트 객체를 출력합니다.otel_traces는 이벤트 기반 스팬에 대해otel_traces_prepper를 대체합니다.otel_traces_group은 이벤트 기반 스팬에 대해otel_traces_group_prepper를 대체합니다.
Data Prepper 버전 2.0에서는 otel_trace_source가 이벤트만 출력합니다. Data Prepper 버전 2.0은 또한 otel_traces_prepper와 otel_traces_group_prepper를 완전히 제거합니다. Data Prepper 버전 2.0으로 마이그레이션하려면 이벤트 모델을 사용하여 트레이스 파이프라인을 구성할 수 있습니다.