본문 바로가기
WIKI 기술 지식 베이스

Peer Forwarder

원문 보기 위키 갱신

출처: 문서

본문

Peer Forwarder

Peer Forwarder는 집계를 위해 OpenSearch Data Prepper 노드 간에 event의 피어 포워딩을 수행하는 HTTP 서비스예요. 이 HTTP 서비스는 해시 링(hash-ring) 방식을 사용해 이벤트를 집계하고, 주어진 트레이스를 어떤 Data Prepper 노드가 처리해야 하는지 판단한 뒤 해당 노드로 다시 라우팅해요. 현재 Peer Forwarder는 aggregate, service_map, otel_traces 프로세서에서 지원돼요.

Peer Forwarder는 지원되는 프로세서가 제공하는 식별 키를 기준으로 이벤트를 그룹화해요. service_map과 otel_traces의 경우 식별 키는 기본적으로 traceId이며 설정할 수 없어요. aggregate 프로세서는 identification_keys 설정 옵션을 사용해 설정해요. 여기서 Peer Forwarder에 사용할 키를 지정할 수 있어요. 식별 키에 대한 자세한 내용은 Aggregate Processor 페이지를 참고하세요.

피어 디스커버리는 Data Prepper가 통신하게 될 다른 노드를 찾을 수 있게 해줘요. 현재 피어 디스커버리는 정적 목록, DNS 레코드 조회, 또는 AWS Cloud Map을 통해 제공돼요.

디스커버리 모드

다음 섹션에서는 디스커버리 모드에 대한 정보를 제공해요.

정적(Static)

정적 디스커버리 모드는 Data Prepper 노드가 IP 주소 또는 도메인 이름 목록을 사용해 노드를 디스커버리할 수 있게 해줘요. 정적 디스커버리 모드의 예시는 다음 YAML 파일을 참고하세요:

peer_forwarder:4
  discovery_mode: static
  static_endpoints: ["data-prepper1", "data-prepper2"]

DNS 조회

Data Prepper 클러스터를 확장할 때는 정적 디스커버리보다 DNS 디스커버리가 선호돼요. DNS 디스커버리는 단일 도메인 이름이 주어졌을 때 Data Prepper 호스트 목록을 반환하도록 DNS 공급자를 설정해요. 이 목록은 DNS A 레코드와 주어진 도메인의 IP 주소 목록으로 구성돼요. DNS 조회의 예시는 다음 YAML 파일을 참고하세요:

peer_forwarder:
  discovery_mode: dns
  domain_name: "data-prepper-cluster.my-domain.net"

AWS Cloud Map

AWS Cloud Map은 DNS 기반 서비스 디스커버리와 함께 API 기반 서비스 디스커버리도 제공해요.

Peer Forwarder는 AWS Cloud Map의 API 기반 서비스 디스커버리를 사용할 수 있어요. 이를 지원하려면 API 인스턴스 디스커버리를 위해 구성된 기존 네임스페이스가 있어야 해요. AWS Cloud Map 문서에서 제공하는 안내를 따라 새로 만들 수 있어요.

Data Prepper 설정에는 다음이 포함되어야 해요:

  • aws_cloud_map_namespace_name – AWS Cloud Map 네임스페이스 이름으로 설정하세요.
  • aws_cloud_map_service_name – 지정한 네임스페이스 내의 서비스 이름으로 설정하세요.
  • aws_region – 네임스페이스가 존재하는 AWS 리전으로 설정하세요.
  • discovery_mode – aws_cloud_map으로 설정하세요.

Data Prepper 설정에는 다음을 선택적으로 포함할 수 있어요:

  • aws_cloud_map_query_parameters – 키-값 쌍은 인스턴스에 연결된 커스텀 속성을 기준으로 결과를 필터링하는 데 사용돼요. 결과에는 지정된 모든 키-값 쌍과 일치하는 인스턴스만 포함돼요.

설정 예시

AWS Cloud Map 설정의 예시는 다음 YAML 파일을 참고하세요:

peer_forwarder:
  discovery_mode: aws_cloud_map
  aws_cloud_map_namespace_name: "my-namespace"
  aws_cloud_map_service_name: "data-prepper-cluster"
  aws_cloud_map_query_parameters:
    instance_type: "r5.xlarge"
  aws_region: "us-east-1"

필요한 권한이 포함된 IAM 정책

Data Prepper 또한 필요한 권한을 가진 상태로 실행되고 있어야 해요. 다음 AWS Identity and Access Management(IAM) 정책은 필요한 권한을 보여줘요:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudMapPeerForwarder",
            "Effect": "Allow",
            "Action": "servicediscovery:DiscoverInstances",
            "Resource": "*"
        }
    ]
}

설정

다음 표는 선택적 설정 값을 제공해요.

