

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

# Amazon Managed Service for Prometheus 워크스페이스에 지표 수집
<a name="AMP-ingest-methods"></a>

이러한 지표를 쿼리하거나 지표에 대한 알림을 보내려면 먼저 Amazon Managed Service for Prometheus 워크스페이스에 지표를 수집해야 합니다. 이 섹션에서는 지표가 WorkSpace에 수집되도록 설정하는 방법을 설명합니다.

**참고**  
워크스페이스에 수집된 지표는 기본적으로 150일 동안 저장되고 그런 후에 자동으로 삭제됩니다. 워크스페이스를 최대 1,095일(3년)까지 구성하여 보존 기간을 조정할 수 있습니다. 자세한 내용은 [워크스페이스 구성](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-workspace-configuration.html)을 참조하세요.

Amazon Managed Service for Prometheus WorkSpace에 지표를 수집하는 방법으로는 두 가지 옵션이 있습니다.
+ ** AWS 관리형 수집기 사용** - Amazon Managed Service for Prometheus는 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 지표를 자동으로 *스크레이*프할 수 있는 완전 관리형 에이전트리스 스크레이퍼를 제공합니다. 스크래핑은 Prometheus 호환 엔드포인트에서 지표를 자동으로 가져옵니다.
+ **고객 관리형 수집기 사용** - 자체 수집기를 관리할 수 있는 다양한 옵션이 있습니다. 가장 일반적인 수집기 중 두 가지는 Prometheus 인스턴스를 직접 설치하거나, 에이전트 모드에서 실행하거나, AWS Distro for OpenTelemetry를 사용하는 것입니다. 이러한 수집기는 다음 섹션에 자세히 설명되어 있습니다.

  수집기는 Prometheus 원격 쓰기 기능을 사용하여 Amazon Managed Service for Prometheus에 지표를 전송합니다. 자체 애플리케이션에서 Prometheus 원격 쓰기 기능을 사용하여 Amazon Managed Service for Prometheus로 지표를 직접 보낼 수 있습니다. 원격 쓰기를 직접 사용하는 방법 및 원격 쓰기 구성에 대한 자세한 내용은 Prometheus 설명서의 [remote\$1write](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write)를 참조하세요.

**Topics**
+ [

# AWS 관리형 수집기를 사용하여 지표 수집
](AMP-collector.md)
+ [

# 고객 관리형 수집기
](self-managed-collectors.md)

# AWS 관리형 수집기를 사용하여 지표 수집
<a name="AMP-collector"></a>

Amazon Managed Service for Prometheus의 일반적인 사용 사례는 Amazon Elastic Kubernetes Service(Amazon EKS)에서 관리되는 Kubernetes 클러스터를 모니터링하는 것입니다. Kubernetes 클러스터와 Amazon EKS 내에서 실행되는 많은 애플리케이션은 Prometheus 호환 스크레이퍼가 액세스할 수 있도록 지표를 자동으로 내보냅니다.

