

# 시작하기
<a name="CloudWatch-OTLPGettingStarted"></a>

CloudWatch에서 OpenTelemetry를 시작하려는 경우, AWS Distro for OpenTelemetry SDK와 함께 CloudWatch 에이전트에서 제공되는 사전 패키징된 OpenTelemetry 설정을 사용할 수 있습니다. 이를 통해 CloudWatch에서 가장 통합된 모니터링 환경이 제공됩니다.

**참고**  
트레이스에 OTLP 엔드포인트를 사용하기 전에 트랜잭션 검색이 활성화되어 있어야 합니다.

또는 OpenTelemetry Collector 또는 사용자 지정 OpenTelemetry Collector를 사용하여 OTLP 엔드포인트로 직접 원격 측정을 전송할 수 있는 유연한 옵션도 있습니다. AWS Distro for OpenTelemetry를 사용하면 수집기를 사용하지 않고 원격 측정을 OTLP 엔드포인트로 바로 보낼 수 있습니다. 기능 지원을 기준으로 정보에 입각한 선택을 내리면 됩니다.


| 기능 | OpenTelemetry Collector | 사용자 지정 OpenTelemetry Collector | AWS Distro for OpenTelemetry | 
| --- | --- | --- | --- | 
|  CloudWatch 애플리케이션 신호(애플리케이션 성능 지표, 서비스 검색, 애플리케이션 맵)  |  예  |  예  |  예  | 
|  스팬 및 트레이스 요약 검색과 분석  |  예  |  예  |  예  | 
|  로그 요약 검색 및 분석  |  예  |  예  |  예  | 
|  애플리케이션이 호스팅되는 AWS 인프라 속성을 사용한 애플리케이션 성능 모니터링 원격 측정 보강.  |  아니요  |  예  |  예  | 
|  애플리케이션과 상관관계가 있는 런타임 지표. 예: JVM 지표  |  아니요  |  예  |  아니요  | 
|  AWS 지원  |  AWS가 수신한 데이터  |  AWS가 수신한 데이터  |  AWS가 수신한 데이터  | 
|  원격 측정 지원됨  |  로그, 지표, 트레이스  |  로그, 트레이스, 지표  |  지표, 트레이스  | 

**Topics**
+ [OpenTelemetry Collector](CloudWatch-OTLPSimplesetup.md)
+ [사용자 지정 OpenTelemetry Collector 구축](CloudWatch-OTLPAdvancedsetup.md)
+ [AWS Distro for OpenTelemetry(ADOT) SDK를 사용하여 수집기를 사용하지 않고 원격 측정 내보내기](CloudWatch-OTLP-UsingADOT.md)
+ [PromQL에서 벤딩 지표 활성화](CloudWatch-OTelEnrichment.md)

# OpenTelemetry Collector
<a name="CloudWatch-OTLPSimplesetup"></a>

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

CloudWatch에서 OpenTelemetry Collector를 사용하는 경우 다음과 같은 이점이 있습니다.
+ 단일 에이전트를 통해 여러 애플리케이션 및 호스트에서 텔레메트리를 수집하여 CloudWatch에 대한 연결 수를 줄입니다.
+ 속성 추가 또는 제거, 데이터 일괄 처리, 트레이스 샘플링을 포함하여 CloudWatch로 전송하기 전에 텔레메트리를 처리하고 필터링합니다.
+ AWS, 온프레미스 및 기타 클라우드 환경에서 동일한 수집기 구성을 사용하여 애플리케이션이 실행되는 위치와 무관하게 일관된 텔레메트리 파이프라인을 제공합니다.
+ CloudWatch Query Studio에서 PromQL(Prometheus Query Language)을 사용하여 쿼리할 수 있는 보강된 레이블이 포함된 지표를 CloudWatch로 전송합니다.

## 지원되는 수신기
<a name="CloudWatch-OTLPSupportedReceivers"></a>

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

단일 수집기에서 여러 수신기를 구성할 수 있으므로 OpenTelemetry 및 Prometheus 지표를 모두 수집하여 동일한 파이프라인을 통해 CloudWatch로 보낼 수 있습니다. 사용 가능한 수신기의 전체 목록은 OpenTelemetry Collector [리포지토리](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver)를 참조하세요.