값 유형 설명
port Integer Peer Forwarder 서버가 실행 중인 포트를 나타내는 0부터 65535 사이의 값이에요. 기본값은 4994예요.
request_timeout Integer Peer Forwarder HTTP 서버의 요청 타임아웃 시간을 밀리초 단위로 나타내요. 기본값은 10000이에요.
server_thread_count Integer Peer Forwarder 서버가 사용하는 스레드 수를 나타내요. 기본값은 200이에요.
client_thread_count Integer Peer Forwarder 클라이언트가 사용하는 스레드 수를 나타내요. 기본값은 200이에요.
maxConnectionCount Integer Peer Forwarder 서버의 최대 열린 연결 수를 나타내요. 기본값은 500이에요.
discovery_mode String 사용할 피어 디스커버리 모드를 나타내요. 허용되는 값은 local_node, static, dns, aws_cloud_map이에요. 기본값은 이벤트를 로컬에서 처리하는 local_node예요.
static_endpoints List 모든 Data Prepper 인스턴스의 엔드포인트를 포함해요. discovery_mode가 static으로 설정된 경우 필수예요.
domain_name String DNS 조회를 수행할 단일 도메인 이름을 나타내요. 일반적으로 동일한 도메인에 대해 여러 개의 DNS A 레코드를 생성하는 방식으로 사용해요. discovery_mode가 dns로 설정된 경우 필수예요.
aws_cloud_map_namespace_name String AWS Cloud Map 서비스 디스커버리를 사용할 때의 AWS Cloud Map 네임스페이스를 나타내요. discovery_mode가 aws_cloud_map으로 설정된 경우 필수예요.
aws_cloud_map_service_name String AWS Cloud Map 서비스 디스커버리를 사용할 때의 AWS Cloud Map 서비스를 나타내요. discovery_mode가 aws_cloud_map으로 설정된 경우 필수예요.
aws_cloud_map_query_parameters Map 인스턴스에 연결된 커스텀 속성을 기준으로 결과를 필터링하는 데 사용되는 키-값 쌍이에요. 지정된 모든 키-값 쌍과 일치하는 인스턴스만 반환돼요.
buffer_size Integer 버퍼가 수용하는 미확인 레코드의 최대 개수를 나타내요(미확인 레코드 수는 버퍼에 기록된 레코드 수에 아직 처리 중이며 Checkpointing API에서 아직 확인되지 않은 레코드 수를 더한 값이에요). 기본값은 512예요.
batch_size Integer 버퍼가 읽기 시 반환하는 레코드의 최대 개수를 나타내요. 기본값은 48이에요.
batch_delay Integer Peer Forwarder 버퍼에서 batch_size개의 레코드를 가져오는 최대 시간을 밀리초 단위로 나타내요. 이 시간 내에 batch_size에 도달하지 않으면 부분 배치가 반환돼요. 0으로 설정하면 batch_size까지의 사용 가능한 모든 레코드가 즉시 반환돼요. 버퍼가 비어 있으면 레코드를 기다리는 동안 최대 5밀리초까지 블로킹돼요. 기본값은 3000이에요.
aws_region String ACM, Amazon S3, 또는 AWS Cloud Map을 사용하는 AWS 리전을 나타내며, 다음 조건 중 하나라도 충족되면 필수예요:
- use_acm_certificate_for_ssl 설정이 true로 설정된 경우.
- ssl_certificate_file 또는 ssl_key_file이 Amazon Simple Storage Service(Amazon S3) URI(예: s3://mybucket/path/to/public.cert)를 지정하는 경우.
- discovery_mode가 aws_cloud_map으로 설정된 경우.
drain_timeout Duration Peer Forwarder가 종료 전에 데이터 처리를 완료하기 위해 기다리는 시간을 나타내요.
forwarding_batch_size Integer 피어에 보내는 각 요청에 담을 레코드의 최대 개수를 나타내요. 기본값은 1500이고, 최대값은 15000이에요.
forwarding_batch_queue_depth Integer 배칭 큐의 깊이를 나타내요. 이 값은 레코드를 피어로 보내기 전에 배칭하는 데 사용되는 연결된 블로킹 큐의 크기를 결정하는 데 쓰이는 스칼라 값이에요. 큐 크기는 workers * forwarding_batch_size * forwarding_batch_queue_depth 공식으로 결정돼요. 기본값은 1이에요.
forwarding_batch_timeout Duration 피어로 배치를 플러시하는 사이에 발생할 수 있는 최대 시간을 나타내요. 기본값은 3s예요.

SSL 설정

다음 표는 다른 Data Prepper 인스턴스에 연결할 수 있도록 Peer Forwarder 클라이언트용 트러스트 매니저를 설정하게 해주는 선택적 SSL 설정 값을 제공해요.

값 유형 설명
ssl Boolean TLS/SSL을 활성화해요. 기본값은 true예요.
ssl_certificate_file String SSL 인증서 체인 파일 경로 또는 Amazon S3 경로를 나타내요. Amazon S3 경로의 예시는 다음과 같아요: s3://<bucketName>/<path>. 기본값은 기본 인증서 파일인 config/default_certificate.pem이에요. 인증서가 생성되는 방식에 대한 자세한 내용은 Default Certificates를 참고하세요.
ssl_key_file String SSL 키 파일 경로 또는 Amazon S3 경로를 나타내요. Amazon S3 경로 예시: s3://<bucketName>/<path>. 기본값은 기본 프라이빗 키 파일인 config/default_private_key.pem이에요. 프라이빗 키 파일이 생성되는 방식에 대한 자세한 내용은 Default Certificates를 참고하세요.
ssl_insecure_disable_verification Boolean 서버의 TLS 인증서 체인 검증을 비활성화해요. 기본값은 false예요.
ssl_fingerprint_verification_only Boolean 서버의 TLS 인증서 체인 검증을 비활성화하고, 대신 인증서 지문(fingerprint)만 검증해요. 기본값은 false예요.
use_acm_certificate_for_ssl Boolean AWS Certificate Manager(ACM)의 인증서와 프라이빗 키를 사용해 TLS/SSL을 활성화해요. 기본값은 false예요.
acm_certificate_arn String ACM 인증서의 Amazon Resource Name(ARN)을 나타내요. ACM 인증서는 Amazon S3 또는 로컬 파일 시스템의 인증서보다 우선해요. use_acm_certificate_for_ssl이 true로 설정된 경우 필수예요.
acm_private_key_password String 프라이빗 키를 복호화하는 데 사용될 ACM 프라이빗 키 비밀번호를 나타내요. 제공하지 않으면 무작위 비밀번호가 생성돼요.
acm_certificate_timeout_millis Integer ACM이 인증서를 가져오는 데 필요한 타임아웃을 밀리초 단위로 나타내요. 기본값은 120000이에요.
aws_region String ACM, Amazon S3, 또는 AWS Cloud Map을 사용하는 AWS 리전을 나타내요. use_acm_certificate_for_ssl이 true로 설정된 경우 또는 ssl_certificate_file이 설정된 경우 필수예요. 또한 ssl_key_file이 Amazon S3 경로를 사용하도록 설정된 경우나 discovery_mode가 aws_cloud_map으로 설정된 경우에도 필수예요.

설정 예시

다음 YAML 파일은 설정 예시를 제공해요:

peer_forwarder:
  ssl: true
  ssl_certificate_file: "<cert-file-path>"
  ssl_key_file: "<private-key-file-path>"

인증

Authentication은 선택 사항이며 상호 TLS(mTLS)를 활성화하는 Map이에요. mutual_tls 또는 unauthenticated 중 하나일 수 있어요. 기본값은 unauthenticated이에요. 다음 YAML 파일은 인증 예시를 제공해요:

peer_forwarder:
  authentication:
    mutual_tls:

메트릭

Core Peer Forwarder는 다음 커스텀 메트릭을 제공해요. 모든 메트릭에는 core.peerForwarder 접두사가 붙어요.

타이머

Peer Forwarder의 타이머 기능은 다음 정보를 제공해요:

  • requestForwardingLatency: Peer Forwarder 클라이언트가 포워딩한 요청의 지연 시간을 측정해요.
  • requestProcessingLatency: Peer Forwarder 서버가 처리한 요청의 지연 시간을 측정해요.

카운터

다음 표는 카운터 메트릭 옵션을 제공해요.

값 설명
requests 포워딩된 요청의 총 개수를 측정해요.
requestsFailed 실패한 요청의 총 개수를 측정해요. HTTP 응답 코드가 200이 아닌 요청에 적용돼요.
requestsSuccessful 성공한 요청의 총 개수를 측정해요. HTTP 응답 코드가 200인 요청에 적용돼요.
requestsTooLarge Peer Forwarder 버퍼에 기록하기에 너무 큰 요청의 총 개수를 측정해요. HTTP 응답 코드가 413인 요청에 적용돼요.
requestTimeouts Peer Forwarder 버퍼에 콘텐츠를 기록하는 동안 타임아웃된 요청의 총 개수를 측정해요. HTTP 응답 코드가 408인 요청에 적용돼요.
requestsUnprocessable 처리할 수 없는 엔티티 때문에 실패한 요청의 총 개수를 측정해요. HTTP 응답 코드가 422인 요청에 적용돼요.
badRequests 잘못된 요청 형식을 가진 요청의 총 개수를 측정해요. HTTP 응답 코드가 400인 요청에 적용돼요.
recordsSuccessfullyForwarded 성공적으로 포워딩된 레코드의 총 개수를 측정해요.
recordsFailedForwarding 포워딩에 실패한 레코드의 총 개수를 측정해요.
recordsToBeForwarded 포워딩될 레코드의 총 개수를 측정해요.
recordsToBeProcessedLocally 로컬에서 처리될 레코드의 총 개수를 측정해요.
recordsActuallyProcessedLocally 실제로 로컬에서 처리된 레코드의 총 개수를 측정해요. 이 값은 recordsToBeProcessedLocally와 recordsFailedForwarding의 합이에요.
recordsReceivedFromPeers 원격 피어로부터 받은 레코드의 총 개수를 측정해요.

게이지

peerEndpoints는 동적으로 디스커버리된 피어 Data Prepper 엔드포인트의 개수를 측정해요. static 모드의 경우 크기가 고정돼요.

더 알아보기 (Learn more)