

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Distro for OpenTelemetry를 수집기로 사용
<a name="AMP-ingest-with-adot"></a>

이 섹션에서는 Prometheus 계측 애플리케이션에서 스크레이프하고 지표를 Amazon Managed Service for Prometheus로 보내도록 AWS Distro for OpenTelemetry(ADOT) Collector를 구성하는 방법을 설명합니다. ADOT Collector에 대한 자세한 내용은 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel/)를 참조하세요.

다음 주제에서는 지표가 Amazon EKS, Amazon ECS 또는 Amazon EC2 인스턴스에서 나오는지 여부에 따라 ADOT를 지표의 수집기로 설정하는 세 가지 방법을 설명합니다.

**Topics**
+ [Amazon Elastic Kubernetes Service 클러스터에서 AWS Distro for OpenTelemetry를 사용하여 지표 수집 설정](AMP-onboard-ingest-metrics-OpenTelemetry.md)
+ [AWS Distro for Open Telemetry를 사용하여 Amazon ECS에서 지표 수집 설정](AMP-onboard-ingest-metrics-OpenTelemetry-ECS.md)
+ [원격 쓰기를 사용한 Amazon EC2 인스턴스에서의 지표 수집 설정](AMP-onboard-ingest-metrics-remote-write-EC2.md)

# Amazon Elastic Kubernetes Service 클러스터에서 AWS Distro for OpenTelemetry를 사용하여 지표 수집 설정
<a name="AMP-onboard-ingest-metrics-OpenTelemetry"></a>

 AWS Distro for OpenTelemetry(ADOT) 수집기를 사용하여 Prometheus 계측 애플리케이션에서 지표를 스크레이프하고 Amazon Managed Service for Prometheus로 지표를 전송할 수 있습니다.

**참고**  
ADOT Collector에 대한 자세한 내용은 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel/)를 참조하세요.  
Prometheus 계측 애플리케이션에 대한 자세한 내용은 [Prometheus 호환 지표란 무엇입니까?](prom-compatible-metrics.md) 섹션을 참조하세요.

ADOT를 사용하여 Prometheus 지표를 수집할 때는 Prometheus Receiver, Prometheus Remote Write Exporter 및 Sigv4 Authentication Extension의 세 가지 OpenTelemetry 구성 요소가 사용됩니다.

기존 Prometheus 구성을 사용하여 서비스 검색 및 지표 스크래핑을 수행하도록 Prometheus Receiver를 구성할 수 있습니다. Prometheus Receiver는 Prometheus 표시 형식으로 지표를 스크래핑합니다. 스크래핑하려는 모든 애플리케이션 또는 엔드포인트는 Prometheus 클라이언트 라이브러리로 구성해야 합니다. Prometheus Receiver는 Prometheus 설명서의 [구성](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)에 설명된 Prometheus 스크래핑 및 레이블 재지정 구성의 전체 세트를 지원합니다. 이러한 구성을 ADOT Collector 구성에 직접 붙여 넣을 수 있습니다.

Prometheus Remote Write Exporter는 `remote_write` 엔드포인트를 사용하여 스크래핑된 지표를 관리 포털 워크스페이스로 보냅니다. 데이터 내보내기에 대한 HTTP 요청은 보안 인증을 위한 AWS 프로토콜인 AWS SigV4와 Sigv4 Authentication Extension으로 서명됩니다. 자세한 내용은 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.

수집기는 Amazon EKS에서 Prometheus 지표 엔드포인트를 자동으로 검색하고 [<kubernetes\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config)에 있는 구성을 사용합니다.

 다음 데모는 Amazon Elastic Kubernetes Service 또는 자체 관리형 Kubernetes를 실행하는 클러스터에서 사용되는 이러한 구성의 예입니다. 이 단계를 수행하려면 기본 자격 증명 체인의 잠재적 옵션 중 하나에서 자격 AWS 증명이 있어야 AWS 합니다. 자세한 내용은 [AWS SDK for Go 구성을 참조하세요](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html). 이 데모에서는 프로세스의 통합 테스트에 사용되는 샘플 앱을 사용합니다. 샘플 앱은 Prometheus 클라이언트 라이브러리처럼 `/metrics` 엔드포인트에서 지표를 노출합니다.

