View a markdown version of this page

OpenTelemetry Collector - Amazon CloudWatch

OpenTelemetry Collector

OpenTelemetry Collector는 텔레메트리 데이터를 수신 및 처리하고 내보내는 공급업체에 구애받지 않는 오픈 소스 에이전트입니다. 애플리케이션과 Amazon CloudWatch 간의 중앙 파이프라인 역할을 하면서 여러 소스로부터 지표, 로그 및 트레이스를 수집하고 OTLP(OpenTelemetry Protocol)를 사용하여 CloudWatch로 전송합니다.

CloudWatch에서 OpenTelemetry Collector를 사용하는 경우 다음과 같은 이점이 있습니다.

  • 단일 에이전트를 통해 여러 애플리케이션 및 호스트에서 텔레메트리를 수집하여 CloudWatch에 대한 연결 수를 줄입니다.

  • 속성 추가 또는 제거, 데이터 일괄 처리, 트레이스 샘플링을 포함하여 CloudWatch로 전송하기 전에 텔레메트리를 처리하고 필터링합니다.

  • AWS, 온프레미스 및 기타 클라우드 환경에서 동일한 수집기 구성을 사용하여 애플리케이션이 실행되는 위치와 무관하게 일관된 텔레메트리 파이프라인을 제공합니다.

  • CloudWatch Query Studio에서 PromQL(Prometheus Query Language)을 사용하여 쿼리할 수 있는 보강된 레이블이 포함된 지표를 CloudWatch로 전송합니다.

지원되는 수신기

OpenTelemetry Collector는 텔레메트리 데이터를 수집하기 위한 다양한 수신기를 지원합니다. OpenTelemetry SDK로 계측되는 애플리케이션용 OTLP 수신기와 같은 OpenTelemetry 수신기, 또는 Prometheus 수신기를 사용하여 기존 Prometheus 내보내기 도구에서 지표를 스크레이핑할 수 있습니다. CloudWatch와 함께 사용되는 일반적인 Prometheus 수신기:

  • Prometheus 수신기(Prometheus 호환 엔드포인트 스크레이핑에 사용)

  • 호스트 지표 수신기(호스트에서 시스템 수준 지표 수집에 사용)

  • Kubernetes 클러스터 수신기(Kubernetes API 서버에서 클러스터 수준 지표 수집에 사용)

단일 수집기에서 여러 수신기를 구성할 수 있으므로 OpenTelemetry 및 Prometheus 지표를 모두 수집하여 동일한 파이프라인을 통해 CloudWatch로 보낼 수 있습니다. 사용 가능한 수신기의 전체 목록은 OpenTelemetry Collector 리포지토리를 참조하세요.

시작하기

사전 조건 - 추적에 OTLP 엔드포인트를 사용하는 경우 트랜잭션 검색이 활성화되어야 합니다.

