

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# kubectl 및 S3를 사용하여 관리형 노드에 대한 노드 로그 검색
<a name="auto-get-logs"></a>

노드 모니터링 에이전트가 있는 Amazon EKS 관리형 노드에 대한 노드 로그를 검색하는 방법을 알아봅니다.

## 사전 조건
<a name="_prerequisites"></a>

다음 항목이 준비되어 있는지 확인합니다.
+ 기존 Amazon EKS 클러스터에 노드 모니터링 에이전트가 있습니다. 자세한 내용은 [노드 상태 문제 감지 및 노드 자동 복구 활성화](node-health.md) 섹션을 참조하세요.
+ 클러스터와의 통신을 위해 `kubectl` 명령줄 도구가 설치 및 구성되어 있습니다.
+ S3 버킷 및 객체를 생성할 수 있는 충분한 권한을 가지고 AWS CLI를 설치하고 로그인했습니다.
+ 최신 버전의 Python 3가 설치되어 있습니다.
+ AWS SDK for Python 3, Boto 3가 설치되어 있습니다.

## 1단계: S3 버킷 대상 생성(선택 사항)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

아직 로그를 저장할 S3 버킷이 없는 경우 한 개를 생성합니다. 다음 AWS CLI 명령을 사용합니다. 버킷은 기본적으로 `private` 액세스 제어 목록으로 설정됩니다. {{bucket-name}}을 선택한 고유의 버킷 이름으로 바꿉니다.

```
aws s3api create-bucket --bucket {{<bucket-name>}}
```

## 2단계: HTTP Put에 대해 미리 서명된 S3 URL 생성
<a name="_step_2_create_pre_signed_s3_url_for_http_put"></a>

Amazon EKS는 HTTP PUT 작업을 수행하여 노드 로그를 지정한 URL로 반환합니다. 이 자습서에서는 미리 서명된 S3 HTTP PUT URL을 생성합니다.

로그는 `.tar.gz` 확장과 함께 gzip tarball로 반환됩니다.

**참고**  
AWS API 또는 SDK를 사용하여 EKS에 대해 미리 서명된 S3 업로드 URL을 생성하고 로그 파일을 업로드해야 합니다. AWS CLI를 사용하여 미리 서명된 S3 업로드 URL을 생성할 수 없습니다.

1. 버킷에서 로그를 저장할 위치를 결정합니다. 예를 들어 {{2024-11-12/logs1.tar.gz}}를 키로 사용할 수 있습니다.

1. 다음 Python 코드를 {{presign-upload.py}} 파일에 저장하세요. {{<bucket-name>}} 및 {{<key>}}를 바꾸세요. 키는 `.tar.gz`로 끝나야 합니다.

   ```
   import boto3; print(boto3.client('s3').generate_presigned_url(
      ClientMethod='put_object',
      Params={'Bucket': '<bucket-name>', 'Key': '<key>'},
      ExpiresIn=1000
   ))
   ```

1. 스크립트를 실행합니다.

   ```
   python presign-upload.py
   ```

1. URL 출력을 기록해 둡니다. 다음 단계에서 이 값을 {{http-put-destination}}으로 사용합니다.

자세한 내용은 AWS Boto3 SDK for Python 설명서에서 [Generate a presigned URL to upload a file](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html#generating-a-presigned-url-to-upload-a-file)을 참조하세요.

## 3단계: NodeDiagnostic 리소스 생성
<a name="_step_3_create_nodediagnostic_resource"></a>

로그를 수집할 노드의 이름을 식별합니다.

노드 이름을 리소스 이름으로 사용하고 HTTP PUT URL 대상을 제공하는 `NodeDiagnostic` 매니페스트를 생성합니다.

```
apiVersion: eks.amazonaws.com/v1alpha1
kind: NodeDiagnostic
metadata:
    name: {{<node-name>}}
spec:
    logCapture:
        destination: {{http-put-destination}}
```

매니페스트를 클러스터에 적용합니다.

```
kubectl apply -f nodediagnostic.yaml
```

`NodeDiagnostic` 리소스를 설명하여 컬렉션 상태를 확인할 수 있습니다.
+ `Success` 또는 `SuccessWithErrors` 상태는 작업이 완료되고 로그가 제공된 대상으로 업로드되었음을 나타냅니다(`SuccessWithErrors`는 일부 로그가 누락되었을 수 있음을 나타냄).
+ 상태가 실패인 경우 업로드 URL이 잘 구성되고 만료되지 않았는지 확인합니다.

```
kubectl describe nodediagnostics.eks.amazonaws.com/{{<node-name>}}
```

## 4단계: S3에서 로그 다운로드
<a name="_step_4_download_logs_from_s3"></a>

로그 다운로드를 시도하기 전에 1분 정도 기다립니다. 그런 다음 S3 CLI를 사용하여 로그를 다운로드합니다.

```
# Once NodeDiagnostic shows Success status, download the logs
aws s3 cp s3://{{<bucket-name>}}/{{key}} ./{{<path-to-node-logs>}}.tar.gz
```

## 5단계: NodeDiagnostic 리소스 정리
<a name="_step_5_clean_up_nodediagnostic_resource"></a>
+  `NodeDiagnostic` 리소스는 자동으로 삭제되지 않습니다. 로그 아티팩트를 가져온 후에 이를 직접 정리해야 합니다.

```
# Delete the NodeDiagnostic resource
kubectl delete nodediagnostics.eks.amazonaws.com/{{<node-name>}}
```

## NodeDiagnostic `node` 대상
<a name="_nodediagnostic_node_destination"></a>

노드 모니터링 에이전트의 `v1.6.1-eksbuild.1` 버전부터 로그 수집 대상을 `node`로 설정하는 옵션이 있습니다. 이 대상을 사용하면 나중에 수집할 수 있도록 노드에서 로그가 수집되고 일시적으로 유지됩니다. 이 기능 외에도 노드 모니터링 에이전트의 GitHub 리포지토리 내에는 간편한 상호 작용 및 로그 수집을 위해 설치할 수 있는 `kubectl` 플러그인이 있습니다. 자세한 내용은 [`kubectl ekslogs` 플러그인에 대한 설명서](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/kubectl-ekslogs/README.md)를 참조하세요.

## 사용 예
<a name="_example_usage"></a>

```
# Collect NodeDiagnostic logs from a single node
kubectl ekslogs <node-name>

# Collect NodeDiagnostic logs from multiple nodes
kubectl ekslogs <node-name-1> <node-name-2> <node-name-3>

# Collect NodeDiagnostic logs from all nodes with a specific label
kubectl ekslogs -l <key>=<value>
```