## 사전 조건
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-pre"></a>

아래 수집 설정 단계를 시작하기 전에 서비스 계정 및 신뢰 정책에 대한 IAM 역할을 설정해야 합니다.

**서비스 계정 및 신뢰 정책에 대한 IAM 역할을 설정하려면**

1. [Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정](set-up-irsa.md#set-up-irsa-ingest)의 단계에 따라 서비스 계정의 IAM 역할을 생성합니다.

   ADOT Collector는 지표를 스크래핑하고 내보낼 때 이 역할을 사용합니다.

1. 다음으로 신뢰 정책을 편집합니다. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/home))을 엽니다.

1. 왼쪽 탐색 창에서 **역할**을 선택하고 1단계에서 만든 **amp-iamproxy-ingest-role**을 찾습니다.

1. **신뢰 관계** 탭을 선택한 후 **신뢰 관계 편집**을 선택합니다.

1. 신뢰 관계 정책 JSON에서 `aws-amp`를 `adot-col`로 바꾼 다음, **신뢰 정책 업데이트**를 선택합니다. 결과 신뢰 정책은 다음과 같아야 합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account",
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
           }
         }
       }
     ]
   }
   ```

------

1. **권한** 탭을 선택하고 다음 권한 정책이 역할에 연결되어 있는지 확인합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "aps:RemoteWrite",
                   "aps:GetSeries",
                   "aps:GetLabels",
                   "aps:GetMetricMetadata"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## Prometheus 지표 수집 활성화
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-steps"></a>

**참고**  
Amazon EKS에서 네임스페이스를 생성하면 `alertmanager` 및 노드 내보내기가 기본적으로 비활성화됩니다.

**Amazon EKS 또는 Kubernetes 클러스터에서 Prometheus 수집을 활성화하려면**

1. [aws-otel-community](https://github.com/aws-observability/aws-otel-community)의 리포지토리에서 샘플 앱을 포크하고 복제합니다.

   그런 후 다음 명령을 실행합니다.

   ```
   cd ./sample-apps/prometheus-sample-app
   docker build . -t prometheus-sample-app:latest
   ```

1. Amazon ECR 또는 DockerHub와 같은 레지스트리에 이 이미지를 푸시합니다.

1. 이 Kubernetes 구성을 복사하고 적용하여 클러스터에 샘플 앱을 배포합니다. `prometheus-sample-app.yaml` 파일에서 `{{PUBLIC_SAMPLE_APP_IMAGE}}`를 대체하여 이미지를 방금 푸시한 이미지로 변경합니다.

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml
   kubectl apply -f prometheus-sample-app.yaml
   ```

1. 다음 명령을 입력하여 샘플 앱이 시작되었는지 확인합니다. 명령 출력의 `NAME` 열에 `prometheus-sample-app`이 표시됩니다.

   ```
   kubectl get all -n aoc-prometheus-pipeline-demo
   ```

