

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

# 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초 미만으로 지정할 수 없습니다.