## 시작하기
<a name="CloudWatch-OTLPSimplesetupGettingStarted"></a>

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

단계:

1. OpenTelemetry Collector 배포판의 최신 릴리스를 다운로드합니다. 자세한 내용은 OpenTelemetry Collector [릴리스](https://github.com/open-telemetry/opentelemetry-collector-releases/releases)를 참조하세요.

1. 호스트에 OpenTelemetry Collector를 설치합니다. 수집기는 모든 운영 체제 및 플랫폼에서 실행됩니다. 자세한 정보는 [Install the Collector](https://opentelemetry.io/docs/collector/installation/)를 참조하세요.

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

------
#### [ Setup IAM permissions for Amazon EC2 ]

**아래 절차에 따라 Amazon EC2 인스턴스의 `CloudWatchAgentServerPolicy` IAM 역할에 IAM 정책을 연결합니다.**

   1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

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

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

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

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

------
#### [ Setup IAM permissions for on-premise hosts ]

**온프레미스 호스트에 권한을 제공하는 데 사용할 IAM 사용자를 생성할 수 있습니다.**

   1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

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

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

   1. **다음**을 선택합니다.

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

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

   1. **다음**을 선택합니다.

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

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

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

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

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

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

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

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

   1. **완료**를 선택합니다.

   1. 다음 명령을 입력하여 온프레미스 호스트에서 AWS 자격 증명을 구성합니다. *ACCESS\$1KEY\$1ID*와 *SECRET\$1ACCESS\$1ID*를 이전 단계에서 다운로드한 .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
      ```

------

1. 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
      ```

   1. 다음 명령을 사용하여 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\$1KEY\$1ID*와 *SECRET\$1ACCESS\$1ID*를 이전 단계에서 다운로드한 .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
      ```

   1. OpenTelemetry Collector 리소스를 편집해 `kubectl edit OpenTelemetryCollector otel_collector` 명령을 사용하여 새로 생성된 AWS 보안 인증 암호를 추가합니다.

   1. 파일 편집기를 사용해서 배포판의 상단에 다음 구성을 추가하여 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
      ```

------

1. CloudWatch 엔드포인트로 텔레메트리를 전송하도록 수집기 구성에서 OTLP 내보내기 도구를 구성합니다. 아래 예제를 참조하세요.

## 수집기 구성 예제
<a name="CloudWatch-OTLPSimplesetupConfigureCollector"></a>

아래 콘텐츠를 복사 및 붙여 넣어 로그 및 추적을 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\$1on* 샘플링 구성으로 구성하여 CloudWatch Application Signals를 통해 스팬 100%를 안정적으로 기록하고, 중요 애플리케이션에 대한 전체 가시성을 확보할 수 있도록 합니다. 자세한 내용은 [OpenTelemetry Java SDK sampler configuration](https://opentelemetry.io/docs/languages/java/sdk/#sampler) 예제를 참조하세요. X-Ray OTLP 엔드포인트로 OpenTelemetry Collector를 설정하는 예제는 [application signals demo](https://github.com/aws-observability/application-signals-demo/blob/main/scripts/opentelemetry/otel_simple_setup/opentelemetry.yaml) 리포지토리를 참조하세요.

아래 콘텐츠를 복사하고 붙여넣어 지표를 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]
```

# 사용자 지정 OpenTelemetry Collector 구축
<a name="CloudWatch-OTLPAdvancedsetup"></a>

사용자 지정 OpenTelemetry Collector를 빌드하여 OpenTelemetry와 함께 CloudWatch에서 최상의 애플리케이션 관찰성 경험을 얻을 수 있습니다. 이 설정에서는 오픈 소스 CloudWatch 구성 요소를 사용하여 자체 OpenTelemetry Collector를 구축해야 합니다.

## 사전 조건
<a name="CloudWatch-OTLPAdvancedsetupPrequisite"></a>

CloudWatch에서 *트랜잭션 검색*이 활성화되어 있는지 확인합니다. 자세한 내용은 [트랜잭션 검색](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html) 섹션을 참조하세요.

## 자체 수집기 구축
<a name="CloudWatch-OTLPAdvancedsetupBuildCollector"></a>

OpenTelemetry를 통해 다음 구성으로 자체 수집기를 구축하여 CloudWatch에서 애플리케이션을 모니터링할 수 있습니다. 자세한 내용은 [Building a custom collector](https://opentelemetry.io/docs/collector/custom-collector/)를 참조하세요.

CloudWatch의 공통 구성입니다.

```
dist:
  name: otelcol-dev
  description: OTel Collector for sending telemetry to CloudWatch.
  output_path: ./otelcol-dev
extensions:
  - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.111.0
  - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.113.0
exporters:
  - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.111.0
  - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.111.0
receivers:
  - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.111.0
```

트레이스에 대한 추가 구성입니다.

```
# Enable Tracing 
dist:
  name: otelcol-dev
  description: OTel Collector for sending telemetry to CloudWatch.
  output_path: ./otelcol-dev
extensions:
    #Include common configurations and your custom extensions

exporters:
    #Include common configurations and your custom extensions
 
receivers:
  - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.111.0
processors:
  - gomod: github.com/amazon-contributing/opentelemetry-collector-contrib/processor/awsapplicationsignalsprocessor v0.113.0
  - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.113.0
  - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.113.0
replaces:
  - github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.113.0 => github.com/amazon-contributing/opentelemetry-collector-contrib/internal/aws/awsutil v0.113.0
  - github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.113.0 => github.com/amazon-contributing/opentelemetry-collector-contrib/internal/aws/cwlogs v0.113.0
  - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.113.0 => github.com/amazon-contributing/opentelemetry-collector-contrib/exporter/awsemfexporter v0.113.0
  - github.com/openshift/api v3.9.0+incompatible => github.com/openshift/api v0.0.0-20180801171038-322a19404e37
```

**참고**  
다음 사항에 유의하세요.  
수집기를 빌드한 후, [OpenTelemetry Collector](CloudWatch-OTLPSimplesetup.md)의 절차에 따라 호스트 또는 kubernetes 환경에서 사용자 지정 수집기를 배포하고 구성합니다.
Application Signals 프로세서를 사용하여 사용자 지정 OpenTelemetry 수집기를 설정하는 방법에 대한 자세한 내용은 [Application Signals custom configuration](https://github.com/aws-observability/application-signals-demo/blob/main/scripts/opentelemetry/appsignals_custom_otel_setup/custom-opentelemetry.yaml) 예제를 참조하세요. Application Signals 프로세서는 사용자 지정 빌드를 위한 OpenTelemetry Collector의 최신 버전만 지원합니다. 지원되는 버전에 대한 자세한 내용은 [opentelemetry-collector-contrib repository](https://github.com/amazon-contributing/opentelemetry-collector-contrib/tags)를 참조하세요.

# AWS Distro for OpenTelemetry(ADOT) SDK를 사용하여 수집기를 사용하지 않고 원격 측정 내보내기
<a name="CloudWatch-OTLP-UsingADOT"></a>

ADOT SDK를 사용하면 수집기를 사용하지 않고 지표를 OTLP 엔드포인트로 바로 전송할 수 있습니다.

**참고**  
Application Signals에는 트랜잭션 검색 기능이 포함되어 있습니다. 중복 비용을 방지하려면 ADOT SDK에서 Application Signals를 비활성화하고 `OTEL_AWS_APPLICATION_SIGNALS_ENABLED`를 false(기본 설정)로 설정합니다.

**Topics**
+ [사전 조건](#CloudWatch-OTLP-UsingADOT-Prerequisite)
+ [사용자 역할에 대한 IAM 권한 설정](#setup-iam-permissions-role)
+ [자격 증명 제공업체 구성](#configure-credentials-providers)
+ [ADOT SDK 활성화](#Enabling-ADOT)

## 사전 조건
<a name="CloudWatch-OTLP-UsingADOT-Prerequisite"></a>

트레이스를 사용하는 경우 X-Ray OTLP 엔드포인트로 스팬을 보내려면 트랜잭션 검색이 활성화되어 있어야 합니다. 자세한 내용은 [트랜잭션 검색 시작하기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search-getting-started.html)를 참조하세요.

## 사용자 역할에 대한 IAM 권한 설정
<a name="setup-iam-permissions-role"></a>

다음 단계를 수행하여 사용자 역할에 필요한 IAM 권한을 연결합니다.

**추적:**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. **역할**을 선택하고 구성된 역할을 찾아 선택하세요.

1. **권한** 탭에서 **권한 추가**와 **정책 연결**을 차례로 선택합니다.

1. 검색 상자를 사용하여 `AWSXrayWriteOnlyPolicy`를 검색하세요.

1. `AWSXrayWriteOnlyPolicy` 정책을 선택하고 **권한 추가**를 선택합니다.

**로그:**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. **역할**을 선택하고 구성된 역할을 찾아 선택하세요.

1. **권한** 탭에서 **권한 추가**를 선택하고 **인라인 정책 생성**을 선택하세요.

1. 서비스로 **CloudWatch Logs**를 선택하고 **허용된 작업**에서 다음을 필터링하고 선택하세요.

   ```
   logs:PutLogEvents
   logs:DescribeLogGroups
   logs:DescribeLogStreams
   ```

1. 다음은 필수 권한을 부여하는 IAM 정책 예제입니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CloudWatchLogsAccess",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams"
                  
               ],
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*"
               ]
           }
       ]
   }
   ```

------

## 자격 증명 제공업체 구성
<a name="configure-credentials-providers"></a>

ADOT는 AWS SDK를 사용하여 원격 측정 데이터를 AWS로 내보내는 데 필요한 유효한 자격 증명을 자동으로 검색합니다. 특정 환경에 대한 자격 증명을 구성하는 방법에 대한 지침은 [AWS SDK가 자격 증명을 검색하는 방법에 대한 설명서](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)를 참조하세요.

**온프레미스 호스트에 대한 IAM 자격 증명 설정:**

다음 명령을 입력하여 온프레미스 호스트에서 AWS 자격 증명을 구성합니다. **ACCESS\$1KEY\$1ID** 및 **SECRET\$1ACCESS\$1KEY**를 구성된 IAM 역할 또는 사용자의 자격 증명으로 바꿉니다.

```
$ 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
```

## ADOT SDK 활성화
<a name="Enabling-ADOT"></a>

애플리케이션이 로그 및 추적을 Java, Node.js, Python 및 .Net의 AWS Distro for OpenTelemetry(ADOT) SDK에서 OTLP 엔드포인트로 바로 전송하도록 활성화할 수 있습니다.

------
#### [ Java ]

**참고**  
이러한 기능을 사용하려면 **ADOT Java Agent 버전 2.11.2 이상**을 사용해야 합니다.

1. 최신 버전의 AWS Distro for OpenTelemetry Java 자동 계측 에이전트를 다운로드합니다. 이 명령을 사용하여 최신 버전을 다운로드할 수 있습니다.

   ```
   curl -L -O https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar
   ```

   [aws-otel-java-instrumentation 릴리스](https://github.com/aws-observability/aws-otel-java-instrumentation/releases)에서 모든 릴리스 버전에 대한 정보를 볼 수 있습니다.

1. 추적을 OTLP 엔드포인트로 바로 전송하는 여러 내보내기 도구를 활성화하고 이 이점을 최적화하려면 애플리케이션을 시작하기 전에 다음 환경 변수를 사용하세요.

   **추적:**
   + X-Ray OTLP 추적 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`를 설정하세요(`https://xray.[AWSRegion].amazonaws.com/v1/traces`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + `OTEL_TRACES_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + 다음 정보를 키-값 페어로 지정하도록 `OTEL_RESOURCE_ATTRIBUTES` 변수를 설정하세요. 이 환경 변수는 Application Signals에서 사용되며 X-Ray 추적 주석 및 CloudWatch 지표 차원으로 변환됩니다.
     + (선택 사항) `service.name`은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인 `UnknownService`가 사용됩니다.
     + (선택 사항) `deployment.environment`는 애플리케이션이 실행되는 환경을 설정합니다. 이는 애플리케이션의 **호스팅 위치** 환경으로 표시됩니다.
     + (선택 사항) 로그 상관 관계를 활성화하려면 `OTEL_RESOURCE_ATTRIBUTES`에서 애플리케이션의 로그 그룹에 대한 추가 환경 변수 `aws.log.group.names`를 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우 `$YOUR_APPLICATION_LOG_GROUP`을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(`&`)를 사용하여 로그 그룹을 구분할 수 있습니다. `aws.log.group.names=log-group-1&log-group-2` 지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 [로그 상관 관계에 대한 지표 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)를 참조하세요. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 [로그 상관 관계에 대한 추적 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)를 참조하세요.

   **로그:**
   + CloudWatch OTLP 로그 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`를 설정하세요(`https://logs.[AWSRegion].amazonaws.com/v1/logs`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 로그를 내보낼 로그 그룹 및 로그 스트림(참고: ADOT를 실행하기 **전에** 생성해야 함)을 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_HEADERS`를 설정하세요(`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + `OTEL_LOGS_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).

1. AWS Distro for OpenTelemetry Java 자동 계측 에이전트가 저장되는 경로를 지정하도록 `JAVA_TOOL_OPTIONS`를 설정하세요. 예제:

   ```
   export JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH"
   export AWS_ADOT_JAVA_INSTRUMENTATION_PATH="./aws-opentelemetry-agent.jar"
   ```

1. 이제 애플리케이션은 ADOT Java 계측과 함께 실행되며 스팬 및 로그가 생성됩니다. 스팬은 `aws/spans` CloudWatch 로그 그룹에 저장되지만 로그는 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 헤더에 지정된 로그 그룹에 저장됩니다. CloudWatch 추적 및 지표 콘솔에서 스팬과 상관된 추적 및 지표를 볼 수도 있습니다.

1. 이전 단계에 나열된 환경 변수를 사용하여 애플리케이션을 시작합니다. 다음은 시작 스크립트의 예입니다.

   ```
   JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" \
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default 
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   java -jar $MY_JAVA_APP.jar
   ```

------
#### [ Node.js ]

**참고**  
이러한 기능을 사용하려면 **ADOT JavaScript 버전 0.7.0 이상**을 사용해야 합니다.

1. 최신 버전의 AWS Distro for OpenTelemetry Java 자동 계측 에이전트를 다운로드하세요. 다음 명령을 실행하여 인증서를 설치합니다.

   ```
   npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
   ```

   [aws-otel-js-instrumentation 릴리스](https://github.com/aws-observability/aws-otel-js-instrumentation/releases)에서 모든 릴리스 버전에 대한 정보를 볼 수 있습니다.

1. 추적을 OTLP 엔드포인트로 바로 전송하는 여러 내보내기 도구를 활성화하고 이 이점을 최적화하려면 애플리케이션을 시작하기 전에 다음 환경 변수를 사용하세요.

   **추적:**
   + X-Ray OTLP 추적 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`를 설정하세요(`https://xray.[AWSRegion].amazonaws.com/v1/traces`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + `OTEL_TRACES_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + 다음 정보를 키-값 페어로 지정하도록 `OTEL_RESOURCE_ATTRIBUTES` 변수를 설정하세요. 이 환경 변수는 Application Signals에서 사용되며 X-Ray 추적 주석 및 CloudWatch 지표 차원으로 변환됩니다.
     + (선택 사항) `service.name`은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인 `UnknownService`가 사용됩니다.
     + (선택 사항) `deployment.environment`는 애플리케이션이 실행되는 환경을 설정합니다. 이는 애플리케이션의 **호스팅 위치** 환경으로 표시됩니다.
     + (선택 사항) 로그 상관 관계를 활성화하려면 `OTEL_RESOURCE_ATTRIBUTES`에서 애플리케이션의 로그 그룹에 대한 추가 환경 변수 `aws.log.group.names`를 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우 `$YOUR_APPLICATION_LOG_GROUP`을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(`&`)를 사용하여 로그 그룹을 구분할 수 있습니다. `aws.log.group.names=log-group-1&log-group-2` 지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 [로그 상관 관계에 대한 지표 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)를 참조하세요. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 [로그 상관 관계에 대한 추적 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)를 참조하세요.

   **로그:**
   + CloudWatch OTLP 로그 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`를 설정하세요(`https://logs.[AWSRegion].amazonaws.com/v1/logs`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 로그를 내보낼 로그 그룹 및 로그 스트림(참고: ADOT를 실행하기 **전에** 생성해야 함)을 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_HEADERS`를 설정하세요(`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + `OTEL_LOGS_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).

1. 이제 애플리케이션은 ADOT JavaScript 계측과 함께 실행되며 스팬 및 로그가 생성됩니다. 스팬은 `aws/spans` CloudWatch 로그 그룹에 저장되지만 로그는 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 헤더에 지정된 로그 그룹에 저장됩니다. CloudWatch 추적 및 지표 콘솔에서 스팬과 상관된 추적 및 지표를 볼 수도 있습니다.

1. 이전 단계에 나열된 환경 변수를 사용하여 애플리케이션을 시작합니다. 다음은 시작 스크립트의 예입니다.

   `$SVC_NAME`을 애플리케이션 이름으로 바꿉니다. 애플리케이션의 이름으로 표시됩니다.

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default 
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   node --require '@aws/aws-distro-opentelemetry-node-autoinstrumentation/register' your-application.js
   ```

------
#### [ Python ]

**참고**  
이러한 기능을 사용하려면 **ADOT Python 버전 0.10.0 이상**을 사용하고 **`botocore`**를 설치해야 합니다.

1. 최신 버전의 AWS Distro for OpenTelemetry Python 자동 계측을 다운로드하세요. 다음 명령을 실행하여 인증서를 설치합니다.

   ```
   pip install aws-opentelemetry-distro
   ```

   [aws-otel-python-instrumentation 릴리스](https://github.com/aws-observability/aws-otel-python-instrumentation/releases)에서 모든 릴리스 버전에 대한 정보를 볼 수 있습니다.

1. 추적을 OTLP 엔드포인트로 바로 전송하는 여러 내보내기 도구를 활성화하고 이 이점을 최적화하려면 애플리케이션을 시작하기 전에 다음 환경 변수를 사용하세요.

   **추적 및 로그 구성 모두에 대해 다음 환경 변수를 설정해야 합니다.**
   + `OTEL_PYTHON_DISTRO`\$1`aws_distro`
   + `OTEL_PYTHON_CONFIGURATOR`\$1`aws_configurator`

   **추적:**
   + X-Ray OTLP 추적 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`를 설정하세요(`https://xray.[AWSRegion].amazonaws.com/v1/traces`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + `OTEL_TRACES_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + 다음 정보를 키-값 페어로 지정하도록 `OTEL_RESOURCE_ATTRIBUTES` 변수를 설정하세요. 이 환경 변수는 Application Signals에서 사용되며 X-Ray 추적 주석 및 CloudWatch 지표 차원으로 변환됩니다.
     + (선택 사항) `service.name`은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인 `UnknownService`가 사용됩니다.
     + (선택 사항) `deployment.environment`는 애플리케이션이 실행되는 환경을 설정합니다. 이는 애플리케이션의 **호스팅 위치** 환경으로 표시됩니다.
     + (선택 사항) 로그 상관 관계를 활성화하려면 `OTEL_RESOURCE_ATTRIBUTES`에서 애플리케이션의 로그 그룹에 대한 추가 환경 변수 `aws.log.group.names`를 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우 `$YOUR_APPLICATION_LOG_GROUP`을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(`&`)를 사용하여 로그 그룹을 구분할 수 있습니다. `aws.log.group.names=log-group-1&log-group-2` 지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 [로그 상관 관계에 대한 지표 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)를 참조하세요. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 [로그 상관 관계에 대한 추적 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)를 참조하세요.

   **로그:**
   + `OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED`를 `true`로 설정합니다.
   + CloudWatch OTLP 로그 엔드포인트를 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`를 설정하세요(`https://logs.[AWSRegion].amazonaws.com/v1/logs`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 로그를 내보낼 로그 그룹 및 로그 스트림(참고: ADOT를 실행하기 **전에** 생성해야 함)을 지정하도록 `OTEL_EXPORTER_OTLP_LOGS_HEADERS`를 설정하세요(`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`).

     예제:

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + `OTEL_LOGS_EXPORTER`를 `otlp`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).
   + `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 변수를 `http/protobuf`로 설정하세요(이 값은 선택 사항이며 이 환경 변수가 설정되지 않은 경우 기본값임).

1. 이제 애플리케이션은 ADOT Python 계측과 함께 실행되며 스팬 및 로그가 생성됩니다. 스팬은 `aws/spans` CloudWatch 로그 그룹에 저장되지만 로그는 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 헤더에 지정된 로그 그룹에 저장됩니다. CloudWatch 추적 및 지표 콘솔에서 스팬과 상관된 추적 및 지표를 볼 수도 있습니다.

1. 이전 단계에 나열된 환경 변수를 사용하여 애플리케이션을 시작합니다. 다음은 시작 스크립트의 예입니다.

   `$SVC_NAME`을 애플리케이션 이름으로 바꿉니다. 애플리케이션의 이름으로 표시됩니다.

   `$PYTHON_APP`을 애플리케이션 위치와 이름으로 바꿉니다.

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
   OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   opentelemetry-instrument python $MY_PYTHON_APP.py
   ```

------
#### [ .Net ]

**참고**  
이러한 기능을 사용하려면 **ADOT .NET 버전 1.8.0 이상**이 필요합니다.
압축은 현재 지원되지 않습니다.
로그는 현재 지원되지 않습니다.

AWS Distro for OpenTelemetry .NET 자동 계측 패키지의 최신 버전을 다운로드합니다. [aws-otel-dotnet-instrumentation 릴리스](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases)에서 모든 릴리스 버전에 대한 정보를 볼 수 있습니다.

추적을 OTLP 엔드포인트로 바로 전송하는 여러 내보내기 도구를 활성화하고 이 이점을 최적화하려면 애플리케이션을 시작하기 전에 다음 환경 변수를 사용하세요. 이때 `OTEL_RESOURCE_ATTRIBUTES` 환경 변수에서 `dotnet-service-name`을 사용자가 선택한 서비스 이름으로 바꾸세요.

**추적:**
+ **반드시** `OTEL_TRACES_EXPORTER`를 `none`으로 설정해야 합니다.
+ **반드시** `OTEL_AWS_SIG_V4_ENABLED`를 `true`으로 설정해야 합니다.

  이 기능은 **.NET에서 자동으로 활성화되지 않습니다**. 환경 변수는 특히 .NET 계측 내에서 이 사용 사례를 식별하는 데 필요합니다. 이 요구 사항은 .NET에만 적용되며 **지원되는 다른 언어에는 적용되지 않습니다**.

다음은 Linux용 설정 예제입니다.

```
export INSTALL_DIR=OpenTelemetryDistribution
export CORECLR_ENABLE_PROFILING=1
export CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
export CORECLR_PROFILER_PATH=${INSTALL_DIR}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
export DOTNET_ADDITIONAL_DEPS=${INSTALL_DIR}/AdditionalDeps
export DOTNET_SHARED_STORE=${INSTALL_DIR}/store
export DOTNET_STARTUP_HOOKS=${INSTALL_DIR}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
export OTEL_DOTNET_AUTO_HOME=${INSTALL_DIR}

export OTEL_DOTNET_AUTO_PLUGINS="AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
export OTEL_TRACES_EXPORTER=none
export OTEL_AWS_SIG_V4_ENABLED=true

export OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
export OTEL_METRICS_EXPORTER=none
export OTEL_LOGS_EXPORTER=none
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces
```

다음은 Windows Server용 설정 예제입니다.

```
$env:INSTALL_DIR = "OpenTelemetryDistribution" 
$env:CORECLR_ENABLE_PROFILING = 1 
$env:CORECLR_PROFILER = "{918728DD-259F-4A6A-AC2B-B85E1B658318}" 
$env:CORECLR_PROFILER_PATH = Join-Path $env:INSTALL_DIR "win-x64/OpenTelemetry.AutoInstrumentation.Native.dll" 
$env:DOTNET_ADDITIONAL_DEPS = Join-Path $env:INSTALL_DIR "AdditionalDeps" 
$env:DOTNET_SHARED_STORE = Join-Path $env:INSTALL_DIR "store" 
$env:DOTNET_STARTUP_HOOKS = Join-Path $env:INSTALL_DIR "net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" 
$env:OTEL_DOTNET_AUTO_HOME = $env:INSTALL_DIR 
$env:OTEL_DOTNET_AUTO_PLUGINS = "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"

$env:OTEL_TRACES_EXPORTER=none
$env:OTEL_AWS_SIG_V4_ENABLED=true

$env:OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
$env:OTEL_METRICS_EXPORTER=none
$env:OTEL_LOGS_EXPORTER=none
$env:OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
$env:OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces
```

1. 이전 단계에 나열된 환경 변수를 사용하여 애플리케이션을 시작합니다.

1. (선택 사항) 또는 제공된 설치 스크립트를 사용하여 AWS Distro for OpenTelemetry .NET 자동 계측 패키지의 설치 및 설정을 지원할 수 있습니다.

   Linux의 경우 GitHub 릴리스 페이지에서 Bash 설치 스크립트를 다운로드하여 설치합니다.

   ```
   # Download and Install
   curl -L -O https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/aws-otel-dotnet-install.sh
   chmod +x ./aws-otel-dotnet-install.sh
   ./aws-otel-dotnet-install.sh
   # Instrument
   . $HOME/.otel-dotnet-auto/instrument.shexport OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
   ```

   Windows Server의 경우 GitHub 릴리스 페이지에서 PowerShell 설치 스크립트를 다운로드하여 설치하세요.

   ```
   # Download and Install
   $module_url = "https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/AWS.Otel.DotNet.Auto.psm1"
   $download_path = Join-Path $env:temp "AWS.Otel.DotNet.Auto.psm1"
   Invoke-WebRequest -Uri $module_url -OutFile $download_path
   Import-Module $download_path
   Install-OpenTelemetryCore
   # Instrument
   Import-Module $download_path
   Register-OpenTelemetryForCurrentSession -OTelServiceName "dotnet-service-name"
   Register-OpenTelemetryForIIS
   ```

   [공식 NuGet 리포지토리](https://www.nuget.org/packages/AWS.Distro.OpenTelemetry.AutoInstrumentation)에서 AWS Distro for OpenTelemetry .NET 자동 계측 패키지의 NuGet 패키지를 찾을 수 있습니다. [README 파일](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/blob/main/src/AWS.Distro.OpenTelemetry.AutoInstrumentation/nuget-readme.md)에서 지침을 확인해야 합니다.

------

# PromQL에서 벤딩 지표 활성화
<a name="CloudWatch-OTelEnrichment"></a>

OTel 보강을 활성화하여 PromQL을 통해 쿼리할 수 있는 [지원되는 AWS 리소스](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/UsingResourceTagsForTelemetry.html)에 대한 벤딩 지표를 만들 수 있습니다. 활성화되면 리소스 식별자 차원(예: InstanceId 차원을 포함한 EC2 CPUUtilization)이 포함된 지표가 리소스 ARN 및 리소스 태그 레이블로 보강되고 PromQL을 사용하여 쿼리할 수 있게 됩니다.

보강된 지표에서 원래 지표 이름과 CloudWatch 차원은 보존되고, 다음이 추가됩니다.
+ **리소스 속성** - 리소스 ARN(`cloud.resource_id`), 클라우드 공급자, 리전 및 계정 ID.
+ **계측 범위** - 소스 서비스를 식별하고 지표를 OTel 보강된 것으로 표시합니다.
+ **리소스 태그** - AWS PromQL 레이블로 쿼리할 수 있는 리소스와 연결된 모든 리소스 태그.

기존 CloudWatch 지표는 수정되지 않고 기존 CloudWatch API를 통해 계속해서 제공됩니다.

## 벤딩 지표에 대한 OpenTelemetry 보강 활성화
<a name="CloudWatch-OTelEnrichment-Enable"></a>

OTel 보강을 시작하기 전에 계정의 [텔레메트리에서 리소스 태그를 활성화](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/EnableResourceTagsOnTelemetry.html)해야 합니다.

CloudWatch 콘솔, AWS CLI 또는 AWS SDK를 사용하여 특정 리전의 계정에 대해 OTel 보강을 활성화할 수 있습니다.

다음 작업에는 `cloudwatch:StartOTelEnrichment` 권한이 필요합니다.

**AWS 지표에 대한 OTel 보강 활성화(CloudWatch 콘솔)**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **CloudWatch**를 선택한 다음, **설정**을 선택합니다.

1. **AWS 지표에 대한 OTel 보강 활성화** 창에서 기능을 켭니다.

**AWS CLI**

```
aws cloudwatch start-o-tel-enrichment
```

여러 리전에서 활성화하려면 각각의 해당 리전에서 API를 간접적으로 호출합니다.

보강이 활성화되면 PromQL을 통해 벤딩 지표 쿼리를 시작할 수 있습니다. 참조: [PromQL을 사용하여 벤딩 AWS 지표 쿼리](CloudWatch-PromQL-Querying.md#CloudWatch-PromQL-Querying-Vended).