1. ADOT Collector의 기본 인스턴스를 시작합니다. 이렇게 하려면 먼저 다음 명령을 입력하여 ADOT Collector의 Kubernetes 구성을 끌어옵니다.

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml
   ```

   그런 다음, 템플릿 파일을 편집하여 Amazon Managed Service for Prometheus 워크스페이스에 대한 **remote\$1write** 엔드포인트를 `YOUR_ENDPOINT`로 바꾸고 리전을 `YOUR_REGION`으로 바꿉니다. 워크스페이스 세부 정보를 확인할 때 Amazon Managed Service for Prometheus 콘솔에 표시되는 **remote\$1write** 엔드포인트를 사용합니다.

   또한 Kubernetes 구성의 `YOUR_ACCOUNT_ID` 서비스 계정 섹션에서 AWS 계정 ID로 변경해야 합니다.

   이 예제에서 ADOT Collector 구성은 주석(`scrape=true`)을 사용하여 스크래핑할 대상 엔드포인트를 알려줍니다. 이를 통해 ADOT Collector는 샘플 앱 엔드포인트를 클러스터의 kube-system 엔드포인트와 구별할 수 있습니다. 다른 샘플 앱을 스크래핑하려는 경우 레이블 재지정 구성에서 이 앱을 제거할 수 있습니다.

1. 다음 명령을 입력하여 ADOT Collector를 배포합니다.

   ```
   kubectl apply -f prometheus-daemonset.yaml
   ```

1. 다음 명령을 입력하여 ADOT Collector가 시작되었는지 확인합니다. `NAMESPACE` 열에서 `adot-col`을 찾아봅니다.

   ```
   kubectl get pods -n adot-col
   ```

1. 로깅 내보내기를 사용하여 파이프라인이 작동하는지 확인합니다. 예제 템플릿은 로깅 내보내기와 이미 통합되어 있습니다. 다음 명령을 입력합니다.

   ```
   kubectl get pods -A
   kubectl logs -n adot-col name_of_your_adot_collector_pod
   ```

   샘플 앱에서 스크래핑한 지표 중 일부는 다음 예와 같습니다.

   ```
   Resource labels:
        -> service.name: STRING(kubernetes-service-endpoints)
        -> host.name: STRING(192.168.16.238)
        -> port: STRING(8080)
        -> scheme: STRING(http)
   InstrumentationLibraryMetrics #0
   Metric #0
   Descriptor:
        -> Name: test_gauge0
        -> Description: This is my gauge
        -> Unit: 
        -> DataType: DoubleGauge
   DoubleDataPoints #0
   StartTime: 0
   Timestamp: 1606511460471000000
   Value: 0.000000
   ```

1. Amazon Managed Service for Prometheus가 지표를 수신했는지 테스트하려면 `awscurl`을 사용합니다. 이 도구를 사용하면 AWS Sigv4 인증을 사용하여 명령줄을 통해 HTTP 요청을 보낼 수 있으므로 Amazon Managed Service for Prometheus에서 쿼리할 수 있는 올바른 권한으로 로컬에서 자격 AWS 증명을 설정해야 합니다. 설치에 대한 지침은 [awscurl](https://github.com/okigan/awscurl)을 `awscurl`참조하세요.

   다음 명령에서 `AMP_REGION`과 `AMP_ENDPOINT`를 사용자의 Amazon Managed Service for Prometheus WorkSpace에 대한 정보로 바꿉니다.

   ```
   awscurl --service="aps" --region="AMP_REGION" "https://AMP_ENDPOINT/api/v1/query?query=adot_test_gauge0"
   {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}
   ```

   응답으로 지표가 수신되면 파이프라인 설정이 성공적으로 완료되었고 지표가 샘플 앱에서 Amazon Managed Service for Prometheus로 성공적으로 전파되었음을 의미합니다.

**정리**

이 데모를 정리하려면 다음 명령을 입력합니다.

```
kubectl delete namespace aoc-prometheus-pipeline-demo
kubectl delete namespace adot-col
```

## 고급 구성
<a name="AMP-otel-advanced"></a>

Prometheus Receiver는 Prometheus 설명서의 [구성](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)에 설명된 Prometheus 스크래핑 및 레이블 재지정 구성의 전체 세트를 지원합니다. 이러한 구성을 ADOT Collector 구성에 직접 붙여 넣을 수 있습니다.

Prometheus Receiver의 구성에는 서비스 검색, 스크래핑 구성 및 레이블 재지정 구성이 포함됩니다. 수신기 구성은 다음과 같습니다.

```
receivers:
  prometheus:
    config:
      [[Your Prometheus configuration]]
```

다음은 예제 구성입니다.

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 1m
        scrape_timeout: 10s
        
      scrape_configs:
      - job_name: kubernetes-service-endpoints
        sample_limit: 10000
        kubernetes_sd_configs:
        - role: endpoints
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecure_skip_verify: true
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
```

기존 Prometheus 구성이 있는 경우 값이 환경 변수로 바뀌지 않도록 `$` 문자를 `$$`로 바꿔야 합니다. \$1이 작업은 relabel\$1configurations의 대체 값에 특히 중요합니다. 예를 들어 다음과 같이 relabel\$1configuration으로 시작하는 경우

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: ${1}://${2}${3}
  target_label: __param_target