단계:

  1. OpenTelemetry Collector 배포판의 최신 릴리스를 다운로드합니다. 자세한 내용은 OpenTelemetry Collector 릴리스를 참조하세요.

  2. 호스트에 OpenTelemetry Collector를 설치합니다. 수집기는 모든 운영 체제 및 플랫폼에서 실행됩니다. 자세한 정보는 Install the Collector를 참조하세요.

  3. Amazon EC2 또는 온프레미스 호스트에서 AWS 자격 증명을 구성합니다. 수집기는 텔레메트리 데이터를 전송할 때 이러한 자격 증명을 사용하여 CloudWatch에 인증합니다. 자세한 내용은 아래를 참조하세요.

    Setup IAM permissions for Amazon EC2
    아래 절차에 따라 Amazon EC2 인스턴스의 CloudWatchAgentServerPolicy IAM 역할에 IAM 정책을 연결합니다.
    1. IAM 콘솔(https://console.aws.amazon.com/iam/)을 엽니다.

    2. 역할을 선택하고 Amazon EC2 인스턴스에서 사용하는 역할을 선택합니다.

    3. 권한 탭에서 권한 추가, 정책 연결을 선택합니다.

    4. 검색 상자를 사용하여 CloudWatchAgentServerPolicy 정책을 검색합니다.

    5. CloudWatchAgentServerPolicy 정책을 선택하고 권한 추가를 선택합니다.

    Setup IAM permissions for on-premise hosts
    온프레미스 호스트에 권한을 제공하는 데 사용할 IAM 사용자를 생성할 수 있습니다.
    1. IAM 콘솔(https://console.aws.amazon.com/iam/)을 엽니다.

    2. 사용자, 사용자 생성을 선택합니다.

    3. 사용자 세부 정보사용자 이름에 새 IAM 사용자의 이름을 입력합니다. 이는 호스트를 인증하는 데 사용되는 AWS의 로그인 이름입니다.

    4. 다음을 선택합니다.

    5. 권한 설정 페이지의 권한 옵션 아래에서 정책 직접 연결을 선택합니다.

    6. 권한 정책 목록에서 사용자에게 추가할 CloudWatchAgentServerPolicy 정책을 선택합니다.

    7. 다음을 선택합니다.

    8. 검토 및 생성 페이지에서 사용자 이름이 만족스러운지, CloudWatchAgentServerPolicy 정책이 권한 요약에 있는지 확인합니다.

    9. 사용자 생성을 선택합니다.

    10. AWS 액세스 키 및 보안 암호 키 생성 후 검색 - IAM 콘솔의 탐색 창에서 사용자를 선택한 다음 이전 단계에서 생성한 사용자의 이름을 선택합니다.

    11. 사용자의 페이지에서 보안 자격 증명 탭을 선택합니다.

    12. 액세스 키 섹션에서 액세스 키 생성을 선택합니다.

    13. 액세스 키 생성 1단계에서 명령줄 인터페이스(CLI)를 선택합니다.

    14. 액세스 키 만들기 2단계에서 필요에 따라 태그를 입력하고 다음을 선택합니다.

    15. 액세스 키 생성 3단계에서 .csv 파일 다운로드를 선택하여 IAM 사용자의 액세스 키 및 비밀 액세스 키와 함께 .csv 파일을 저장합니다. 다음 단계에 이 정보가 필요합니다.

    16. 완료를 선택합니다.

    17. 다음 명령을 입력하여 온프레미스 호스트에서 AWS 자격 증명을 구성합니다. ACCESS_KEY_IDSECRET_ACCESS_ID를 이전 단계에서 다운로드한 .csv 파일에서 새로 생성된 액세스 키와 시크릿 액세스 키로 바꿉니다.

      $ aws configure AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
  4. Amazon EKS 또는 Kubernetes 클러스터에 대한 AWS 자격 증명을 설정합니다. Amazon EKS를 시작하는 가장 쉬운 방법은 EKS OTel Container Insights 추가 기능을 사용하는 것입니다. OpenTelemetry Collector를 직접 사용하는 것을 선호하는 경우 아래의 절차를 따라 Amazon EKS 또는 Kubernetes 클러스터에 대해 AWS 자격 증명을 설정하여 CloudWatch로 텔레메트리를 전송합니다.

    Setup IAM permissions for Amazon EKS
    1. 다음 명령을 사용하여 클러스터의 IAM OIDC ID 공급자를 생성합니다.

      eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} --region ${REGION} --approve
    2. 다음 명령을 사용하여 OTel Collector의 Kubernetes 서비스 계정에 IAM 역할을 할당합니다.

      eksctl create iamserviceaccount \ --name ${COLLECTOR_SERVICE_ACCOUNT}\ --namespace ${NAMESPACE} \ --cluster ${CLUSTER_NAME} \ --region ${REGION} \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --approve \ --override-existing-serviceaccounts
    Setup IAM permissions for Kubernetes
    1. 다음 명령을 입력하여 온프레미스 호스트에서 AWS 자격 증명을 구성합니다. ACCESS_KEY_IDSECRET_ACCESS_ID를 이전 단계에서 다운로드한 .csv 파일에서 새로 생성된 액세스 키와 시크릿 액세스 키로 바꿉니다. 기본적으로 자격 증명 파일은 /home/user/.aws/credentials에 저장됩니다.

      aws configure AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
    2. OpenTelemetry Collector 리소스를 편집해 kubectl edit OpenTelemetryCollector otel_collector 명령을 사용하여 새로 생성된 AWS 보안 인증 암호를 추가합니다.

    3. 파일 편집기를 사용해서 배포판의 상단에 다음 구성을 추가하여 AWS 자격 증명을 OpenTelemetryCollector 컨테이너에 추가합니다. 경로 /home/user/.aws/credentials를 로컬 AWS 자격 증명 파일의 위치로 바꿉니다.

      spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/user/.aws/credentials name: aws-credentials
  5. CloudWatch 엔드포인트로 텔레메트리를 전송하도록 수집기 구성에서 OTLP 내보내기 도구를 구성합니다. 아래 예제를 참조하세요.

수집기 구성 예제

아래 콘텐츠를 복사 및 붙여 넣어 로그 및 추적을 OTLP 엔드포인트로 전송하도록 수집기를 구성합니다.

receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: otlphttp/logs: compression: gzip logs_endpoint: logs_otlp_endpoint headers: x-aws-log-group: ency_log_group x-aws-log-stream: default auth: authenticator: sigv4auth/logs otlphttp/traces: compression: gzip traces_endpoint: traces_otlp_endpoint auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "region" service: "logs" sigv4auth/traces: region: "region" service: "xray" service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: logs: receivers: [otlp] exporters: [otlphttp/logs] traces: receivers: [otlp] exporters: [otlphttp/traces]

다음은 sigv4를 사용하여 us-east-1로 로그 및 추적을 전송하는 예제입니다.

receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: otlphttp/logs: compression: gzip logs_endpoint: https://logs.us-east-1.amazonaws.com/v1/logs headers: x-aws-log-group: MyApplicationLogs x-aws-log-stream: default auth: authenticator: sigv4auth/logs otlphttp/traces: compression: gzip traces_endpoint: https://xray.us-east-1.amazonaws.com/v1/traces auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "us-east-1" service: "logs" sigv4auth/traces: region: "us-east-1" service: "xray" service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: logs: receivers: [otlp] exporters: [otlphttp/logs] traces: receivers: [otlp] exporters: [otlphttp/traces]
참고

OpenTelemetry SDK를 always_on 샘플링 구성으로 구성하여 CloudWatch Application Signals를 통해 스팬 100%를 안정적으로 기록하고, 중요 애플리케이션에 대한 전체 가시성을 확보할 수 있도록 합니다. 자세한 내용은 OpenTelemetry Java SDK sampler configuration 예제를 참조하세요. X-Ray OTLP 엔드포인트로 OpenTelemetry Collector를 설정하는 예제는 application signals demo 리포지토리를 참조하세요.

아래 콘텐츠를 복사하고 붙여넣어 지표를 OTLP 엔드포인트로 전송하도록 수집기를 구성합니다.

receivers: otlp: protocols: http: endpoint: "0.0.0.0:4318" processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false endpoint: metrics_otlp_endpoint auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "region" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]

다음은 sigv4를 사용하여 us-east-1로 지표를 전송하는 예제입니다.

receivers: otlp: protocols: http: endpoint: "0.0.0.0:4318" processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false endpoint: "https://monitoring.us-east-1.amazonaws.com/v1/metrics:443" auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "us-east-1" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]