**참고**  
Amazon EKS는 클러스터 내에서 API 서버 지표, `kube-controller-manager` 지표 및 `kube-scheduler` 지표를 제공합니다. Kubernetes 환경에서 실행되는 다른 많은 기술 및 애플리케이션도 Prometheus 호환 지표를 제공합니다. 체계적으로 문서화된 내보내기 목록은 Prometheus 문서에서 [내보내기 및 통합](https://prometheus.io/docs/instrumenting/exporters/)을 참조하세요.

Amazon Managed Service for Prometheus는 에이전트 없는 완전 관리형 스크레이퍼 또는 *수집기*를 제공하여 Prometheus 호환 지표를 자동으로 검색하고 가져옵니다. 에이전트나 스크레이퍼를 관리, 설치, 패치 또는 유지 관리할 필요가 없습니다. Amazon Managed Service for Prometheus 수집기는 Amazon EKS 클러스터에 대해 신뢰할 수 있고 안정적이며 가용성 높고 자동으로 확장되는 지표 모음을 제공합니다. Amazon Managed Service for Prometheus 관리형 수집기는 EC2 및 Fargate를 비롯한 Amazon EKS 클러스터와 함께 작동합니다.

Amazon Managed Service for Prometheus 수집기는 스크레이퍼를 생성할 때 지정된 서브넷별로 탄력적 네트워크 인터페이스(ENI)를 생성합니다. 수집기는 이러한 ENI를 통해 지표를 스크래핑하고 `remote_write`를 사용하여 VPC 엔드포인트를 통해 Amazon Managed Service for Prometheus WorkSpace로 데이터를 푸시합니다. 스크래핑한 데이터는 퍼블릭 인터넷을 통해 전송되지 않습니다.

다음 주제에서는 Amazon EKS 클러스터에서 Amazon Managed Service for Prometheus 수집기를 사용하는 방법 및 수집된 지표에 대한 자세한 정보를 제공합니다.

**Topics**
+ [

# Amazon EKS용 관리형 수집기 설정
](AMP-collector-how-to.md)
+ [

# Amazon MSK용 관리형 Prometheus 수집기 설정
](prom-msk-integration.md)
+ [

# Prometheus 호환 지표란 무엇입니까?
](prom-compatible-metrics.md)
+ [

# 제공형 로그를 사용하여 수집기 모니터링
](AMP-collector-vended-logs.md)

# Amazon EKS용 관리형 수집기 설정
<a name="AMP-collector-how-to"></a>

Amazon Managed Service for Prometheus 수집기를 사용하려면 Amazon EKS 클러스터에서 지표를 검색하고 가져오는 스크레이퍼를 생성해야 합니다. Amazon Managed Streaming for Apache Kafka와 통합되는 스크레이퍼를 생성할 수도 있습니다. 자세한 내용은 [Amazon MSK 통합](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-msk-integration.html)을 참조하세요.
+ Amazon EKS 클러스터 생성의 일부로 스크레이퍼를 생성할 수 있습니다. 스크레이퍼 생성을 포함한 Amazon EKS 클러스터를 생성하는 방법에 대한 자세한 내용은 Amazon EKS 사용 설명서의 [Amazon EKS 클러스터 생성](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)을 참조하세요.**
+  AWS API를 사용하거나를 사용하여 프로그래밍 방식으로 자체 스크레이퍼를 생성할 수 있습니다 AWS CLI.

Amazon Managed Service for Prometheus 수집기는 Prometheus 호환 지표를 스크래핑합니다. Prometheus 호환 지표에 대한 자세한 내용은 [Prometheus 호환 지표란 무엇입니까?](prom-compatible-metrics.md) 섹션을 참조하세요. Amazon EKS 클러스터는 API 서버에 대한 지표를 제공합니다. Kubernetes 버전이 `1.28` 이상인 Amazon EKS 클러스터의 경우 `kube-scheduler` 및 `kube-controller-manager`에 대한 지표도 제공합니다. 자세한 내용은 *Amazon EKS 사용 설명서*에서 [컨트롤 플레인 원시 지표를 Prometheus 형식으로 가져오기](https://docs.aws.amazon.com/eks/latest/userguide/view-raw-metrics.html#scheduler-controller-metrics)를 참조하세요.

**참고**  
클러스터에서 지표를 스크래핑하면 네트워크 사용에 대한 요금이 부과될 수 있습니다. 이러한 비용을 최적화하는 한 가지 방법은 제공된 지표(예: gzip 사용)를 압축하도록 `/metrics` 엔드포인트를 구성하여 네트워크를 통해 이동해야 하는 데이터를 줄이는 것입니다. 이를 수행하는 방법은 지표를 제공하는 애플리케이션 또는 라이브러리에 따라 달라집니다. 일부 라이브러리는 기본적으로 gzip입니다.

다음 주제에서는 스크레이퍼를 생성, 관리 및 구성하는 방법을 설명합니다.

**Topics**
+ [

## 스크레이퍼 생성
](#AMP-collector-create)
+ [

## Amazon EKS 클러스터 구성
](#AMP-collector-eks-setup)
+ [

## 스크레이퍼 찾기 및 삭제
](#AMP-collector-list-delete)
+ [

## Scraper 구성
](#AMP-collector-configuration)
+ [

## 스크레이퍼 구성 문제 해결
](#AMP-collector-troubleshoot)
+ [

## 스크레이퍼 제한 사항
](#AMP-collector-limits)

## 스크레이퍼 생성
<a name="AMP-collector-create"></a>

Amazon Managed Service for Prometheus 수집기는 Amazon EKS 클러스터에서 지표를 검색하고 수집하는 스크레이퍼로 구성됩니다. Amazon Managed Service for Prometheus가 스크레이퍼를 관리하므로 인스턴스, 에이전트 또는 스크레이퍼를 직접 관리할 필요 없이 필요한 확장성, 보안 및 신뢰성을 제공합니다.

스크레이퍼를 생성하는 방법은 세 가지입니다.
+ [Amazon EKS 콘솔을 통해 Amazon EKS 클러스터를 생성](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)하고 Prometheus 지표를 활성화하도록 선택하면 스크레이퍼가 자동으로 생성됩니다.
+ 기존 클러스터의 경우 Amazon EKS 콘솔에서 스크레이퍼를 생성할 수 있습니다. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home#/clusters)에서 클러스터를 연 다음 **관찰성** 탭에서 **스크레이퍼 추가**를 선택합니다.

  사용 가능한 설정에 대한 자세한 내용은 *Amazon EKS 사용 설명서*에서 [Prometheus 지표 켜기](https://docs.aws.amazon.com/eks/latest/userguide/prometheus.html#turn-on-prometheus-metrics)를 참조하세요.
+  AWS API 또는를 사용하여 스크레이퍼를 생성할 수 있습니다 AWS CLI.

  이러한 옵션은 다음 절차에서 설명합니다.

나만의 스크레이퍼를 만들기 위한 몇 가지 사전 조건은 다음과 같습니다.
+ Amazon EKS 클러스터가 생성되어 있어야 합니다.
+ Amazon EKS 클러스터에 [클러스터 엔드포인트 액세스 제어](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)가 프라이빗 액세스를 포함하도록 설정되어 있어야 합니다. 프라이빗 및 퍼블릭을 포함할 수 있지만 프라이빗은 반드시 포함해야 합니다.
+ Amazon EKS 클러스터가 상주하는 Amazon VPC에 [DNS가 활성화](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)되어 있어야 합니다.

**참고**  
클러스터는 Amazon 리소스 이름(ARN)으로 스크레이퍼와 연결됩니다. 클러스터를 삭제한 다음 이름이 같은 새 클러스터를 생성하면 ARN이 새 클러스터에 재사용됩니다. 이로 인해 스크레이퍼는 새 클러스터에 대한 지표를 수집하려고 시도합니다. 클러스터 삭제와 별도로 [스크레이퍼를 삭제](#AMP-collector-list-delete)합니다.

------
#### [ AWS API ]

** AWS API를 사용하여 스크레이퍼를 생성하려면**

`CreateScraper` API 작업을 사용하여 AWS API로 스크레이퍼를 생성합니다. 다음 예제에서는 `us-west-2` 리전에서 스크레이퍼를 생성합니다. AWS 계정, 워크스페이스, 보안 및 Amazon EKS 클러스터 정보를 자체 ID로 바꾸고 스크레이퍼에 사용할 구성을 제공해야 합니다.

**참고**  
보안 그룹 및 서브넷은 연결하려는 클러스터의 보안 그룹 및 서브넷으로 설정되어야 합니다.  
2개 이상의 가용 영역에 있는 2개 이상의 서브넷을 포함해야 합니다.

`scrapeConfiguration`은 base64로 인코딩된 Prometheus 구성 YAML 파일입니다. `GetDefaultScraperConfiguration` API 작업을 통해 범용 구성을 다운로드할 수 있습니다. `scrapeConfiguration`의 형식에 대한 자세한 정보는 [Scraper 구성](#AMP-collector-configuration) 섹션을 참조하세요.

```
POST /scrapers HTTP/1.1
Content-Length: 415 
Authorization: AUTHPARAMS
X-Amz-Date: 20201201T193725Z
User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6

{
    "alias": "myScraper",
    "destination":  {
        "ampConfiguration": {
            "workspaceArn": "arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id"
        }
    },
    "source": {
        "eksConfiguration": {
            "clusterArn": "arn:aws:eks:us-west-2:account-id:cluster/cluster-name",
            "securityGroupIds": ["sg-security-group-id"],
            "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"]
        }
    },
    "scrapeConfiguration": {
        "configurationBlob": <base64-encoded-blob>
    }
}
```

------
#### [ AWS CLI ]

** AWS CLI를 사용하여 스크레이퍼를 생성하려면**

 AWS CLI에서는 `create-scraper` 명령을 사용하여 스크레이퍼를 생성합니다. 다음 예제에서는 `us-west-2` 리전에서 스크레이퍼를 생성합니다. AWS 계정, 워크스페이스, 보안 및 Amazon EKS 클러스터 정보를 자체 ID로 바꾸고 스크레이퍼에 사용할 구성을 제공해야 합니다.

**참고**  
보안 그룹 및 서브넷은 연결하려는 클러스터의 보안 그룹 및 서브넷으로 설정되어야 합니다.  
2개 이상의 가용 영역에 있는 2개 이상의 서브넷을 포함해야 합니다.

`scrape-configuration`은 base64로 인코딩된 Prometheus 구성 YAML 파일입니다. `get-default-scraper-configuration` 명령을 통해 범용 구성을 다운로드할 수 있습니다. `scrape-configuration`의 형식에 대한 자세한 정보는 [Scraper 구성](#AMP-collector-configuration) 섹션을 참조하세요.

```
aws amp create-scraper \
  --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/cluster-name', securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \
  --scrape-configuration configurationBlob=<base64-encoded-blob> \
  --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"
```

------

다음은 AWS API와 함께 사용할 수 있는 스크레이퍼 작업의 전체 목록입니다.
+ [CreateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_CreateScraper.html) API 작업으로 스크레이퍼를 생성합니다.
+ [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 작업으로 기존 스크레이퍼를 나열합니다.
+ [UpdateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html) API 작업으로 스크레이퍼의 별칭, 구성 또는 대상을 업데이트합니다.
+ [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) API 작업으로 스크레이퍼를 삭제합니다.
+ [DescribeScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html) API 작업으로 스크레이퍼에 대한 자세한 내용을 확인합니다.
+ [GetDefaultScraperConfiguration](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_GetDefaultScraperConfiguration.html) API 작업으로 스크레이퍼의 범용 구성을 확보합니다.

**참고**  
스크래핑하려는 Amazon EKS 클러스터는 Amazon Managed Service for Prometheus가 지표에 액세스하는 것을 허용하도록 구성해야 합니다. 다음 주제에서는 클러스터를 구성하는 방법을 설명합니다.

### 교차 계정 설정
<a name="cross-account-remote-write"></a>

Amazon EKS 클러스터와 Amazon Managed Service for Prometheus 워크스페이스가 서로 다른 계정에 있을 때 교차 계정 스크레이퍼를 생성하려면 다음 절차를 따릅니다. 예를 들어 소스 계정 `account_id_source`에는 Amazon EKS 클러스터가 포함되어 있고, 대상 계정 `account_id_target`에는 Amazon Managed Service for Prometheus 워크스페이스가 포함되어 있다고 가정합니다.

**교차 계정 설정에서 스크레이퍼를 생성하려면**

1. 소스 계정에서 `arn:aws:iam::account_id_source:role/Source` 역할을 생성하고 다음 신뢰 정책을 추가합니다.

   ```
   {
       "Effect": "Allow",
       "Principal": {
       "Service": [
           "scraper.aps.amazonaws.com"
        ]
       },
       "Action": "sts:AssumeRole",
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "scraper_ARN"
           },
           "StringEquals": {
               "AWS:SourceAccount": "account_id"
           }
       }
   }
   ```

1. 소스(Amazon EKS 클러스터)와 대상(Amazon Managed Service for Prometheus 워크스페이스)의 모든 조합마다 `arn:aws:iam::account_id_target:role/Target` 역할을 생성하고 다음 신뢰 정책을 추가하여 [AmazonPrometheusRemoteWriteAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html) 권한을 부여해야 합니다.

   ```
   {
     "Effect": "Allow",
     "Principal": {
        "AWS": "arn:aws:iam::account_id_source:role/Source"
     },
     "Action": "sts:AssumeRole",
     "Condition": {
        "StringEquals": {
           "sts:ExternalId": "scraper_ARN"
         }
     }
   }
   ```

1. `--role-configuration` 옵션을 사용하여 스크레이퍼를 생성합니다.

   ```
   aws amp create-scraper \
     --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id_source:cluster/xarw,subnetIds=[subnet-subnet-id]}" \
     --scrape-configuration configurationBlob=<base64-encoded-blob> \
     --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id_target:workspace/ws-workspace-id'}"\
     --role-configuration '{"sourceRoleArn":"arn:aws:iam::account-id_source:role/Source", "targetRoleArn":"arn:aws:iam::account-id_target:role/Target"}'
   ```

1. 스크레이퍼 생성을 검증합니다.

   ```
   aws amp list-scrapers
   {
       "scrapers": [
           {
               "scraperId": "scraper-id",
               "arn": "arn:aws:aps:us-west-2:account_id_source:scraper/scraper-id",
               "roleArn": "arn:aws:iam::account_id_source:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraperInternal_cc319052-41a3-4",
               "status": {
                   "statusCode": "ACTIVE"
               },
               "createdAt": "2024-10-29T16:37:58.789000+00:00",
               "lastModifiedAt": "2024-10-29T16:55:17.085000+00:00",
               "tags": {},
               "source": {
                   "eksConfiguration": {
                       "clusterArn": "arn:aws:eks:us-west-2:account_id_source:cluster/xarw",
                       "securityGroupIds": [
                           "sg-security-group-id",
                           "sg-security-group-id"
                       ],
                       "subnetIds": [
                           "subnet-subnet_id"
                       ]
                   }
               },
               "destination": {
                   "ampConfiguration": {
                       "workspaceArn": "arn:aws:aps:us-west-2:account_id_target:workspace/ws-workspace-id"
                   }
               }
           }
       ]
   }
   ```

### RoleConfiguration 및 서비스 연결 역할 간 변경
<a name="changing-roles"></a>

Amazon Managed Service for Prometheus 워크스페이스에 쓰기 위해 `RoleConfiguration` 대신 서비스 연결 역할로 다시 전환하려면 `UpdateScraper`를 업데이트하고 스크레이퍼와 동일한 계정에 `RoleConfiguration` 없이 워크스페이스를 제공해야 합니다. 스크레이퍼에서 `RoleConfiguration`이 제거되고 서비스 연결 역할이 사용됩니다.

스크레이퍼와 동일한 계정에서 워크스페이스를 변경할 때 `RoleConfiguration`을 계속 사용하려면 `UpdateScraper`에 `RoleConfiguration`을 다시 제공해야 합니다.

### 고객 관리형 키로 활성화된 워크스페이스용 스크레이퍼 생성
<a name="setup-customer-managed-keys"></a>

[고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 사용하여 Amazon Managed Service for Prometheus 워크스페이스로 지표를 수집하는 스크레이퍼를 생성하려면 소스와 대상이 모두 동일한 계정으로 설정된 `--role-configuration`을 사용합니다.

```
aws amp create-scraper \
  --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/xarw,subnetIds=[subnet-subnet_id]}" \
  --scrape-configuration configurationBlob=<base64-encoded-blob> \
  --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"\
  --role-configuration '{"sourceRoleArn":"arn:aws:iam::account_id:role/Source", "targetRoleArn":"arn:aws:iam::account_id:role/Target"}'
```

### 스크레이퍼 생성 시 일반적인 오류
<a name="AMP-collector-create-errors"></a>

다음은 새 스크레이퍼를 만들 때 발생하는 가장 일반적인 문제입니다.
+ 필요한 AWS 리소스가 존재하지 않습니다. 지정된 *보안 그룹*, *서브넷* 및 *Amazon EKS 클러스터*가 있어야 합니다.
+ IP 주소 공간이 부족합니다. `CreateScraper` API에 전달하는 각 서브넷에 하나 이상의 IP 주소가 있어야 합니다.

## Amazon EKS 클러스터 구성
<a name="AMP-collector-eks-setup"></a>

Amazon EKS 클러스터는 스크레이퍼가 지표에 액세스하는 것을 허용하도록 구성해야 합니다. 이 구성에는 두 가지 옵션이 있습니다.
+ Amazon EKS *액세스 항목*을 사용하여 Amazon Managed Service for Prometheus 수집기에 클러스터에 대한 액세스 권한을 자동으로 제공합니다.
+ 관리형 지표 스크래핑을 위해 Amazon EKS 클러스터를 수동으로 구성합니다.

다음 주제에서는 각각에 대해 자세히 설명합니다.

### 액세스 항목이 포함된 스크레이퍼 액세스를 위해 Amazon EKS 구성
<a name="AMP-collector-eks-access-entry-setup"></a>

Amazon EKS에 대한 액세스 항목을 사용하는 것은 Amazon Managed Service for Prometheus에 클러스터에서 지표를 스크래핑할 수 있는 액세스 권한을 부여하는 가장 쉬운 방법입니다.

API 인증을 허용하도록 스크래핑 중인 Amazon EKS 클러스터를 구성해야 합니다. 클러스터 인증 모드는 `API` 또는 `API_AND_CONFIG_MAP`으로 설정해야 합니다. 이는 클러스터 세부 정보의 **액세스 구성** 탭에 있는 Amazon EKS 콘솔에서 볼 수 있습니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS 클러스터에서 IAM 역할 또는 사용자에게 Kubernetes 객체에 대한 액세스 허용](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)을 참조하세요.

클러스터를 생성할 때 또는 클러스터를 생성한 후 스크레이퍼를 생성할 수 있습니다.
+ **클러스터 생성 시** - [Amazon EKS 콘솔을 통해 Amazon EKS 클러스터를 생성](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)할 때(지침에 따라 클러스터의 일부로 스크레이퍼를 생성) 이 액세스를 구성할 수 있으며, 액세스 항목 정책이 자동으로 생성되어 Amazon Managed Service for Prometheus가 클러스터 지표에 액세스할 수 있습니다.
+ **클러스터가 생성된 후 추가** - Amazon EKS 클러스터가 이미 있는 경우 인증 모드를 `API` 또는 `API_AND_CONFIG_MAP`으로 설정합니다. 그러면 [Amazon Managed Service for Prometheus API 또는 CLI를 통해](#AMP-collector-create) 또는 Amazon EKS 콘솔을 통해 생성한 스크레이퍼에 대해 올바른 액세스 항목 정책이 자동으로 생성되며, 해당 스크레이퍼는 클러스터에 액세스할 수 있습니다.

**액세스 항목 정책 생성됨**

스크레이퍼를 생성하고 Amazon Managed Service for Prometheus가 액세스 항목 정책을 생성하도록 하면 다음 정책이 생성됩니다. 액세스 항목에 대한 자세한 내용은 *Amazon EKS 사용 설명서*의 [IAM 역할 또는 사용자에게 Kubernetes에 대한 액세스 허용](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)을 참조하세요.

```
{
    "rules": [
        {
            "effect": "allow",
            "apiGroups": [
                ""
            ],
            "resources": [
                "nodes",
                "nodes/proxy",
                "nodes/metrics",
                "services",
                "endpoints",
                "pods",
                "ingresses",
                "configmaps"
            ],
            "verbs": [
                "get",
                "list",
                "watch"
            ]
        },
        {
            "effect": "allow",
            "apiGroups": [
                "extensions",
                "networking.k8s.io"
            ],
            "resources": [
                "ingresses/status",
                "ingresses"
            ],
            "verbs": [
                "get",
                "list",
                "watch"
            ]
        },
        {
            "effect": "allow",
            "apiGroups": [
                "metrics.eks.amazonaws.com"
            ],
            "resources": [
                "kcm/metrics",
                "ksh/metrics"
            ],
            "verbs": [
                "get"
            ]
        },
        {
            "effect": "allow",
            "nonResourceURLs": [
                "/metrics"
            ],
            "verbs": [
                "get"
            ]
        }
    ]
}
```

### 스크레이퍼 액세스를 위해 Amazon EKS 수동 구성
<a name="AMP-collector-eks-manual-setup"></a>

`aws-auth ConfigMap`을 사용하여 kubernetes 클러스터에 대한 액세스를 제어하려는 경우에도 Amazon Managed Service for Prometheus 스크레이퍼에 지표에 대한 액세스 권한을 부여할 수 있습니다. 다음 단계에서는 Amazon Managed Service for Prometheus가 Amazon EKS 클러스터에서 지표를 스크래핑할 수 있는 액세스 권한을 부여합니다.

**참고**  
`ConfigMap` 및 액세스 항목에 대한 자세한 내용은 *Amazon EKS 사용 설명서*의 [IAM 역할 또는 사용자에게 Kubernetes에 대한 액세스 허용](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)을 참조하세요.

이 절차에서는 `kubectl` 및 AWS CLI를 사용합니다. `kubectl` 설치에 대한 자세한 내용은 *Amazon EKS 사용 설명서*의 [kubectl 설치](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)를 참조하세요.

**관리형 지표 스크래핑을 위해 Amazon EKS 클러스터를 수동으로 구성하려면**

1. 다음 텍스트를 사용하여 `clusterrole-binding.yml`이라는 파일을 생성합니다.

   ```
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: aps-collector-role
   rules:
     - apiGroups: [""]
       resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"]
       verbs: ["describe", "get", "list", "watch"]
     - apiGroups: ["extensions", "networking.k8s.io"]
       resources: ["ingresses/status", "ingresses"]
       verbs: ["describe", "get", "list", "watch"]
     - nonResourceURLs: ["/metrics"]
       verbs: ["get"]
     - apiGroups: ["metrics.eks.amazonaws.com"]
       resources: ["kcm/metrics", "ksh/metrics"]
       verbs: ["get"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: aps-collector-user-role-binding
   subjects:
   - kind: User
     name: aps-collector-user
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: ClusterRole
     name: aps-collector-role
     apiGroup: rbac.authorization.k8s.io
   ```

1. 클러스터에서 다음 명령을 실행합니다.

   ```
   kubectl apply -f clusterrole-binding.yml
   ```

   그러면 클러스터 역할 바인딩 및 규칙이 생성됩니다. 이 예제는 역할 이름으로 `aps-collector-role`을 사용하고, 사용자 이름으로 `aps-collector-user`를 사용합니다.

1. 다음 명령은 ID가 *scraper-id*인 스크레이퍼에 대한 정보를 제공합니다. 이 스크레이퍼는 이전 섹션의 명령을 사용하여 생성한 스크레이퍼입니다.

   ```
   aws amp describe-scraper --scraper-id scraper-id
   ```

1. `describe-scraper`의 결과에서 다음과 같은 형식의 `roleArn`을 찾습니다.

   ```
   arn:aws:iam::account-id:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_unique-id
   ```

   Amazon EKS에서는 이 ARN에 다른 형식이 필요합니다. 다음 단계에서 사용할 반환된 ARN의 형식을 조정해야 합니다. 다음 형식에 맞게 편집합니다.

   ```
   arn:aws:iam::account-id:role/AWSServiceRoleForAmazonPrometheusScraper_unique-id
   ```

   예를 들어 이 ARN은

   ```
   arn:aws:iam::111122223333:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
   ```

   다음과 같이 작성해야 합니다.

   ```
   arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
   ```

1. 이전 단계에서 수정한 `roleArn`과 클러스터 이름 및 리전을 사용하여 클러스터에서 다음 명령을 실행합니다.

   ```
   eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user
   ```

   이렇게 하면 스크레이퍼가 `clusterrole-binding.yml` 파일에서 생성한 역할과 사용자를 사용하여 클러스터에 액세스할 수 있습니다.

## 스크레이퍼 찾기 및 삭제
<a name="AMP-collector-list-delete"></a>

 AWS API 또는 AWS CLI 를 사용하여 계정의 스크레이퍼를 나열하거나 삭제할 수 있습니다.

**참고**  
최신 버전의 AWS CLI 또는 SDK를 사용하고 있는지 확인합니다. 최신 버전은 최신 특징과 기능 및 보안 업데이트도 제공합니다. 또는 항상 최신 명령줄 환경을 자동으로 제공하는 [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)을 사용합니다.

계정의 모든 스크레이퍼를 나열하려면 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 작업을 사용합니다.

또는를 사용하여 다음을 AWS CLI호출합니다.

```
aws amp list-scrapers --region aws-region
```

`ListScrapers`가 계정의 모든 스크레이퍼를 반환합니다. 예를 들면 다음과 같습니다.

```
{
    "scrapers": [
        {
            "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890",
            "arn": "arn:aws:aps:us-west-2:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890",
            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931",
            "status": {
                "statusCode": "DELETING"
            },
            "createdAt": "2023-10-12T15:22:19.014000-07:00",
            "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00",
            "tags": {},
            "source": {
                "eksConfiguration": {
                    "clusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster",
                    "securityGroupIds": [
                        "sg-1234abcd5678ef90"
                    ],
                    "subnetIds": [
                        "subnet-abcd1234ef567890", 
                        "subnet-1234abcd5678ab90"
                    ]
                }
            },
            "destination": {
                "ampConfiguration": {
                    "workspaceArn": "arn:aws:aps:us-west-2:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78"
                }
            }
        }
    ]
}
```

스크레이퍼를 삭제하려면 `ListScrapers` 작업을 사용하여 삭제하려는 스크레이퍼의 `scraperId`를 찾은 다음 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) 작업을 사용하여 삭제합니다.

또는를 사용하여 다음을 AWS CLI호출합니다.

```
aws amp delete-scraper --scraper-id scraperId
```

## Scraper 구성
<a name="AMP-collector-configuration"></a>

Prometheus 호환 스크레이퍼 구성을 사용하여 스크레이퍼가 지표를 검색하고 수집하는 방법을 제어할 수 있습니다. 예를 들어 지표가 WorkSpace로 전송되는 간격을 변경할 수 있습니다. 레이블 재지정을 사용하여 지표의 레이블을 동적으로 다시 작성할 수도 있습니다. 스크레이퍼 구성은 스크레이퍼 정의의 일부인 YAML 파일입니다.

새 스크레이퍼가 생성되면 API 호출에서 base64로 인코딩된 YAML 파일을 제공하여 구성을 지정합니다. Amazon Managed Service for Prometheus API에서 `GetDefaultScraperConfiguration` 작업이 포함된 범용 구성 파일을 다운로드할 수 있습니다.

스크레이퍼 구성을 수정하려면 `UpdateScraper` 작업을 사용하면 됩니다. 지표의 소스를 업데이트해야 하는 경우(예: 다른 Amazon EKS 클러스터로 업데이트) 스크레이퍼를 삭제한 후 새 소스로 다시 생성해야 합니다.

**지원되는 구성**

가능한 값에 대한 자세한 분석을 포함하여 스크레이퍼 구성 형식에 대한 자세한 내용은 Prometheus 설명서의 [구성](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)을 참조하세요. 글로벌 구성 옵션 및 `<scrape_config>` 옵션은 가장 일반적으로 필요한 옵션을 설명합니다.

Amazon EKS는 지원되는 유일한 서비스이므로 지원되는 유일한 서비스 검색 구성(`<*_sd_config>`)은 `<kubernetes_sd_config>`입니다.

허용되는 구성 섹션의 전체 목록은 다음과 같습니다.
+ `<global>`
+ `<scrape_config>`
+ `<static_config>`
+ `<relabel_config>`
+ `<metric_relabel_configs>`
+ `<kubernetes_sd_config>`

이러한 섹션 내의 제한 사항은 샘플 구성 파일 뒤에 나열됩니다.

**샘플 구성 파일**

다음은 스크래핑 간격이 30초인 샘플 YAML 구성 파일입니다. 이 샘플에는 kube API 서버 지표와 kube-controller-manager 및 kube-scheduler 지표에 대한 지원이 포함되어 있습니다. 자세한 내용은 *Amazon EKS 사용 설명서*에서 [컨트롤 플레인 원시 지표를 Prometheus 형식으로 가져오기](https://docs.aws.amazon.com/eks/latest/userguide/view-raw-metrics.html#scheduler-controller-metrics)를 참조하세요.

```
global:
   scrape_interval: 30s
   external_labels:
     clusterArn: apiserver-test-2
scrape_configs:
  - job_name: pod_exporter
    kubernetes_sd_configs:
      - role: pod
  - job_name: cadvisor
    scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - replacement: kubernetes.default.svc:443
        target_label: __address__
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
  # apiserver metrics
  - scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    job_name: kubernetes-apiservers
    kubernetes_sd_configs:
    - role: endpoints
    relabel_configs:
    - action: keep
      regex: default;kubernetes;https
      source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
  # kube proxy metrics
  - job_name: kube-proxy
    honor_labels: true
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - action: keep
      source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_pod_name
      separator: '/'
      regex: 'kube-system/kube-proxy.+'
    - source_labels:
      - __address__
      action: replace
      target_label: __address__
      regex: (.+?)(\\:\\d+)?
      replacement: $1:10249
  # Scheduler metrics
  - job_name: 'ksh-metrics'
    kubernetes_sd_configs:
    - role: endpoints
    metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics
    scheme: https
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
      action: keep
      regex: default;kubernetes;https
  # Controller Manager metrics
  - job_name: 'kcm-metrics'
    kubernetes_sd_configs:
    - role: endpoints
    metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics
    scheme: https
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
      action: keep
      regex: default;kubernetes;https
```

다음은 AWS 관리형 수집기에 적용되는 제한 사항입니다.
+ **스크래핑 간격** - 스크레이퍼 구성에서는 스크래핑 간격을 30초 미만으로 지정할 수 없습니다.
+ **대상** - `static_config`의 대상을 IP 주소로 지정해야 합니다.
+ **DNS 확인** - 대상 이름과 관련하여 이 구성에서 인식되는 유일한 서버 이름은 Kubernetes api 서버인 `kubernetes.default.svc`입니다. 다른 모든 시스템 이름은 IP 주소로 지정해야 합니다.
+ **권한 부여** - 권한이 필요하지 않은 경우 생략합니다. 필요한 경우 권한 부여는 `Bearer`이어야 하며 `/var/run/secrets/kubernetes.io/serviceaccount/token` 파일을 가리켜야 합니다. 즉, 사용하는 경우 권한 부여 섹션은 다음과 같아야 합니다.

  ```
      authorization:
        type: Bearer
        credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  ```
**참고**  
`type: Bearer`가 기본값이므로 생략할 수 있습니다.

## 스크레이퍼 구성 문제 해결
<a name="AMP-collector-troubleshoot"></a>

Amazon Managed Service for Prometheus 수집기는 자동으로 지표를 검색하고 스크래핑합니다. 하지만 Amazon Managed Service for Prometheus WorkSpace에 표시될 것으로 예상되는 지표가 표시되지 않는 경우 어떻게 문제를 해결할 수 있습니까?

**중요**  
Amazon EKS 클러스터에 대한 프라이빗 액세스가 활성화되어 있는지 확인합니다. 자세한 내용은 **Amazon EKS 사용 설명서에서 [클러스터 프라이빗 엔드포인트](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html#cluster-endpoint-private)를 참조하세요.

`up` 지표는 유용한 도구입니다. Amazon Managed Service for Prometheus 수집기가 발견한 각 엔드포인트에 대해 이 지표를 자동으로 제공합니다. 이 지표에는 수집기 내에서 발생하는 문제를 해결하는 데 도움이 되는 세 가지 상태가 있습니다.
+ `up`이 존재하지 않음 - 엔드포인트에 대한 `up` 지표가 없는 경우 수집기가 엔드포인트를 찾을 수 없었음을 의미합니다.

  엔드포인트가 확실히 있는 경우에도 수집기가 이를 찾지 못하는 데에는 여러 가지 이유가 있을 수 있습니다.
  + 스크레이프 구성을 조정해야 할 수 있습니다. `relabel_config` 검색을 조정해야 할 수 있습니다.
  + 검색에 사용된 `role`에 문제가 있을 수 있습니다.
  + Amazon EKS 클러스터에서 사용하는 Amazon VPC에 [DNS가 활성화](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)되어 있지 않아 수집기가 엔드포인트를 찾지 못할 수 있습니다.
+ `up`이 존재하지만 항상 0임 - `up`이 존재하지만 0인 경우 수집기는 엔드포인트를 검색할 수 있지만 Prometheus 호환 지표를 찾을 수 없습니다.

  이 경우 엔드포인트에 대한 `curl` 명령을 직접 사용해 볼 수 있습니다. 프로토콜(`http` 또는 `https`), 엔드포인트 또는 사용 중인 포트와 같이 세부 정보가 올바른지 확인할 수 있습니다. 또한 엔드포인트가 유효한 `200` 응답으로 응답하고 있고 Prometheus 형식을 따르는지 확인할 수 있습니다. 마지막으로 응답 본문은 허용되는 최대 크기보다 클 수 없습니다. ( AWS 관리형 수집기에 대한 제한은 다음 섹션을 참조하세요.)
+ `up`이 존재하고 0보다 큰 경우 - `up`이 존재하고 0보다 크면 지표가 Amazon Managed Service for Prometheus로 전송됩니다.

  Amazon Managed Service for Prometheus(또는 Amazon Managed Grafana와 같은 대체 대시보드)에서 올바른 지표를 찾고 있는지 확인합니다. curl을 다시 사용하여 `/metrics` 엔드포인트에서 예상 데이터를 확인할 수 있습니다. 또한 스크레이퍼당 엔드포인트 수와 같은 다른 한도를 초과하지 않았는지도 확인합니다. `count(up)`를 사용하여 `up` 지표 수를 확인함으로써 스크래핑되는 지표 엔드포인트 수를 확인할 수 있습니다.

## 스크레이퍼 제한 사항
<a name="AMP-collector-limits"></a>

Amazon Managed Service for Prometheus에서 제공하는 완전 관리형 스크레이퍼에는 몇 가지 제한이 있습니다.
+ **리전** - EKS 클러스터, 관리형 스크레이퍼 및 Amazon Managed Service for Prometheus WorkSpace가 모두 동일한 AWS 리전에 있어야 합니다.
+ **수집기** - 계정별로 리전당 최대 10개의 Amazon Managed Service for Prometheus 스크레이퍼를 보유할 수 있습니다.
**참고**  
[할당량 증가를 요청](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)하여 이 한도에 대한 증가를 요청할 수 있습니다.
+ **지표 응답** - 한 `/metrics` 엔드포인트 요청의 응답 본문은 50메가바이트(MB)를 초과할 수 없습니다.
+ **스크레이퍼당 엔드포인트** - 스크레이퍼당 최대 30,000개의 `/metrics` 엔드포인트를 스크래핑할 수 있습니다.
+ **스크래핑 간격** - 스크레이퍼 구성에서는 스크래핑 간격을 30초 미만으로 지정할 수 없습니다.

# Amazon MSK용 관리형 Prometheus 수집기 설정
<a name="prom-msk-integration"></a>

Amazon Managed Service for Prometheus 수집기를 사용하려면 Amazon Managed Streaming for Apache Kafka 클러스터에서 지표를 검색하고 가져오는 스크레이퍼를 생성해야 합니다. Amazon Elastic Kubernetes Service와 통합되는 스크레이퍼를 생성할 수도 있습니다. 자세한 내용은 [Amazon EKS 통합](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html)을 참조하세요.

## 스크레이퍼 생성
<a name="prom-msk-create-scraper"></a>

Amazon Managed Service for Prometheus 수집기는 Amazon MSK 클러스터에서 지표를 검색하고 수집하는 스크레이퍼로 구성됩니다. Amazon Managed Service for Prometheus가 스크레이퍼를 관리하므로 인스턴스, 에이전트 또는 스크레이퍼를 직접 관리할 필요 없이 필요한 확장성, 보안 및 신뢰성을 제공합니다.

다음 절차에 설명된 AWS CLI 대로 AWS API 또는를 사용하여 스크레이퍼를 생성할 수 있습니다.

나만의 스크레이퍼를 만들기 위한 몇 가지 사전 조건은 다음과 같습니다.
+ Amazon MSK 클러스터가 생성되어 있어야 합니다.
+ Amazon VPC 내의 포트 **11001(JMX Exporter)** 및 **11002(Node Exporter)**에서 인바운드 트래픽을 허용하도록 Amazon MSK 클러스터의 보안 그룹을 구성합니다. 스크레이퍼가 Prometheus 지표를 수집하기 위해 이러한 DNS 레코드에 액세스해야 하기 때문입니다.
+ Amazon MSK 클러스터가 상주하는 Amazon VPC에 [DNS가 활성화](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)되어 있어야 합니다.

**참고**  
클러스터는 Amazon 리소스 이름(ARN)으로 스크레이퍼와 연결됩니다. 클러스터를 삭제한 다음 이름이 같은 새 클러스터를 생성하면 ARN이 새 클러스터에 재사용됩니다. 이로 인해 스크레이퍼는 새 클러스터에 대한 지표를 수집하려고 시도합니다. 클러스터 삭제와 별도로 [스크레이퍼를 삭제](#prom-msk-delete-scraper)합니다.

------
#### [ To create a scraper using the AWS API ]

`CreateScraper` API 작업을 사용하여 AWS API로 스크레이퍼를 생성합니다. 다음 예제는 미국 동부(버지니아 북부) 리전에 스크레이퍼를 생성합니다. *예제* 콘텐츠를 사용자의 Amazon MSK 클러스터 정보로 대체하고 스크레이퍼 구성을 제공합니다.

**참고**  
대상 클러스터와 일치하도록 보안 그룹 및 서브넷을 구성합니다. 두 개의 가용 영역에 걸쳐 최소 두 개의 서브넷을 포함해야 합니다.

```
                POST /scrapers HTTP/1.1
Content-Length: 415 
Authorization: AUTHPARAMS
X-Amz-Date: 20201201T193725Z
User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6

{
    "alias": "myScraper",
    "destination":  {
        "ampConfiguration": {
            "workspaceArn": "arn:aws:aps:us-east-1:123456789012:workspace/ws-workspace-id"
        }
    },
    "source": {
        "vpcConfiguration": {
            "securityGroupIds": ["sg-security-group-id"],
            "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"]
        }
    },
    "scrapeConfiguration": {
        "configurationBlob": base64-encoded-blob
    }
}
```

이 예제에서 `scrapeConfiguration` 파라미터에는 MSK 클러스터의 DNS 레코드를 지정하는 base64로 인코딩된 Prometheus 구성 YAML 파일이 필요합니다.

각 DNS 레코드는 특정 가용 영역 내의 브로커 엔드포인트를 나타내며, 클라이언트는 선택한 AZ에 분산 배치된 브로커에 연결하여 고가용성을 확보할 수 있습니다.

MSK 클러스터 속성의 DNS 레코드 수는 클러스터 구성의 브로커 노드 및 가용 영역 수에 해당합니다.
+ **기본 구성** - 3개 AZ에 걸쳐 있는 3개의 브로커 노드 = 3개의 DNS 레코드
+ **사용자 지정 구성** - 2개 AZ에 걸쳐 있는 2개의 브로커 노드 = 2개의 DNS 레코드

MSK 클러스터의 DNS 레코드를 확인하려면 MSK 콘솔([https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/))을 엽니다. MSK 클러스터로 이동합니다. **속성**, **브로커**, **엔드포인트**를 차례로 선택합니다.

Prometheus가 MSK 클러스터에서 지표를 수집하도록 구성하는 방법에는 두 가지 옵션이 있습니다.

1. **클러스터 수준 DNS 확인(권장)** - 클러스터의 기본 DNS 이름을 사용하여 모든 브로커를 자동으로 검색합니다. 브로커 엔드포인트가 `b-1.clusterName.xxx.xxx.xxx`인 경우 `clusterName.xxx.xxx.xxx`를 DNS 레코드로 사용합니다. 이렇게 하면 Prometheus가 클러스터 내의 모든 브로커를 자동으로 스크래핑할 수 있습니다.

   **개별 브로커 엔드포인트** - 세분화된 제어를 사용하려면 각 브로커 엔드포인트를 개별적으로 지정합니다. 구성에서 전체 브로커 식별자(b-1, b-2)를 사용합니다. 예제:

   ```
   dns_sd_configs:
     - names:
       - b-1.clusterName.xxx.xxx.xxx
       - b-2.clusterName.xxx.xxx.xxx  
       - b-3.clusterName.xxx.xxx.xxx
   ```

**참고**  
`clusterName.xxx.xxx.xxx`를 AWS 콘솔의 실제 MSK 클러스터 엔드포인트로 바꿉니다.

자세한 내용은 Prometheus 설명서에서 [<dns\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#dns_sd_config)를 참조하세요**.

다음은 스크레이퍼 구성 파일의 예입니다.

```
global:
  scrape_interval: 30s
  external_labels:
    clusterArn: msk-test-1

scrape_configs:
  - job_name: msk-jmx
    scheme: http
    metrics_path: /metrics
    scrape_timeout: 10s
    dns_sd_configs:
      - names:
          - dns-record-1
          - dns-record-2
          - dns-record-3
        type: A
        port: 11001
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
        regex: '(.*)'
        replacement: '${1}'

  - job_name: msk-node
    scheme: http
    metrics_path: /metrics
    scrape_timeout: 10s
    dns_sd_configs:
      - names:
          - dns-record-1
          - dns-record-2
          - dns-record-3
        type: A
        port: 11002
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
        regex: '(.*)'
        replacement: '${1}'
```

다음 명령 중 하나를 실행하여 YAML 파일을 base64로 변환합니다. 온라인 base64 변환기를 사용하여 파일을 변환할 수도 있습니다.

**Example Linux/macOS**  

```
echo -n scraper config updated with dns records | base64 
```

**Example Windows PowerShell**  

```
[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(scraper config updated with dns records))
```

------
#### [ To create a scraper using the AWS CLI ]

 AWS Command Line Interface에서 `create-scraper` 명령을 사용하여 스크레이퍼를 생성합니다. 다음 예제는 미국 동부(버지니아 북부) 리전에 스크레이퍼를 생성합니다. *예제* 콘텐츠를 사용자의 Amazon MSK 클러스터 정보로 대체하고 스크레이퍼 구성을 제공합니다.

**참고**  
대상 클러스터와 일치하도록 보안 그룹 및 서브넷을 구성합니다. 두 개의 가용 영역에 걸쳐 최소 두 개의 서브넷을 포함해야 합니다.

```
aws amp create-scraper \
 --source vpcConfiguration="{securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \ 
--scrape-configuration configurationBlob=base64-encoded-blob \
 --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:123456789012:workspace/ws-workspace-id'}"
```

------
+ 다음은 AWS API와 함께 사용할 수 있는 스크레이퍼 작업의 전체 목록입니다.

  [CreateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_CreateScraper.html) API 작업으로 스크레이퍼를 생성합니다.
+ [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 작업으로 기존 스크레이퍼를 나열합니다.
+ [UpdateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html) API 작업으로 스크레이퍼의 별칭, 구성 또는 대상을 업데이트합니다.
+ [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) API 작업으로 스크레이퍼를 삭제합니다.
+ [DescribeScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html) API 작업으로 스크레이퍼에 대한 자세한 내용을 확인합니다.

## 교차 계정 설정
<a name="prom-msk-cross-account"></a>

지표를 수집하려는 Amazon MSK 클러스터가 Amazon Managed Service for Prometheus 수집기와 다른 계정에 있는 경우 교차 계정 설정에서 스크레이퍼를 생성하려면 아래 절차를 따릅니다.

예를 들어 Amazon MSK가 있는 첫 번째 소스 계정 `account_id_source`와 Amazon Managed Service for Prometheus 워크스페이스가 있는 두 번째 대상 계정 `account_id_target`과 같이 두 계정이 있는 경우를 가정합니다.

**교차 계정 설정에서 스크레이퍼를 생성하려면**

1. 소스 계정에서 `arn:aws:iam::111122223333:role/Source` 역할을 생성하고 다음 신뢰 정책을 추가합니다.

   ```
   {
       "Effect": "Allow",
       "Principal": {
       "Service": [
           "scraper.aps.amazonaws.com"
        ]
       },
       "Action": "sts:AssumeRole",
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "arn:aws:aps:aws-region:111122223333:scraper/scraper-id"
           },
           "StringEquals": {
               "AWS:SourceAccount": "111122223333"
           }
       }
   }
   ```

1. 소스(Amazon MSK 클러스터)와 대상(Amazon Managed Service for Prometheus 워크스페이스)의 모든 조합마다 `arn:aws:iam::444455556666:role/Target` 역할을 생성하고 다음 신뢰 정책을 추가하여 [AmazonPrometheusRemoteWriteAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html) 권한을 부여해야 합니다.

   ```
   {
     "Effect": "Allow",
     "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/Source"
     },
     "Action": "sts:AssumeRole",
     "Condition": {
        "StringEquals": {
           "sts:ExternalId": "arn:aws:aps:aws-region:111122223333:scraper/scraper-id"
         }
     }
   }
   ```

1. `--role-configuration` 옵션을 사용하여 스크레이퍼를 생성합니다.

   ```
   aws amp create-scraper \ --source vpcConfiguration="{subnetIds=[subnet-subnet-id], "securityGroupIds": ["sg-security-group-id"]}" \ --scrape-configuration configurationBlob=<base64-encoded-blob> \ --destination ampConfiguration="{workspaceArn='arn:aws:aps:aws-region:444455556666:workspace/ws-workspace-id'}"\ --role-configuration '{"sourceRoleArn":"arn:aws:iam::111122223333:role/Source", "targetRoleArn":"arn:aws:iam::444455556666:role/Target"}'
   ```

1. 스크레이퍼 생성을 검증합니다.

   ```
   aws amp list-scrapers
   {
       "scrapers": [
           {
               "scraperId": "s-example123456789abcdef0",
               "arn": "arn:aws:aps:aws-region:111122223333:scraper/s-example123456789abcdef0": "arn:aws:iam::111122223333:role/Source",
               "status": "ACTIVE",
               "creationTime": "2025-10-27T18:45:00.000Z",
               "lastModificationTime": "2025-10-27T18:50:00.000Z",
               "tags": {},
               "statusReason": "Scraper is running successfully",
               "source": {
                   "vpcConfiguration": {
                       "subnetIds": ["subnet-subnet-id"],
                       "securityGroupIds": ["sg-security-group-id"]
                   }
               },
               "destination": {
                   "ampConfiguration": {
                       "workspaceArn": "arn:aws:aps:aws-region:444455556666:workspace/ws-workspace-id'"
                   }
               },
               "scrapeConfiguration": {
                   "configurationBlob": "<base64-encoded-blob>"
               }
           }
       ]
   }
   ```

## RoleConfiguration 및 서비스 연결 역할 간 변경
<a name="prom-msk-changing-roles"></a>

Amazon Managed Service for Prometheus 워크스페이스에 쓰기 위해 `RoleConfiguration` 대신 서비스 연결 역할로 다시 전환하려면 `UpdateScraper`를 업데이트하고 스크레이퍼와 동일한 계정에 `RoleConfiguration` 없이 워크스페이스를 제공해야 합니다. 스크레이퍼에서 `RoleConfiguration`이 제거되고 서비스 연결 역할이 사용됩니다.

스크레이퍼와 동일한 계정에서 워크스페이스를 변경할 때 `RoleConfiguration`을 계속 사용하려면 `UpdateScraper`에 `RoleConfiguration`을 다시 제공해야 합니다.

## 스크레이퍼 찾기 및 삭제
<a name="prom-msk-delete-scraper"></a>

 AWS API 또는 AWS CLI 를 사용하여 계정의 스크레이퍼를 나열하거나 삭제할 수 있습니다.

**참고**  
최신 버전의 AWS CLI 또는 SDK를 사용하고 있는지 확인합니다. 최신 버전은 최신 특징과 기능 및 보안 업데이트도 제공합니다. 또는 항상 최신 명령줄 환경을 자동으로 제공하는 [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)을 사용합니다.

계정의 모든 스크레이퍼를 나열하려면 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 작업을 사용합니다.

또는를 사용하여 다음을 AWS CLI호출합니다.

```
aws amp list-scrapers
```

`ListScrapers`가 계정의 모든 스크레이퍼를 반환합니다. 예를 들면 다음과 같습니다.

```
{
    "scrapers": [
        {
            "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890",
            "arn": "arn:aws:aps:aws-region:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890",
            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931",
            "status": {
                "statusCode": "DELETING"
            },
            "createdAt": "2023-10-12T15:22:19.014000-07:00",
            "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00",
            "tags": {},
            "source": {
                "vpcConfiguration": {
                   "securityGroupIds": [
                        "sg-1234abcd5678ef90"
                    ],
                    "subnetIds": [
                        "subnet-abcd1234ef567890", 
                        "subnet-1234abcd5678ab90"
                    ]
                }
            },
            "destination": {
                "ampConfiguration": {
                    "workspaceArn": "arn:aws:aps:aws-region:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78"
                }
            }
        }
    ]
}
```

스크레이퍼를 삭제하려면 `ListScrapers` 작업을 사용하여 삭제하려는 스크레이퍼의 `scraperId`를 찾은 다음 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) 작업을 사용하여 삭제합니다.

또는를 사용하여 다음을 AWS CLI호출합니다.

```
aws amp delete-scraper --scraper-id scraperId
```

## Amazon MSK에서 수집된 지표
<a name="prom-msk-metrics"></a>

Amazon MSK와 통합하면 Amazon Managed Service for Prometheus 수집기가 자동으로 다음 지표를 스크래핑합니다.

### 지표: jmx\$1exporter 및 pod\$1exporter 작업
<a name="broker-metrics"></a>


| 지표 | 설명/목적 | 
| --- | --- | 
|  jmx\$1config\$1reload\$1failure\$1total  |  JMX Exporter가 구성 파일을 다시 로드하지 못한 총 횟수입니다.  | 
|  jmx\$1scrape\$1duration\$1seconds  |  현재 수집 주기 동안 JMX 지표를 스크래핑하는 데 걸린 시간(초)입니다.  | 
|  jmx\$1scrape\$1error  |  JMX 지표 스크래핑 중에 오류가 발생했는지 여부를 나타냅니다(1 = 오류, 0 = 성공).  | 
|  java\$1lang\$1Memory\$1HeapMemoryUsage\$1used  |  JVM에 현재 사용된 힙 메모리의 양(바이트)입니다.  | 
|  java\$1lang\$1Memory\$1HeapMemoryUsage\$1max  |  메모리 관리에 사용할 수 있는 최대 힙 메모리 양(바이트)입니다.  | 
|  java\$1lang\$1Memory\$1NonHeapMemoryUsage\$1used  |  JVM에 현재 사용된 힙 이외 메모리의 양(바이트)입니다.  | 
|  kafka\$1cluster\$1Partition\$1Value  |  Kafka 클러스터 파티션과 관련된 현재 상태 또는 값을 파티션 ID 및 주제별로 분류하여 표시합니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1assigned\$1partitions  |  현재 이 소비자에게 할당된 파티션 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1commit\$1latency\$1avg  |  오프셋을 커밋하는 데 걸린 평균 시간입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1commit\$1rate  |  초당 오프셋 커밋 횟수입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1failed\$1rebalance\$1total  |  소비자 그룹 재조정 실패 총 횟수입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1last\$1heartbeat\$1seconds\$1ago  |  코디네이터에 마지막으로 하트비트가 전송된 이후 경과된 시간(초)입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1rebalance\$1latency\$1avg  |  소비자 그룹 재조정에 걸린 평균 시간(밀리초)입니다.  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1rebalance\$1total  |  소비자 그룹 재조정 총 횟수입니다.  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1bytes\$1consumed\$1rate  |  소비자가 초당 소비하는 평균 바이트 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1fetch\$1latency\$1avg  |  가져오기 요청에 걸린 평균 시간(밀리초)입니다.  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1fetch\$1rate  |  초당 가져오기 요청 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1records\$1consumed\$1rate  |  초당 소비된 평균 레코드 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1records\$1lag\$1max  |  해당 소비자 내 모든 파티션에서 레코드 수 기준으로 발생하는 최대 지연 시간입니다.  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1connection\$1count  |  현재 활성 연결 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1incoming\$1byte\$1rate  |  모든 서버에서 초당 수신된 평균 바이트 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1last\$1poll\$1seconds\$1ago  |  마지막 소비자 poll() 호출 이후 경과된 시간(초)입니다.  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1request\$1rate  |  초당 전송된 요청 수입니다.  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1response\$1rate  |  초당 수신된 응답 수입니다.  | 
|  kafka\$1consumer\$1group\$1ConsumerLagMetrics\$1Value  |  소비자 그룹의 현재 소비자 지연 값으로, 소비자가 얼마나 뒤처져 있는지를 나타냅니다.  | 
|  kafka\$1controller\$1KafkaController\$1Value  |  Kafka 컨트롤러의 현재 상태 또는 값입니다(1 = 활성 컨트롤러, 0 = 비활성).  | 
|  kafka\$1controller\$1ControllerEventManager\$1Count  |  처리된 총 컨트롤러 이벤트 수입니다.  | 
|  kafka\$1controller\$1ControllerEventManager\$1Mean  |  컨트롤러 이벤트를 처리하는 데 걸린 평균 시간입니다.  | 
|  kafka\$1controller\$1ControllerStats\$1MeanRate  |  컨트롤러 통계 작업의 초당 평균 처리 속도입니다.  | 
|  kafka\$1coordinator\$1group\$1GroupMetadataManager\$1Value  |  소비자 그룹에 대한 그룹 메타데이터 관리자의 현재 상태 또는 값입니다.  | 
|  kafka\$1log\$1LogFlushStats\$1Count  |  로그 플러시 작업의 총 횟수입니다.  | 
|  kafka\$1log\$1LogFlushStats\$1Mean  |  로그 플러시 작업에 걸린 평균 시간입니다.  | 
|  kafka\$1log\$1LogFlushStats\$1MeanRate  |  로그 플러시 작업의 초당 평균 속도입니다.  | 
|  kafka\$1network\$1RequestMetrics\$1Count  |  처리된 총 네트워크 요청 수입니다.  | 
|  kafka\$1network\$1RequestMetrics\$1Mean  |  네트워크 요청을 처리하는 데 걸린 평균 시간입니다.  | 
|  kafka\$1network\$1RequestMetrics\$1MeanRate  |  네트워크 요청의 초당 평균 속도입니다.  | 
|  kafka\$1network\$1Acceptor\$1MeanRate  |  수락된 연결의 초당 평균 속도입니다.  | 
|  kafka\$1server\$1Fetch\$1queue\$1size  |  가져오기 요청 대기열의 현재 크기입니다.  | 
|  kafka\$1server\$1Produce\$1queue\$1size  |  생산 요청 대기열의 현재 크기입니다.  | 
|  kafka\$1server\$1Request\$1queue\$1size  |  일반 요청 대기열의 현재 크기입니다.  | 
|  kafka\$1server\$1BrokerTopicMetrics\$1Count  |  브로커 주제 작업(수신/송신 메시지, 수신/송신 바이트)의 총 개수입니다.  | 
|  kafka\$1server\$1BrokerTopicMetrics\$1MeanRate  |  브로커 주제 작업의 초당 평균 속도입니다.  | 
|  kafka\$1server\$1BrokerTopicMetrics\$1OneMinuteRate  |  브로커 주제 작업의 1분 이동 평균 속도입니다.  | 
|  kafka\$1server\$1DelayedOperationPurgatory\$1Value  |  퍼거토리에 있는 지연된 작업(완료 대기 중)의 현재 개수입니다.  | 
|  kafka\$1server\$1DelayedFetchMetrics\$1MeanRate  |  지연된 가져오기 작업의 초당 평균 속도입니다.  | 
|  kafka\$1server\$1FetcherLagMetrics\$1Value  |  복제본 페쳐 스레드에 대한 현재 지연 값입니다(리더보다 얼마나 뒤처져 있는지를 나타냄).  | 
|  kafka\$1server\$1FetcherStats\$1MeanRate  |  페처 작업의 초당 평균 속도입니다.  | 
|  kafka\$1server\$1ReplicaManager\$1Value  |  복제본 관리자의 현재 상태 또는 값입니다.  | 
|  kafka\$1server\$1ReplicaManager\$1MeanRate  |  복제본 관리자 작업의 초당 평균 속도입니다.  | 
|  kafka\$1server\$1LeaderReplication\$1byte\$1rate  |  이 브로커가 리더인 파티션에 대한 초당 복제 속도(바이트)입니다.  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1group\$1completed\$1rebalance\$1count  |  소비자 그룹 재조정 완료 총 횟수입니다.  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1offset\$1commit\$1count  |  총 오프셋 커밋 작업 수입니다.  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1offset\$1commit\$1rate  |  오프셋 커밋 작업의 초당 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1count  |  현재 활성 연결 수입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1creation\$1rate  |  새 연결 생성 작업의 초당 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1close\$1rate  |  초당 연결 종료 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1failed\$1authentication\$1total  |  총 인증 시도 실패 횟수입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1incoming\$1byte\$1rate  |  초당 수신 바이트 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1outgoing\$1byte\$1rate  |  초당 발신 바이트 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1request\$1rate  |  초당 요청 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1response\$1rate  |  초당 응답 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1network\$1io\$1rate  |  네트워크 I/O 작업의 초당 속도입니다.  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1io\$1ratio  |  I/O 작업에 소요된 시간 비율입니다.  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1connection\$1count  |  컨트롤러 채널의 현재 활성 연결 수입니다.  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1incoming\$1byte\$1rate  |  컨트롤러 채널의 초당 수신 바이트 속도입니다.  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1outgoing\$1byte\$1rate  |  컨트롤러 채널의 초당 발신 바이트 속도입니다.  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1request\$1rate  |  컨트롤러 채널의 초당 요청 속도입니다.  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1connection\$1count  |  복제본 가져오기에 대한 현재 활성 연결 수입니다.  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1incoming\$1byte\$1rate  |  복제본 가져오기에 대한 초당 수신 바이트 속도입니다.  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1request\$1rate  |  복제본 가져오기에 대한 초당 요청 속도입니다.  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1failed\$1authentication\$1total  |  복제본 가져오기에 대한 총 인증 시도 실패 횟수입니다.  | 
|  kafka\$1server\$1ZooKeeperClientMetrics\$1Count  |  ZooKeeper 클라이언트 작업의 총 개수입니다.  | 
|  kafka\$1server\$1ZooKeeperClientMetrics\$1Mean  |  ZooKeeper 클라이언트 작업의 평균 지연 시간입니다.  | 
|  kafka\$1server\$1KafkaServer\$1Value  |  Kafka 서버의 현재 상태 또는 값입니다(일반적으로 서버가 실행 중임을 나타냄).  | 
|  node\$1cpu\$1seconds\$1total  |  각 모드(사용자, 시스템, 유휴 등)에서 CPU가 소모한 총 시간(초)을 CPU 및 모드별로 분류하여 표시합니다.  | 
|  node\$1disk\$1read\$1bytes\$1total  |  디스크에서 성공적으로 읽은 총 바이트 수를 디바이스별로 구분하여 표시합니다.  | 
|  node\$1disk\$1reads\$1completed\$1total  |  디스크에 대해 성공적으로 완료된 총 읽기 횟수를 디바이스별로 분류하여 표시합니다.  | 
|  node\$1disk\$1writes\$1completed\$1total  |  디스크에 대해 성공적으로 완료된 총 쓰기 횟수를 디바이스별로 분류하여 표시합니다.  | 
|  node\$1disk\$1written\$1bytes\$1total  |  디스크에 성공적으로 기록된 총 바이트 수를 디바이스별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1avail\$1바이트  |  루트 사용자가 아닌 사용자에게 사용 가능한 파일 시스템 공간(바이트)을 디바이스 및 탑재 지점별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1size\$1bytes  |  파일 시스템의 총 크기(바이트)를 디바이스 및 탑재 지점별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1free\$1바이트  |  사용 가능한 파일 시스템 공간(바이트)을 디바이스 및 탑재 지점별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1files  |  파일 시스템의 총 파일 노드(inode) 수를 디바이스 및 탑재 지점별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1files\$1free  |  파일 시스템의 사용 가능한 파일 노드(inode) 수를 디바이스 및 탑재 지점별로 분류하여 표시합니다.  | 
|  node\$1filesystem\$1readonly  |  파일 시스템이 읽기 전용으로 마운트되었는지 여부를 나타냅니다(1 = 읽기 전용, 0 = 읽기-쓰기).  | 
|  node\$1filesystem\$1device\$1error  |  파일 시스템 통계를 가져오는 동안 오류가 발생했는지 여부를 나타냅니다(1 = 오류, 0 = 성공).  | 

## 제한 사항
<a name="prom-msk-limitations"></a>

현재 Amazon MSK와 Amazon Managed Service for Prometheus 간의 통합에는 다음과 같은 제한 사항이 적용됩니다:
+ Amazon MSK 프로비저닝 클러스터에서만 지원됩니다(Amazon MSK Serverless에서는 사용할 수 없음).
+ KRaft 메타데이터 모드와 함께 퍼블릭 액세스가 활성화된 Amazon MSK 클러스터에서는 지원되지 않습니다.
+ Amazon MSK Express 브로커에서는 지원되지 않습니다.
+ 현재 Amazon MSK 클러스터와 Amazon Managed Service for Prometheus 수집기/워크스페이스 간의 1:1 매핑을 지원합니다.

# Prometheus 호환 지표란 무엇입니까?
<a name="prom-compatible-metrics"></a>

Amazon Managed Service for Prometheus에서 사용하기 위해 애플리케이션과 인프라에서 Prometheus 지표를 스크래핑하려면 Prometheus 호환 `/metrics` 엔드포인트에서 *Prometheus 호환 지표*를 계측하여 공개해야 합니다. 자체 지표를 구현할 수 있지만 반드시 그럴 필요는 없습니다. Kubernetes(Amazon EKS 포함) 및 기타 여러 라이브러리 및 서비스는 이러한 지표를 직접 구현합니다.

Amazon EKS의 지표를 Prometheus 호환 엔드포인트로 내보내는 경우 Amazon Managed Service for Prometheus 수집기가 해당 지표를 자동으로 스크래핑하도록 할 수 있습니다.

자세한 내용은 다음 항목을 참조하세요.
+ 지표를 Prometheus 지표로 내보내는 기존 라이브러리 및 서비스에 대한 자세한 내용은 Prometheus 설명서의 [내보내기 및 통합](https://prometheus.io/docs/instrumenting/exporters/)을 참조하세요.
+ 자체 코드에서 Prometheus 호환 지표를 내보내는 방법에 대한 자세한 내용은 Prometheus 설명서의 [내보내기 작성](https://prometheus.io/docs/instrumenting/writing_exporters/)을 참조하세요.
+ Amazon EKS 클러스터의 지표를 자동으로 스크래핑하도록 Amazon Managed Service for Prometheus 수집기를 설정하는 방법에 대한 자세한 내용은 [Amazon EKS용 관리형 수집기 설정](AMP-collector-how-to.md) 섹션을 참조하세요.

# 제공형 로그를 사용하여 수집기 모니터링
<a name="AMP-collector-vended-logs"></a>

Amazon Managed Service for Prometheus 수집기는 지표 수집 프로세스를 모니터링하고 문제를 해결하는 데 도움이 되는 제공형 로그를 제공합니다. 이러한 로그는 Amazon CloudWatch Logs로 자동으로 전송되며 서비스 검색, 지표 수집 및 데이터 내보내기 작업에 대한 가시성을 제공합니다. 수집기는 지표 수집 파이프라인의 세 가지 주요 구성 요소에 대한 로그를 제공합니다.

**Topics**
+ [

## 서비스 검색 로그
](#amp-collector-service-discovery-vended-logs)
+ [

## 수집기 로그
](#amp-collector-vended-logs)
+ [

## Exporter 로그
](#amp-exporter-vended-logs)
+ [

## 수집기 제공형 로그 이해 및 사용
](#amp-collector-log-details)

## 서비스 검색 로그
<a name="amp-collector-service-discovery-vended-logs"></a>

서비스 검색 로그는 다음을 포함하여 대상 검색 프로세스에 대한 정보를 제공합니다.
+ Kubernetes API 리소스에 액세스할 때 발생하는 인증 또는 권한 문제
+ 서비스 검색 설정의 구성 오류

다음 예제에서는 서비스 검색 중에 발생할 수 있는 일반적인 인증 및 권한 오류를 보여줍니다.

**Amazon EKS 클러스터가 존재하지 않음**  
지정된 Amazon EKS 클러스터가 없으면 다음 오류가 발생합니다.  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Service - Verify your scraper source exists."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**유효하지 않은 서비스 권한**  
서비스를 감시할 수 있는 적절한 역할 기반 액세스 제어(RBAC) 권한이 수집기에 없는 경우 다음 오류가 발생합니다.  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Service - Verify your scraper source permissions are valid."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**유효하지 않은 엔드포인트 권한**  
엔드포인트를 감시할 수 있는 적절한 역할 기반 액세스 제어(RBAC) 권한이 수집기에 없는 경우 다음 오류가 발생합니다.  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Endpoints - Verify your scraper source permissions are valid."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

## 수집기 로그
<a name="amp-collector-vended-logs"></a>

수집기 로그는 다음을 포함하여 지표 스크래핑 프로세스에 대한 정보를 제공합니다.
+ 엔드포인트를 사용할 수 없어 발생한 스크래핑 실패
+ 대상 스크래핑 시도 시 발생한 연결 문제
+ 스크래핑 작업 중 발생한 제한 시간 초과
+ 스크래핑 대상에서 반환된 HTTP 상태 오류

다음 예제에서는 지표 스크래핑 프로세스 중에 발생할 수 있는 일반적인 수집기 오류를 보여줍니다.

**지표 엔드포인트 누락**  
대상 인스턴스에서 `/metrics` 엔드포인트를 사용할 수 없는 경우 다음 오류가 발생합니다.  

```
{
    "component": "COLLECTOR",
    "message": {
        "log": "Failed to scrape Prometheus endpoint - verify /metrics endpoint is available",
        "job": "pod_exporter",
        "targetLabels": "{__name__=\"up\", instance=\10.24.34.0\", job=\"pod_exporter\"}"
    },
    "timestamp": "1752787969551",
    "scraperId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**연결이 거부됨**  
수집기가 대상 엔드포인트에 연결할 수 없는 경우 다음 오류가 발생합니다.  

```
{
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "message": "Scrape failed",
    "scrape_pool": "pod_exporter",
    "target": "http://10.24.34.0:80/metrics",
    "error": "Get \"http://10.24.34.0:80/metrics\": dial tcp 10.24.34.0:80: connect: connection refused"
  },
  "component": "COLLECTOR"
}
```

## Exporter 로그
<a name="amp-exporter-vended-logs"></a>

Exporter 로그는 다음을 포함하여 수집된 지표를 Amazon Managed Service for Prometheus 워크스페이스로 보내는 프로세스에 대한 정보를 제공합니다.
+ 처리된 지표 및 데이터 포인트 수
+ 워크스페이스 문제로 인한 내보내기 실패
+ 지표를 작성하려고 할 때 발생한 권한 오류
+ 내보내기 파이프라인의 종속성 실패

다음 예제에서는 지표 내보내기 프로세스 중에 발생할 수 있는 일반적인 내보내기 오류를 보여줍니다.

**워크스페이스를 찾을 수 없음**  
지표 내보내기를 위한 대상 워크스페이스를 찾을 수 없는 경우 다음 오류가 발생합니다.  

```
{
    "component": "EXPORTER",
    "message": {
        "log": "Failed to export to the target workspace - Verify your scraper destination.",
        "samplesDropped": 5
    },
    "timestamp": "1752787969664",
    "scraperId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

## 수집기 제공형 로그 이해 및 사용
<a name="amp-collector-log-details"></a>

### 로그 구조
<a name="amp-log-structure"></a>

모든 수집기 제공형 로그는 다음 필드로 구성된 일관된 구조를 따릅니다.

**scrapeConfigId**  
해당 로그를 생성한 스크래핑 구성의 고유 식별자입니다.

**timestamp**  
로그 항목이 생성된 시간입니다.

**message**  
로그 메시지 콘텐츠로, 추가 구조화 필드가 포함될 수 있습니다.

**component**  
로그를 생성한 구성 요소입니다(SERVICE\$1DISCOVERY, COLLECTOR, EXPORTER).

### 문제 해결에 제공형 로그 사용
<a name="amp-troubleshooting"></a>

수집기 제공형 로그는 지표 수집과 관련된 일반적인 문제를 해결하는 데 도움이 됩니다.

1. 서비스 검색 문제
   + **SERVICE\$1DISCOVERY** 로그에서 인증 또는 권한 오류가 있는지 확인합니다.
   + Kubernetes 리소스에 액세스하는 데 필요한 권한이 수집기에 있는지 확인합니다.

1. 지표 스크래핑 문제
   + **COLLECTOR** 로그에서 스크래핑 실패가 있는지 확인합니다.
   + 대상 엔드포인트에 액세스할 수 있고 지표를 반환하는지 확인합니다.
   + 방화벽 규칙에 따라 수집기가 대상 엔드포인트에 연결할 수 있는지 확인합니다.

1. 지표 내보내기 문제
   + **EXPORTER** 로그에서 내보내기 실패가 있는지 확인합니다.
   + 워크스페이스가 존재하고 올바르게 구성되었는지 확인합니다.
   + 수집기에 워크스페이스에 쓰는 데 필요한 권한이 있는지 확인합니다.

### 수집기 제공형 로그 액세스
<a name="amp-accessing-logs"></a>

수집기 제공형 로그는 Amazon CloudWatch Logs로 자동 전송됩니다. 이러한 로그에 액세스하려면 다음을 수행합니다.

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

1. 탐색 창에서 **로그 그룹**을 선택합니다.

1. 수집기의 로그 그룹(`/aws/prometheus/workspace_id/collector/collector_id`)을 찾아 선택합니다.

1. 로그 이벤트를 찾아보거나 검색하여 관련 정보를 찾습니다.

CloudWatch Logs Insights를 사용하여 수집기 로그를 쿼리하고 분석할 수도 있습니다. 예를 들어, 서비스 검색 오류를 모두 찾으려면 다음과 같이 합니다.

```
fields @timestamp, message.message
| filter component = "SERVICE_DISCOVERY" and message.message like /Failed/
| sort @timestamp desc
```

### 수집기 모니터링 모범 사례
<a name="amp-monitoring-best-practices"></a>

Amazon Managed Service for Prometheus 수집기를 효과적으로 모니터링하려면 다음을 수행합니다.

1. 영구 스크래핑 실패 또는 내보내기 오류와 같은 중요한 수집기 문제에 대해 CloudWatch 경보를 설정합니다. 자세한 내용은 **Amazon CloudWatch 사용 설명서에서 [경보](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)를 참조하세요.

1. CloudWatch 대시보드를 생성하여 제공형 로그 데이터와 함께 수집기 성능 지표를 시각화합니다. 자세한 내용은 **Amazon CloudWatch 사용 설명서에서 [대시보드](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

1. 서비스 검색 로그를 정기적으로 검토하여 대상이 올바르게 검색되고 있는지 확인합니다.

1. 삭제된 대상 수를 모니터링하여 잠재적 구성 문제를 식별합니다.

1. 내보내기 실패를 추적하여 지표가 워크스페이스로 성공적으로 전송되고 있는지 확인합니다.

# 고객 관리형 수집기
<a name="self-managed-collectors"></a>

이 섹션에는 Prometheus 원격 쓰기를 사용하여 Amazon Managed Service for Prometheus로 지표를 보내는 자체 수집기를 설정하여 데이터를 수집하는 방법에 대한 정보가 포함되어 있습니다.

자체 수집기를 사용하여 Amazon Managed Service for Prometheus로 지표를 보내는 경우, 지표를 보호하고 수집 프로세스가 가용성 요구 사항을 충족하도록 확인해야 합니다.

대부분의 고객 관리형 수집기는 다음 도구 중 하나를 사용합니다.
+ **AWS Distro for OpenTelemetry(ADOT)** - ADOT는 에이전트가 지표를 수집할 수 있도록 제공하는 OpenTelemetry의 완전 지원되고 안전한 프로덕션 지원 오픈 소스 배포입니다. ADOT를 사용해 지표를 수집하여 Amazon Managed Service for Prometheus WorkSpace로 보낼 수 있습니다. ADOT Collector에 대한 자세한 내용은 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel/)를 참조하세요.
+ **Prometheus 에이전트** - 에이전트로 실행되는 오픈 소스 Prometheus 서버의 자체 인스턴스를 설정하여 지표를 수집하고 이를 Amazon Managed Service for Prometheus WorkSpace에 전달할 수 있습니다.

다음 주제에서는 두 도구를 모두 사용하는 방법을 설명하고 자체 수집기 설정에 대한 일반적인 정보를 포함합니다.

**Topics**
+ [

# 지표 수집 보호
](AMP-secure-metric-ingestion.md)
+ [

# AWS Distro for OpenTelemetry를 수집기로 사용
](AMP-ingest-with-adot.md)
+ [

# Prometheus 인스턴스를 수집기로 사용
](AMP-ingest-with-prometheus.md)
+ [

# 고가용성 데이터를 위해 Amazon Managed Service for Prometheus 설정
](AMP-ingest-high-availability.md)

# 지표 수집 보호
<a name="AMP-secure-metric-ingestion"></a>

Amazon Managed Service for Prometheus는 지표 수집을 보호하는 데 도움이 되는 방법을 제공합니다.

## Amazon Managed Service for Prometheus와 AWS PrivateLink 함께 사용
<a name="AMP-secure-VPC"></a>

Amazon Managed Service for Prometheus에 지표를 수집하는 네트워크 트래픽은 퍼블릭 인터넷 엔드포인트를 통해 또는 VPC 엔드포인트를 통해 수행할 수 있습니다 AWS PrivateLink. AWS PrivateLink 를 사용하면 VPC의 네트워크 트래픽을 퍼블릭 인터넷을 거치지 않고 AWS 네트워크 내에서 보호할 수 있습니다. Amazon Managed Service for Prometheus에 대한 AWS PrivateLink VPC 엔드포인트를 생성하려면 섹션을 참조하세요[인터페이스 VPC 엔드포인트에서 Amazon Managed Service for Prometheus 사용](AMP-and-interface-VPC.md).

## 인증 및 권한 부여
<a name="AMP-secure-auth"></a>

AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 되는 웹 서비스입니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다. Amazon Managed Service for Prometheus는 IAM과 통합되어 데이터를 안전하게 유지하는 데 도움이 됩니다. Amazon Managed Service for Prometheus를 설정할 때는 Prometheus 서버에서 지표를 수집하고 Grafana 서버가 Amazon Managed Service for Prometheus WorkSpace에 저장된 지표를 쿼리할 수 있도록 하는 몇 가지 IAM 역할을 생성해야 합니다. IAM에 대한 자세한 내용은 [IAM이란?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 섹션을 참조하세요.

Amazon Managed Service for Prometheus를 설정하는 데 도움이 되는 또 다른 AWS 보안 기능은 서명 버전 4 서명 프로세스(AWS SigV4)입니다 AWS . 서명 버전 4는 HTTP에서 보낸 AWS 요청에 인증 정보를 추가하는 프로세스입니다. 보안을 위해에 대한 대부분의 요청은 액세스 키 ID와 보안 액세스 키로 구성된 액세스 키로 서명해야 AWS 합니다. 이 두 키는 일반적으로 보안 자격 증명이라고 합니다. SigV4에 대한 자세한 내용은 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.

# 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로 전송합니다.

# Prometheus 인스턴스를 수집기로 사용
<a name="AMP-ingest-with-prometheus"></a>

*에이전트* 모드(*Prometheus 에이전트*라고 함)에서 실행되는 Prometheus 인스턴스를 사용하여 지표를 스크래핑하고 Amazon Managed Service for Prometheus 워크스페이스로 보낼 수 있습니다.

다음 주제에서는 에이전트 모드에서 실행되는 Prometheus 인스턴스를 지표 수집기로 설정하는 다양한 방법을 설명합니다.

**주의**  
Prometheus 에이전트를 생성할 때 해당 에이전트의 구성 및 유지 관리에 대한 책임은 사용자에게 있습니다. [보안 기능을 활성화](https://prometheus.io/docs/prometheus/latest/configuration/https/)하여 Prometheus 스크레이프 엔드포인트를 공용 인터넷에 노출시키지 마세요.

동일한 지표 세트를 모니터링하는 여러 Prometheus 인스턴스를 설정하고 고가용성을 위해 Amazon Managed Service for Prometheus 단일 WorkSpace로 전송하는 경우 중복 제거를 설정해야 합니다. 중복 제거를 설정하는 단계를 따르지 않으면 Amazon Managed Service for Prometheus로 전송된 모든 데이터 샘플(중복 샘플 포함)에 대한 요금이 부과됩니다. 중복 제거 설정에 대한 지침은 [Amazon Managed Service for Prometheus로 전송된 고가용성 지표 중복 제거](AMP-ingest-dedupe.md) 섹션을 참조하세요.

**Topics**
+ [

# Helm을 사용하여 새 Prometheus 서버에서 수집 설정
](AMP-onboard-ingest-metrics-new-Prometheus.md)
+ [

# EC2의 Kubernetes에 있는 기존 Prometheus 서버에서의 수집 설정
](AMP-onboard-ingest-metrics-existing-Prometheus.md)
+ [

# Fargate의 Kubernetes에 있는 기존 Prometheus 서버에서의 수집 설정
](AMP-onboard-ingest-metrics-existing-Prometheus-fargate.md)

# Helm을 사용하여 새 Prometheus 서버에서 수집 설정
<a name="AMP-onboard-ingest-metrics-new-Prometheus"></a>

이 섹션의 지침을 통해 Amazon Managed Service for Prometheus를 빠르게 시작하고 실행할 수 있습니다. Amazon EKS 클러스터에 새 Prometheus 서버를 설정하면 새 서버는 기본 구성을 사용하여 Amazon Managed Service for Prometheus로 지표를 전송합니다. 이 방법의 사전 조건은 다음과 같습니다.
+ 새 Prometheus 서버가 지표를 수집할 Amazon EKS 클러스터가 있어야 합니다.
+ Amazon EKS 클러스터에 [Amazon EBS CSI 드라이버](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)가 설치되어 있어야 합니다(Helm에서 요구됨).
+ Helm CLI 3.0 이상을 사용해야 합니다.
+ 다음 섹션의 단계를 수행하려면 Linux 또는 macOS 컴퓨터를 사용해야 합니다.

## 1단계: 새 차트 Helm 리포지토리 추가
<a name="AMP-onboard-new-Prometheus-HelmRepo"></a>

새 차트 Helm 리포지토리를 추가하려면 다음 명령을 입력합니다. 이러한 명령에 대한 자세한 내용은 [Helm 리포지토리](https://helm.sh/docs/helm/helm_repo/)를 참조하세요.

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
helm repo update
```

## 2단계: Prometheus 네임스페이스 생성
<a name="AMP-onboard-new-Prometheus-namespace"></a>

다음 명령을 입력하여 Prometheus 서버 및 기타 모니터링 구성 요소에 대한 Prometheus 네임스페이스를 생성합니다. *prometheus-namespace*를 이 네임스페이스에 사용할 이름으로 바꿉니다.

```
kubectl create namespace prometheus-namespace
```

## 3단계: 서비스 계정의 IAM 역할 설정
<a name="AMP-onboard-new-Prometheus-IRSA"></a>

문서화하는 온보딩 방법에 대해서는 Prometheus 서버가 실행되는 Amazon EKS 클러스터에서 서비스 계정에 대한 IAM 역할을 사용해야 합니다.

서비스 계정에 대한 IAM 역할을 사용할 경우 IAM 역할을 Kubernetes 서비스 계정에 연결할 수 있습니다. 이렇게 하면 이 서비스 계정에서는 이 서비스 계정을 사용하는 모든 포드에 있는 컨테이너에 AWS 권한을 제공할 수 있습니다. 자세한 내용은 [서비스 계정에 대한 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)을 참조하세요.

이러한 역할을 아직 설정하지 않은 경우 [Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정](set-up-irsa.md#set-up-irsa-ingest)의 지침에 따라 역할을 설정하세요. 해당 섹션의 지침에는 `eksctl`을 사용해야 합니다. 자세한 내용은 [Amazon Elastic Kubernetes Service 시작 - `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)을 참조하세요.

**참고**  
EKS 또는를 사용하지 않고 액세스 키 AWS 와 보안 키만 사용하여 Amazon Managed Service for Prometheus에 액세스하는 경우 `EKS-IAM-ROLE` 기반 SigV4를 사용할 수 없습니다.

## 4단계: 새 서버 설정 및 지표 수집 시작
<a name="AMP-onboard-ingest-metrics-new-Prometheus-Helm"></a>

Amazon Managed Service for Prometheus 워크스페이스로 지표를 전송하는 새 Prometheus 서버를 설치하려면 다음 단계를 따르세요.

**새 Prometheus 서버를 설치하여 Amazon Managed Service for Prometheus 워크스페이스로 지표를 보내려면**

1. 텍스트 편집기를 사용하여 다음 내용을 포함하는 `my_prometheus_values_yaml`이라는 파일을 생성합니다.
   + *IAM\$1PROXY\$1PROMETHEUS\$1ROLE\$1ARN*을 [Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정](set-up-irsa.md#set-up-irsa-ingest)에서 생성한 **amp-iamproxy-inges-role**의 ARN으로 바꿉니다.
   + *WORKSPACE\$1ID*를 Amazon Managed Service for Prometheus 워크스페이스의 ID로 바꿉니다.
   + *REGION*을 Amazon Managed Service for Prometheus 워크스페이스의 리전으로 바꿉니다.

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
   ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
   ##
   serviceAccounts:
     server:
       name: amp-iamproxy-ingest-service-account
       annotations: 
         eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
   server:
     remoteWrite:
       - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
         sigv4:
           region: ${REGION}
         queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
   ```

1. 다음 명령을 입력하여 Prometheus 서버를 생성합니다.
   + *prometheus-chart-name*을 Prometheus 릴리스 이름으로 바꿉니다.
   + *prometheus-namespace*를 Prometheus 네임스페이스의 이름으로 바꿉니다.

   ```
   helm install prometheus-chart-name prometheus-community/prometheus -n prometheus-namespace \
   -f my_prometheus_values_yaml
   ```
**참고**  
여러 가지 방법으로 `helm install` 명령을 사용자 지정할 수 있습니다. 자세한 내용은 *Helm 설명서*의 [Helm 설치](https://helm.sh/docs/helm/helm_install/)를 참조하세요.

# EC2의 Kubernetes에 있는 기존 Prometheus 서버에서의 수집 설정
<a name="AMP-onboard-ingest-metrics-existing-Prometheus"></a>

Amazon Managed Service for Prometheus는 Amazon EKS를 실행하는 클러스터와 Amazon EC2에서 실행되는 자체 관리형 Kubernetes 클러스터의 Prometheus 서버에서 지표 수집을 지원합니다. 이 섹션의 세부 지침은 Amazon EKS 클러스터의 Prometheus 서버를 위한 것입니다. Amazon EC2의 자체 관리형 Kubernetes 클러스터의 경우 서비스 계정의 OIDC 공급자 및 IAM 역할을 직접 설정해야 한다는 점을 제외하고 수집 설정 단계는 동일합니다.

이 섹션의 지침에서는 Helm을 Kubernetes 패키지 관리자로 사용합니다.

**Topics**
+ [

## 1단계: 서비스 계정의 IAM 역할 설정
](#AMP-onboard-existing-Prometheus-IRSA)
+ [

## 2단계: Helm을 사용하여 기존 Prometheus 서버 업그레이드
](#AMP-onboard-ingest-metrics-existing-remotewrite)

## 1단계: 서비스 계정의 IAM 역할 설정
<a name="AMP-onboard-existing-Prometheus-IRSA"></a>

문서화하는 온보딩 방법에 대해서는 Prometheus 서버가 실행되는 Amazon EKS 클러스터에서 서비스 계정에 대한 IAM 역할을 사용해야 합니다. 이러한 역할을 **서비스 역할이라고도 합니다.

서비스 역할을 사용하면 IAM 역할을 Kubernetes 서비스 계정에 연결할 수 있습니다. 그러면이 서비스 계정은 해당 서비스 계정을 사용하는 모든 포드의 컨테이너에 AWS 권한을 제공할 수 있습니다. 자세한 내용은 [서비스 계정에 대한 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)을 참조하세요.

이러한 역할을 아직 설정하지 않은 경우 [Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정](set-up-irsa.md#set-up-irsa-ingest)의 지침에 따라 역할을 설정하세요.

## 2단계: Helm을 사용하여 기존 Prometheus 서버 업그레이드
<a name="AMP-onboard-ingest-metrics-existing-remotewrite"></a>

이 섹션의 지침에는 Prometheus 서버가 Amazon Managed Service for Prometheus WorkSpace에 원격 쓰기를 수행할 수 있도록 인증하고 권한을 부여하기 위한 원격 쓰기 및 sigv4 설정 방법이 포함되어 있습니다.

### Prometheus 버전 2.26.0 이상 사용
<a name="AMP-onboard-ingest-metrics-Helm13"></a>

버전 2.26.0 이상의 Prometheus 서버 이미지에서 차트 Helm을 사용하는 경우 다음 단계를 따르세요.

**차트 Helm을 사용하여 Prometheus 서버에서 원격 쓰기를 설정하려면**

1. Helm 구성 파일에 새 원격 쓰기 섹션을 생성합니다.
   + `${IAM_PROXY_PROMETHEUS_ROLE_ARN}`을 [1단계: 서비스 계정의 IAM 역할 설정](#AMP-onboard-existing-Prometheus-IRSA)에서 생성한 **amp-iamproxy-ingest-role**의 ARN으로 바꿉니다. 역할 ARN의 형식은 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`입니다.
   + `${WORKSPACE_ID}`를 Amazon Managed Service for Prometheus WorkSpace ID로 바꿉니다.
   + `${REGION}`을 Amazon Managed Service for Prometheus WorkSpace의 리전(예: `us-west-2`)으로 바꿉니다.

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
       ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
       ##
       serviceAccounts:
         server:
           name: amp-iamproxy-ingest-service-account
           annotations: 
             eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
       server:
         remoteWrite:
           - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
             sigv4:
               region: ${REGION}
             queue_config:
               max_samples_per_send: 1000
               max_shards: 200
               capacity: 2500
   ```

1. Helm을 사용하여 기존 Prometheus 서버 구성을 업데이트합니다.
   + `prometheus-chart-name`을 Prometheus 릴리스 이름으로 바꿉니다.
   + `prometheus-namespace`를 Prometheus 서버가 설치된 Kubernetes 네임스페이스로 바꿉니다.
   + `my_prometheus_values_yaml`을 Helm 구성 파일의 경로로 바꿉니다.
   + `current_helm_chart_version`을 Prometheus 서버 차트 Helm의 현재 버전으로 바꿉니다. [helm list](https://helm.sh/docs/helm/helm_list/) 명령을 사용하여 현재 차트 버전을 찾을 수 있습니다.

   ```
   helm upgrade prometheus-chart-name prometheus-community/prometheus \
          -n prometheus-namespace \
          -f my_prometheus_values_yaml \
          --version current_helm_chart_version
   ```

### 이전 버전의 Prometheus 사용
<a name="AMP-onboard-ingest-metrics-Helm8"></a>

2.26.0 이전의 Prometheus 버전을 사용하는 경우 다음 단계를 따르세요. 이전 버전의 Prometheus는 기본적으로 AWS 서명 버전 4 서명 프로세스(AWS SigV4)를 지원하지 않으므로이 단계에서는 사이드카 접근 방식을 사용합니다.

이 지침에서는 Helm을 사용하여 Prometheus를 배포한다고 가정합니다.

**Prometheus 서버에서 원격 쓰기를 설정하려면**

1. Prometheus 서버에서 새 원격 쓰기 구성을 생성합니다. 먼저 새 업데이트 파일을 생성합니다. `amp_ingest_override_values.yaml` 파일을 호출합니다.

   YAML 파일에 다음 값을 추가합니다.

   ```
   serviceAccounts:
           server:
               name: "amp-iamproxy-ingest-service-account"
               annotations:
                   eks.amazonaws.com/role-arn: "${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}"
       server:
           sidecarContainers:
               - name: aws-sigv4-proxy-sidecar
                 image: public.ecr.aws/aws-observability/aws-sigv4-proxy:1.0
                 args:
                 - --name
                 - aps
                 - --region
                 - ${REGION}
                 - --host
                 - aps-workspaces.${REGION}.amazonaws.com
                 - --port
                 - :8005
                 ports:
                 - name: aws-sigv4-proxy
                   containerPort: 8005
           statefulSet:
               enabled: "true"
           remoteWrite:
               - url: http://localhost:8005/workspaces/${WORKSPACE_ID}/api/v1/remote_write
   ```

   `${REGION}`을 Amazon Managed Service for Prometheus 워크스페이스의 리전으로 바꿉니다.

   `${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}`을 [1단계: 서비스 계정의 IAM 역할 설정](#AMP-onboard-existing-Prometheus-IRSA)에서 생성한 **amp-iamproxy-ingest-role**의 ARN으로 바꿉니다. 역할 ARN의 형식은 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`입니다.

   `${WORKSPACE_ID}`를 워크스페이스 ID로 바꿉니다.

1. Prometheus 차트 Helm을 업그레이드합니다. 먼저 다음 명령을 입력하여 차트 Helm 이름을 찾습니다. 이 명령의 출력에서 이름에 `prometheus`가 포함된 차트를 찾아보세요.

   ```
   helm ls --all-namespaces
   ```

   이어서 다음 명령을 입력합니다.

   ```
   helm upgrade --install prometheus-helm-chart-name prometheus-community/prometheus -n prometheus-namespace -f ./amp_ingest_override_values.yaml
   ```

   *prometheus-helm-chart-name*을 이전 명령에서 반환된 Prometheus 차트 Helm의 이름으로 바꿉니다. *prometheus-namespace*를 네임스페이스의 이름으로 바꿉니다.

#### 차트 Helm 다운로드
<a name="AMP-onboard-ingest-downloadHelm"></a>

차트 Helm을 아직 로컬로 다운로드하지 않은 경우, 다음 명령을 사용하여 다운로드할 수 있습니다.

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm pull prometheus-community/prometheus --untar
```

# Fargate의 Kubernetes에 있는 기존 Prometheus 서버에서의 수집 설정
<a name="AMP-onboard-ingest-metrics-existing-Prometheus-fargate"></a>

Amazon Managed Service for Prometheus는 Fargate에서 실행되는 자체 관리형 Kubernetes 클러스터의 Prometheus 서버의 지표 수집을 지원합니다. Fargate에서 실행되는 Amazon EKS 클러스터의 Prometheus 서버에서 지표를 수집하려면 다음과 같이 amp\$1ingest\$1override\$1values.yaml이라는 구성 파일의 기본 구성을 재정의하세요.

```
prometheus-node-exporter:
        enabled: false
    
    alertmanager:
        enabled: false
    
    serviceAccounts:
      server:
        name: amp-iamproxy-ingest-service-account
        annotations: 
          eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
    
    server:
      persistentVolume:
        enabled: false
      remoteWrite:
        - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
          sigv4:
            region: ${REGION}
          queue_config:
            max_samples_per_send: 1000
            max_shards: 200
            capacity: 2500
```

다음 명령을 사용하여 재정의하여 Prometheus를 설치합니다.

```
helm install prometheus-for-amp prometheus-community/prometheus \
                   -n prometheus \
                   -f amp_ingest_override_values.yaml
```

차트 Helm 구성에서는 노드 내보내기와 알림 관리자를 비활성화하고 Prometheus 서버 배포를 실행하지 않도록 설정했습니다.

다음 예제 테스트 쿼리를 사용하여 설치를 확인할 수 있습니다.

```
$ awscurl --region region --service aps "https://aps-workspaces.region_id.amazonaws.com/workspaces/workspace_id/api/v1/query?query=prometheus_api_remote_read_queries"
    {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"prometheus_api_remote_read_queries","instance":"localhost:9090","job":"prometheus"},"value":[1648461236.419,"0"]}]}}21
```

# 고가용성 데이터를 위해 Amazon Managed Service for Prometheus 설정
<a name="AMP-ingest-high-availability"></a>

Amazon Managed Service for Prometheus로 데이터를 전송하면 해당 리전의 AWS 가용성 영역 전체에 데이터가 자동으로 복제되며 확장성, 가용성 및 보안을 제공하는 호스트 클러스터에서 사용자에게 제공됩니다. 특정 설정에 따라 고가용성 유사 시 대기를 더 추가할 수 있습니다. 설정에 고가용성 안전 기능을 추가하는 두 가지 일반적인 방법은 다음과 같습니다.
+ 동일한 데이터를 포함하는 컨테이너 또는 인스턴스가 여러 개 있는 경우, 해당 데이터를 Amazon Managed Service for Prometheus로 전송하면 데이터의 중복을 자동으로 제거할 수 있습니다. 이렇게 하면 데이터가 Amazon Managed Service for Prometheus 워크스페이스로 전송되도록 할 수 있습니다.

  고가용성 데이터 중복 제거에 대한 자세한 내용은 [Amazon Managed Service for Prometheus로 전송된 고가용성 지표 중복 제거](AMP-ingest-dedupe.md) 섹션을 참조하세요.
+  AWS 리전을 사용할 수 없는 경우에도 데이터에 액세스할 수 있도록 하려면 지표를 다른 리전의 또 다른 WorkSpace로 보낼 수 있습니다.

  지표 데이터를 여러 워크스페이스로 보내는 방법에 대한 자세한 내용은 [리전 간 워크스페이스를 사용하여 Amazon Managed Service for Prometheus에서 고가용성 추가](AMP-send-to-multiple-workspaces.md) 섹션을 참조하세요.

**Topics**
+ [

# Amazon Managed Service for Prometheus로 전송된 고가용성 지표 중복 제거
](AMP-ingest-dedupe.md)
+ [

# Prometheus를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
](Send-high-availability-data.md)
+ [

# Prometheus Operator Helm 차트를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 설정
](Send-high-availability-data-operator.md)
+ [

# AWS Distro for OpenTelemetry를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
](Send-high-availability-data-ADOT.md)
+ [

# Prometheus 커뮤니티 Helm 차트를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
](Send-high-availability-prom-community.md)
+ [

# Amazon Managed Service for Prometheus의 고가용성 구성에 대한 일반적인 질문과 답변
](HA_FAQ.md)
+ [

# 리전 간 워크스페이스를 사용하여 Amazon Managed Service for Prometheus에서 고가용성 추가
](AMP-send-to-multiple-workspaces.md)

# Amazon Managed Service for Prometheus로 전송된 고가용성 지표 중복 제거
<a name="AMP-ingest-dedupe"></a>

여러 Prometheus **에이전트(에이전트 모드에서 실행되는 Prometheus 인스턴스)에서 Amazon Managed Service for Prometheus 워크스페이스로 데이터를 보낼 수 있습니다. 이러한 인스턴스 중 일부가 동일한 지표를 기록하고 전송하는 경우 데이터의 가용성이 높아집니다(에이전트 중 하나가 데이터 전송을 중단하더라도 Amazon Managed Service for Prometheus 워크스페이스는 다른 인스턴스에서 데이터를 계속 수신함). 하지만 지표가 여러 번 표시되지 않고 데이터 모으기 및 저장 요금이 여러 번 청구되지 않도록 Amazon Managed Service for Prometheus 워크스페이스에서 지표가 자동으로 중복 제거되도록 할 수 있습니다.

Amazon Managed Service for Prometheus에서 여러 Prometheus 에이전트의 데이터가 자동으로 중복 제거되도록 하려면 중복 데이터를 보내는 에이전트 세트에 단일 **클러스터 이름을 지정하고 각 인스턴스에 **복제본 이름을 지정합니다. 클러스터 이름은 인스턴스를 공유 데이터가 있는 것으로 식별하며, 복제본 이름은 Amazon Managed Service for Prometheus가 각 지표의 소스를 식별할 수 있도록 합니다. 최종 저장된 지표에는 클러스터 레이블이 포함되지만 복제본은 포함되지 않으므로 지표는 단일 소스에서 가져온 것으로 나타납니다.

**참고**  
특정 버전의 Kubernetes(1.28 및 1.29)는 `cluster` 레이블이 있는 자체 지표를 내보낼 수 있습니다. 이로 인해 Amazon Managed Service for Prometheus 중복 제거에 문제가 발생할 수 있습니다. 자세한 내용은 [고가용성 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)를 참조하세요.

다음 주제에서는 데이터를 전송하고, `cluster` 및 `__replica__` 레이블을 포함하여 Amazon Managed Service for Prometheus에서 자동으로 데이터를 중복 제거하도록 하는 방법을 보여 줍니다.

**중요**  
중복 제거를 설정하지 않으면 Amazon Managed Service for Prometheus로 전송되는 모든 데이터 샘플에 대해 요금이 부과됩니다. 이러한 데이터 샘플에는 중복 샘플이 포함되어 있습니다.

# Prometheus를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
<a name="Send-high-availability-data"></a>

Prometheus를 사용하여 고가용성 구성을 설정하려면 Amazon Managed Service for Prometheus에서 식별할 수 있도록 고가용성 그룹의 모든 인스턴스에 외부 레이블을 적용해야 합니다. Prometheus 인스턴스 에이전트를 고가용성 그룹의 일부로 식별하려면 `cluster` 레이블을 사용합니다. 그룹 내 각 복제본을 개별적으로 식별하려면 `__replica__` 레이블을 사용합니다. 중복 제거가 제대로 작동하려면 `__replica__` 및 `cluster` 레이블을 모두 적용해야 합니다.

**참고**  
`__replica__` 레이블은 단어 `replica` 앞뒤에 두 개의 밑줄 기호를 사용하여 서식이 지정되어 있습니다.

**예제: 코드 조각**

다음 코드 조각에서 `cluster` 레이블은 Prometheus 인스턴스 에이전트 `prom-team1`을 식별하고 `_replica_` 레이블은 복제본 `replica1` 및 `replica2`를 식별합니다.

```
cluster: prom-team1
__replica__: replica1
```

```
cluster: prom-team1
__replica__: replica2
```

Amazon Managed Service for Prometheus는 이러한 레이블과 함께 고가용성 복제본의 데이터 샘플을 저장하므로 샘플이 승인되면 `replica` 레이블이 제거됩니다. 즉, 현재 시리즈에 대해 복제본당 시리즈가 아닌 1:1 시리즈 매핑만 사용할 수 있습니다. `cluster` 레이블은 유지됩니다.

**참고**  
특정 버전의 Kubernetes(1.28 및 1.29)는 `cluster` 레이블이 있는 자체 지표를 내보낼 수 있습니다. 이로 인해 Amazon Managed Service for Prometheus 중복 제거에 문제가 발생할 수 있습니다. 자세한 내용은 [고가용성 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)를 참조하세요.

# Prometheus Operator Helm 차트를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 설정
<a name="Send-high-availability-data-operator"></a>

Helm에서 Prometheus Operator를 사용하여 고가용성 구성을 설정하려면 Amazon Managed Service for Prometheus에서 식별할 수 있도록 고가용성 그룹의 모든 인스턴스에 외부 레이블을 적용해야 합니다. 또한 Prometheus Operator 차트 Helm에서도 `replicaExternalLabelName` 및 `externalLabels` 속성을 설정해야 합니다.

**예제: YAML 헤더**

다음 YAML 헤더에서는 Prometheus 인스턴스 에이전트를 고가용성 그룹의 일부로 식별하기 위해 `externalLabel`에 `cluster`가 추가되고 `replicaExternalLabels`는 그룹 내의 각 복제본을 식별합니다.

```
replicaExternalLabelName: __replica__
externalLabels:
cluster: prom-dev
```

**참고**  
특정 버전의 Kubernetes(1.28 및 1.29)는 `cluster` 레이블이 있는 자체 지표를 내보낼 수 있습니다. 이로 인해 Amazon Managed Service for Prometheus 중복 제거에 문제가 발생할 수 있습니다. 자세한 내용은 [고가용성 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)를 참조하세요.

# AWS Distro for OpenTelemetry를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
<a name="Send-high-availability-data-ADOT"></a>

AWS Distro for OpenTelemetry(ADOT)는 OpenTelemetry 프로젝트의 안전하고 프로덕션에 바로 사용할 수 있는 배포판입니다. ADOT는 소스 API, 라이브러리 및 에이전트를 제공하므로 애플리케이션 모니터링을 위한 분산 추적 및 지표를 수집할 수 있습니다. ADOT에 대한 자세한 내용은 [AWS Distro for Open Telemetry 정보를](https://aws-otel.github.io/about) 참조하세요.

고가용성 구성으로 ADOT를 설정하려면 ADOT 수집기 컨테이너 이미지를 구성하고 외부 레이블 `cluster` 및를 AWS Prometheus 원격 쓰기 내보내기`__replica__`에 적용해야 합니다. 이 내보내기는 스크래핑한 지표를 `remote_write` 엔드포인트를 통해 Amazon Managed Service for Prometheus WorkSpace로 보냅니다. 원격 쓰기 내보내기에서 이러한 레이블을 설정하면 중복 복제본이 실행되는 동안 중복 지표가 유지되는 것을 방지할 수 있습니다. AWS Prometheus 원격 쓰기 내보내기에 대한 자세한 내용은 [Amazon Managed Service for Prometheus용 Prometheus 원격 쓰기 내보내기 시작하기를 참조하세요](https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter).

**참고**  
특정 버전의 Kubernetes(1.28 및 1.29)는 `cluster` 레이블이 있는 자체 지표를 내보낼 수 있습니다. 이로 인해 Amazon Managed Service for Prometheus 중복 제거에 문제가 발생할 수 있습니다. 자세한 내용은 [고가용성 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)를 참조하세요.

# Prometheus 커뮤니티 Helm 차트를 사용하여 Amazon Managed Service for Prometheus로 고가용성 데이터 전송
<a name="Send-high-availability-prom-community"></a>

Prometheus 커뮤니티 Helm 차트를 사용하여 고가용성 구성을 설정하려면 Amazon Managed Service for Prometheus에서 식별할 수 있도록 고가용성 그룹의 모든 인스턴스에 외부 레이블을 적용해야 합니다. 다음은 Prometheus 커뮤니티 차트 Helm에서 Prometheus의 단일 인스턴스에 `external_labels`를 추가하는 방법의 예입니다.

```
server:
global:
  external_labels:
      cluster: monitoring-cluster
      __replica__: replica-1
```

**참고**  
Prometheus 커뮤니티 Helm 차트에서는 컨트롤러 그룹에서 직접 복제본 수를 늘릴 때 복제본 값을 동적으로 설정할 수 없으므로 여러 복제본을 원하는 경우 다른 복제본 값을 사용하여 차트를 여러 번 배포해야 합니다. `replica` 레이블이 자동으로 설정되도록 하려면 prometheus-operator Helm 차트를 사용하세요.

**참고**  
특정 버전의 Kubernetes(1.28 및 1.29)는 `cluster` 레이블이 있는 자체 지표를 내보낼 수 있습니다. 이로 인해 Amazon Managed Service for Prometheus 중복 제거에 문제가 발생할 수 있습니다. 자세한 내용은 [고가용성 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)를 참조하세요.

# Amazon Managed Service for Prometheus의 고가용성 구성에 대한 일반적인 질문과 답변
<a name="HA_FAQ"></a>

## 샘플 포인트를 추적하려면 *\$1\$1replica\$1\$1* 값을 다른 레이블에 포함해야 하나요?
<a name="HA_FAQ_replica-label"></a>

 고가용성 설정에서 Amazon Managed Service for Prometheus는 Prometheus 인스턴스 클러스터의 리더를 선택하여 데이터 샘플이 중복되지 않도록 합니다. 리더 복제본이 30초 동안 데이터 샘플 전송을 중단하면 Amazon Managed Service for Prometheus는 자동으로 다른 Prometheus 인스턴스를 리더 복제본으로 만들고 새 리더로부터 누락된 데이터를 비롯한 데이터를 수집합니다. 따라서 대답은 '아니요'로, 이 작업은 권장되지 않습니다.  이렇게 하면 다음과 같은 문제가 발생할 수 있습니다.
+  새 리더를 선택하는 기간 동안 **PromQL에서** `count`를 쿼리하면 예상보다 높은 값이 반환될 수 있습니다.
+  새 리더를 선택하는 기간 동안 `active series` 수가 증가하여 `active series limits`에 도달합니다. 자세한 내용은 [AMP 할당량](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP_quotas.html)을 참조하세요.

## Kubernetes에 자체 *클러스터* 레이블이 있는 것으로 보이며 내 지표의 중복을 제거하지 않습니다. 해결하려면 어떻게 해야 합니까?
<a name="HA_FAQ_cluster-label"></a>

Kubernetes 1.28에 `cluster` 레이블이 있는 새로운 지표 `apiserver_storage_size_bytes`가 도입되었습니다. 이로 인해 `cluster` 레이블에 따라 Amazon Managed Service for Prometheus에서 중복 제거 문제가 발생할 수 있습니다. Kubernetes 1.3에서는 레이블의 이름이 `storage-cluster_id`로 변경됩니다(이름은 이후 패치인 1.28 및 1.29에서도 변경됩니다). 클러스터가 `cluster` 레이블이 있는 이 지표를 내보내는 경우 Amazon Managed Service for Prometheus는 연결된 시계열을 중복 제거할 수 없습니다. 이 문제를 방지하려면 Kubernetes 클러스터를 최신 패치 버전으로 업그레이드하는 것이 좋습니다. 또는 Amazon Managed Service for Prometheus에 수집하기 전에 `apiserver_storage_size_bytes` 지표의 `cluster` 레이블을 다시 지정할 수 있습니다.

**참고**  
Kubernetes 변경에 대한 자세한 내용은 *Kubernetes GitHub 프로젝트*의 [apiserver\$1storage\$1size\$1bytes 지표에 대한 레이블 클러스터 이름을 storage\$1cluster\$1id로 변경](https://github.com/kubernetes/kubernetes/pull/124283)을 참조하세요.

# 리전 간 워크스페이스를 사용하여 Amazon Managed Service for Prometheus에서 고가용성 추가
<a name="AMP-send-to-multiple-workspaces"></a>

데이터에 리전 간 가용성을 추가하려면 여러 AWS 리전의 여러 워크스페이스로 지표를 보낼 수 있습니다. Prometheus는 다중 작성자와 교차 리전 쓰기를 모두 지원합니다.

다음 예제는 에이전트 모드에서 실행되는 Prometheus 서버가 Helm을 사용하여 서로 다른 리전의 두 WorkSpace에 지표를 보내도록 설정하는 방법을 보여 줍니다.

```
extensions:
      sigv4auth:
        service: "aps"
     
    receivers:
      prometheus:
        config:
          scrape_configs:
            - job_name: 'kubernetes-kubelet'
              scheme: https
              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
              kubernetes_sd_configs:
              - role: node
              relabel_configs:
              - action: labelmap
                regex: __meta_kubernetes_node_label_(.+)
              - target_label: __address__
                replacement: kubernetes.default.svc.cluster.local:443
              - source_labels: [__meta_kubernetes_node_name]
                regex: (.+)
                target_label: __metrics_path__
                replacement: /api/v1/nodes/$${1}/proxy/metrics
     
    exporters:
      prometheusremotewrite/one:
        endpoint: "https://aps-workspaces.workspace_1_region.amazonaws.com/workspaces/ws-workspace_1_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
      prometheusremotewrite/two:
        endpoint: "https://aps-workspaces.workspace_2_region.amazonaws.com/workspaces/ws-workspace_2_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
     
    service:
      extensions: [sigv4auth]
      pipelines:
        metrics/one:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/one]
        metrics/two:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/two]
```