```

다음과 같이 됩니다.

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: $${1}://${2}${3}
  target_label: __param_target
```

**Prometheus Remote Write Exporter 및 Sigv4 Authentication Extension**

Prometheus Remote Write Exporter와 Sigv4 Authentication Extension의 구성은 Prometheus Receiver보다 간단합니다. 파이프라인의 이 단계에서는 이미 지표가 수집되었으며 이 데이터를 Amazon Managed Service for Prometheus로 내보낼 준비가 되었습니다. Amazon Managed Service for Prometheus와 통신하기 위한 성공적인 구성의 최소 요구 사항은 다음 예제에 나와 있습니다.

```
extensions:
  sigv4auth:
    service: "aps"
    region: "user-region"
exporters:
  prometheusremotewrite:
    endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write"
    auth:
      authenticator: "sigv4auth"
```

이 구성은 기본 AWS 자격 증명 체인의 AWS 자격 증명을 사용하여 AWS SigV4에서 서명한 HTTPS 요청을 보냅니다. 자세한 내용은 [AWS SDK for Go구성](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) 섹션을 참조하세요. 서비스를 `aps`로 지정해야 합니다.

배포 방법에 관계없이 ADOT 수집기는 기본 AWS 자격 증명 체인에 나열된 옵션 중 하나에 액세스할 수 있어야 합니다. Sigv4 Authentication Extension은에 의존 AWS SDK for Go 하며 이를 사용하여 자격 증명을 가져오고 인증합니다. 이러한 보안 인증에 Amazon Managed Service for Prometheus에 대한 원격 쓰기 권한이 있는지 확인해야 합니다.

# AWS Distro for Open Telemetry를 사용하여 Amazon ECS에서 지표 수집 설정
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS"></a>

이 섹션에서는 AWS Distro for Open Telemetry(ADOT)를 사용하여 Amazon Elastic Container Service(Amazon ECS)에서 지표를 수집하여 Amazon Managed Service for Prometheus에 수집하는 방법을 설명합니다. 또한 Amazon Managed Grafana에서 지표를 시각화하는 방법도 설명합니다.

## 사전 조건
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-prereq"></a>

**중요**  
시작하기 전에 기본 설정이 적용된 AWS Fargate 클러스터의 Amazon ECS 환경, Amazon Managed Service for Prometheus 워크스페이스, Amazon Managed Grafana 워크스페이스가 있어야 합니다. 컨테이너 워크로드, Amazon Managed Service for Prometheus, Amazon Managed Grafana에 대해 잘 알고 있다고 가정합니다.

자세한 내용은 다음 링크를 참조하세요.
+ 기본 설정이 적용된 Fargate 클러스터에서 Amazon ECS 환경을 생성하는 방법에 대한 자세한 내용은 **Amazon ECS 개발자 안내서의 [클러스터 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)을 참조하세요.
+ Amazon Managed Service for Prometheus 워크스페이스를 생성하는 방법에 대한 자세한 내용은 **Amazon Managed Service for Prometheus 사용 설명서에서 [워크스페이스 생성](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)을 참조하세요.
+ Amazon Managed Grafana 워크스페이스를 생성하는 방법에 대한 자세한 내용은 **Amazon Managed Grafana 사용 설명서에서 [워크스페이스 생성](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-create-workspace.html)을 참조하세요.

## 1단계: 사용자 지정 ADOT Collector 컨테이너 이미지 정의
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-create"></a>

다음 구성 파일을 템플릿으로 사용하여 고유한 ADOT Collector 컨테이너 이미지를 정의합니다. *my-remote-URL* 및 *my-region*을 각각 `endpoint` 및 `region` 값으로 바꿉니다. 구성을 **adot-config.yaml이라는 파일에 저장합니다.

**참고**  
이 구성에서는 `sigv4auth` 확장 프로그램을 사용하여 Amazon Managed Service for Prometheus에 대한 호출을 인증합니다. `sigv4auth` 구성에 대한 자세한 내용은 GitHub의 [Authenticator - Sigv4](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension)를 참조하세요.

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 15s
        scrape_timeout: 10s
      scrape_configs:
      - job_name: "prometheus"
        static_configs:
        - targets: [ 0.0.0.0:9090 ]
  awsecscontainermetrics:
    collection_interval: 10s
processors:
  filter:
    metrics:
      include:
        match_type: strict
        metric_names:
          - ecs.task.memory.utilized
          - ecs.task.memory.reserved
          - ecs.task.cpu.utilized
          - ecs.task.cpu.reserved
          - ecs.task.network.rate.rx
          - ecs.task.network.rate.tx
          - ecs.task.storage.read_bytes
          - ecs.task.storage.write_bytes
exporters:
  prometheusremotewrite:
    endpoint: my-remote-URL
    auth:
      authenticator: sigv4auth
  logging:
    loglevel: info
extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679
  sigv4auth:
    region: my-region
    service: aps
service:
  extensions: [pprof, zpages, health_check, sigv4auth]
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [logging, prometheusremotewrite]
    metrics/ecs:
      receivers: [awsecscontainermetrics]
      processors: [filter]
      exporters: [logging, prometheusremotewrite]
```

## 2단계: ADOT Collector 컨테이너 이미지를 Amazon ECR 리포지토리에 푸시
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-push"></a>

Dockerfile을 사용하여 컨테이너 이미지를 생성하고 Amazon Elastic Container Registry(ECR) 리포지토리에 푸시합니다.

1. Dockerfile을 빌드하여 컨테이너 이미지를 복사하고 OTEL 도커 이미지에 추가합니다.

   ```
   FROM public.ecr.aws/aws-observability/aws-otel-collector:latest
   COPY adot-config.yaml /etc/ecs/otel-config.yaml
   CMD ["--config=/etc/ecs/otel-config.yaml"]
   ```

1. Amazon ECR 리포지토리를 생성합니다.

   ```
   # create repo:
   COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ 
                                  --query repository.repositoryUri --output text)
   ```

1. 컨테이너 이미지를 생성합니다.

   ```
   # build ADOT collector image:
   docker build -t $COLLECTOR_REPOSITORY:ecs .
   ```
**참고**  
여기서는 컨테이너가 실행될 환경과 동일한 환경에서 컨테이너를 빌드한다고 가정합니다. 그렇지 않은 경우 이미지를 빌드할 때 `--platform` 파라미터를 사용해야 할 수 있습니다.

1. Amazon ECR 리포지토리에 로그인합니다. *my-region*을 `region` 값으로 바꿉니다.

   ```
   # sign in to repo:
   aws ecr get-login-password --region my-region | \
           docker login --username AWS --password-stdin $COLLECTOR_REPOSITORY
   ```

1. 컨테이너 이미지를 푸시합니다.

   ```
   # push ADOT collector image:
   docker push $COLLECTOR_REPOSITORY:ecs
   ```

## 3단계: Amazon Managed Service for Prometheus를 스크래핑할 Amazon ECS 태스크 정의 생성
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-task"></a>

Amazon Managed Service for Prometheus를 스크래핑할 Amazon ECS 태스크 정의를 생성합니다. 태스크 정의에는 이름이 `adot-collector`인 컨테이너와 이름이 `prometheus`인 컨테이너가 포함되어야 합니다. `prometheus`는 지표를 생성하고 `adot-collector`는 `prometheus`를 스크래핑합니다.

**참고**  
Amazon Managed Service for Prometheus는 서비스로 실행되며 컨테이너에서 지표를 수집합니다. 이 경우 컨테이너는 Prometheus를 로컬에서 에이전트 모드로 실행하여 로컬 지표는 Amazon Managed Service for Prometheus로 전송됩니다.

**예제: 태스크 정의**

다음은 태스크 정의의 모양을 보여 주는 예제입니다. 이 예제를 템플릿으로 사용하여 자체 태스크 정의를 생성할 수 있습니다. `adot-collector`의 `image` 값을 리포지토리 URL 및 이미지 태그(`$COLLECTOR_REPOSITORY:ecs`)로 바꿉니다. `adot-collector` 및 `prometheus`의 `region` 값을 `region` 값으로 바꿉니다.

```
{
  "family": "adot-prom",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "adot-collector",
      "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-adot-collector",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "prometheus",
      "image": "prom/prometheus:main",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-prom",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "1024"
}
```

## 4단계: Amazon Managed Service for Prometheus에 액세스할 수 있는 작업 권한 부여
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-attach"></a>

스크레이핑된 지표를 Amazon Managed Service for Prometheus로 보내려면 Amazon ECS 태스크에 AWS API 작업을 직접 호출할 수 있는 올바른 권한이 있어야 합니다. 태스크에 대한 IAM 역할을 생성하고 이 역할에 `AmazonPrometheusRemoteWriteAccess` 정책을 연결해야 합니다. 이 역할을 생성하고 정책을 연결하는 방법에 대한 자세한 내용은 [태스크에 대한 IAM 역할 및 정책 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)을 참조하세요.

`AmazonPrometheusRemoteWriteAccess`를 IAM 역할에 연결하고 해당 역할을 태스크에 사용하면 Amazon ECS에서 스크래핑한 지표를 Amazon Managed Service for Prometheus로 보낼 수 있습니다.

## 5단계: Amazon Managed Grafana에서 지표 시각화
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-vis"></a>

**중요**  
시작하기 전에 Amazon ECS 태스크 정의에서 Fargate 태스크를 실행해야 합니다. 그렇지 않으면 Amazon Managed Service for Prometheus에서 지표를 사용할 수 없습니다.

1. Amazon Managed Grafana 워크스페이스의 탐색 창에서 AWS 아이콘 아래의 **데이터 소스를** 선택합니다.

1. **데이터 소스** 탭의 **서비스**에서 **Amazon Managed Service for Prometheus**를 선택하고 **기본 리전**을 선택합니다.

1. **데이터 소스 추가**를 선택합니다.

1. `ecs` 및 `prometheus` 접두사를 사용하여 지표를 쿼리하고 확인합니다.

# 원격 쓰기를 사용한 Amazon EC2 인스턴스에서의 지표 수집 설정
<a name="AMP-onboard-ingest-metrics-remote-write-EC2"></a>

이 섹션에서는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 원격 쓰기로 Prometheus 서버를 실행하는 방법을 설명합니다. Go로 작성된 데모 애플리케이션에서 지표를 수집한 후 Amazon Managed Service for Prometheus 워크스페이스로 보내는 방법을 설명합니다.

## 사전 조건
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-prereq"></a>

**중요**  
시작하기 전에 Prometheus v2.26 이상을 설치해야 합니다. Prometheus, Amazon EC2 및 Amazon Managed Service for Prometheus에 대해 잘 알고 있다고 가정합니다. Prometheus 설치 방법에 대한 자세한 내용은 Prometheus 웹 사이트에서 [시작하기](https://prometheus.io/docs/prometheus/latest/getting_started/)를 참조하세요.

Amazon EC2 또는 Amazon Managed Service for Prometheus에 익숙하지 않은 경우 먼저 다음 섹션을 읽는 것이 좋습니다.
+ [Amazon Elastic Compute Cloud란?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)
+ [Amazon Managed Service for Prometheus란?](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html)

## Amazon EC2의 IAM 역할 생성
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-IAM"></a>

지표를 스트리밍하려면 먼저 AWS 관리형 정책 **AmazonPrometheusRemoteWriteAccess**를 사용하여 IAM 역할을 생성해야 합니다. 그런 다음, 역할과 함께 인스턴스를 시작하고 지표를 Amazon Managed Service for Prometheus WorkSpace로 스트리밍할 수 있습니다.

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

1. 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

1. 신뢰할 수 있는 엔터티 유형에서 **AWS 서비스**를 선택합니다. 사용 사례로 **EC2**를 선택합니다. **다음: 권한**을 선택합니다.

1. 검색 창에 **AmazonPrometheusRemoteWriteAccess**를 입력합니다. **정책 이름**으로 **AmazonPrometheusRemoteWriteAccess**를 선택한 다음, **정책 연결**을 선택합니다. **다음: 태그**를 선택합니다.

1. (선택 사항) IAM 역할을 위한 IAM 태그를 생성합니다. **다음: 검토**를 선택합니다.

1. 역할의 이름을 입력합니다. **정책 생성**을 선택합니다.

## Amazon EC2 인스턴스 시작하기
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-instance"></a>

Amazon EC2 인스턴스를 시작하려면 **Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서에서 [인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#launch-instance-with-role)의 지침을 따르세요.

## 데모 애플리케이션 실행
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-demo"></a>

IAM 역할을 생성하고 역할이 있는 EC2 인스턴스를 시작한 후 데모 애플리케이션을 실행하여 작동하는지 확인할 수 있습니다.

**데모 애플리케이션 및 테스트 지표를 실행하려면**

1. 다음 템플릿을 사용하여 `main.go`라는 Go 파일을 생성합니다.

   ```
   package main
   
   import (
       "github.com/prometheus/client_golang/prometheus/promhttp"
       "net/http"
   )
   
   func main() {
       http.Handle("/metrics", promhttp.Handler())
   
       http.ListenAndServe(":8000", nil)
   }
   ```

1. 다음 명령을 실행하여 올바른 종속성을 설치합니다.

   ```
   sudo yum update -y
   sudo yum install -y golang
   go get github.com/prometheus/client_golang/prometheus/promhttp
   ```

1. 데모 애플리케이션을 실행합니다.

   ```
   go run main.go
   ```

   데모 애플리케이션은 포트 8000에서 실행되어야 하며 노출된 모든 Prometheus 지표를 표시합니다. 다음은 이러한 지표의 예입니다.

   ```
   curl -s http://localhost:8000/metrics 
   ...
   process_max_fds 4096# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gauge
   process_open_fds 10# HELP process_resident_memory_bytes Resident memory size in bytes.# TYPE process_resident_memory_bytes gauge
   process_resident_memory_bytes 1.0657792e+07# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.# TYPE process_start_time_seconds gauge
   process_start_time_seconds 1.61131955899e+09# HELP process_virtual_memory_bytes Virtual memory size in bytes.# TYPE process_virtual_memory_bytes gauge
   process_virtual_memory_bytes 7.77281536e+08# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.# TYPE process_virtual_memory_max_bytes gauge
   process_virtual_memory_max_bytes -1# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.# TYPE promhttp_metric_handler_requests_in_flight gauge
   promhttp_metric_handler_requests_in_flight 1# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.# TYPE promhttp_metric_handler_requests_total counter
   promhttp_metric_handler_requests_total{code="200"} 1
   promhttp_metric_handler_requests_total{code="500"} 0
   promhttp_metric_handler_requests_total{code="503"} 0
   ```

## Amazon Managed Service for Prometheus WorkSpace 생성
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-workspace"></a>

Amazon Managed Service for Prometheus WorkSpace를 생성하려면 Amazon Managed Service for Prometheus 사용 설명서에서 [WorkSpace 생성](AMP-create-workspace.md)의 지침을 따르세요.

## Prometheus 서버 실행
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-server"></a>

1. 다음 예제 YAML 파일을 템플릿으로 사용하여 `prometheus.yaml`이라는 새 파일을 생성합니다. `url`의 경우 *my-region*을 리전 값으로 바꾸고 *my-workspace-id*를 Amazon Managed Service for Prometheus에서 생성한 워크스페이스 ID로 바꿉니다. `region`의 경우 *my-region*을 리전 값으로 바꿉니다.

   **예제: YAML 파일**

   ```
   global:
     scrape_interval: 15s
     external_labels:
       monitor: 'prometheus'
   
   scrape_configs:
     - job_name: 'prometheus'
       static_configs:
         - targets: ['localhost:8000']
   
   remote_write:
     -
       url: https://aps-workspaces.my-region.amazonaws.com/workspaces/my-workspace-id/api/v1/remote_write
       queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
       sigv4:
            region: my-region
   ```

1. Prometheus 서버를 실행하여 데모 애플리케이션의 지표를 Amazon Managed Service for Prometheus 워크스페이스로 전송합니다.

   ```
   prometheus --config.file=prometheus.yaml
   ```

이제 Prometheus 서버가 데모 애플리케이션의 지표를 Amazon Managed Service for Prometheus WorkSpace로 전송합니다.