kubectl과 S3를 사용하여 관리형 노드 로그 검색
kubectl과 S3를 사용하여 관리형 노드 로그 검색
노드 모니터링 에이전트가 있는 Amazon EKS 관리형 노드의 로그를 검색하는 방법을 설명합니다.
출처: 문서
본문
노드 모니터링 에이전트가 있는 Amazon EKS 관리형 노드의 로그를 검색하는 방법을 알아봅니다.
사전 요구 사항
다음을 갖추고 있는지 확인하세요.
- 노드 모니터링 에이전트가 있는 기존 Amazon EKS 클러스터. 자세한 내용은 노드 상태 문제 감지 및 자동 노드 복구 활성화를 참조하세요.
- 클러스터와 통신하도록 설치 및 구성된
kubectl명령줄 도구. - S3 버킷과 객체를 만들 수 있는 충분한 권한으로 설치 및 로그인된 AWS CLI.
- 최신 버전의 Python 3 설치.
- Python 3용 AWS SDK인 Boto 3 설치.
Step 1: S3 버킷 목적지 생성(선택 사항)
로그를 저장할 S3 버킷이 아직 없다면 하나 생성합니다. 다음 AWS CLI 명령을 사용하세요. 버킷은 기본적으로 private 액세스 제어 목록으로 설정됩니다. bucket-name을 선택한 고유 버킷 이름으로 바꾸세요.
aws s3api create-bucket --bucket <bucket-name>
Step 2: HTTP PUT용 사전 서명된 S3 URL 생성
Amazon EKS는 지정한 URL에 HTTP PUT 작업을 수행하여 노드 로그를 반환합니다. 이 튜토리얼에서는 사전 서명된 S3 HTTP PUT URL을 생성합니다.
로그는 .tar.gz 확장자의 gzip 타arball로 반환됩니다.
참고
EKS가 로그 파일을 업로드할 사전 서명된 S3 업로드 URL을 만들려면 AWS API 또는 SDK를 사용해야 합니다. AWS CLI로는 사전 서명된 S3 업로드 URL을 만들 수 없습니다.
버킷의 어디에 로그를 저장할지 결정합니다. 예를 들어 2024-11-12/logs1.tar.gz를 키로 사용할 수 있습니다.
다음 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
))
다음으로 스크립트를 실행합니다.
python presign-upload.py
URL 출력을 기록해 두세요. 이 값을 다음 단계에서 http-put-destination으로 사용합니다.
자세한 내용은 AWS Boto3 SDK for Python 문서의 파일 업로드용 사전 서명된 URL 생성을 참조하세요.
Step 3: NodeDiagnostic 자원 생성
로그를 수집하려는 노드의 이름을 식별합니다.
노드의 이름을 자원의 이름으로 사용하고 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 자원을 설명(describe)하여 수집의 상태를 확인할 수 있습니다.
Success또는SuccessWithErrors상태는 작업이 완료되고 로그가 제공된 목적지로 업로드되었음을 나타냅니다(SuccessWithErrors는 일부 로그가 누락될 수 있음을 나타냅니다).- 상태가
Failure이면 업로드 URL이 형식이 올바르고 만료되지 않았는지 확인하세요.
kubectl describe nodediagnostics.eks.amazonaws.com/<node-name>
Step 4: S3에서 로그 다운로드
로그를 다운로드하기 전에 약 1분간 기다립니다. 그런 다음 S3 CLI를 사용하여 로그를 다운로드합니다.
# Once NodeDiagnostic shows Success status, download the logs
aws s3 cp s3://<bucket-name>/<key> ./
logs.tar.gz
Step 5: NodeDiagnostic 자원 정리
NodeDiagnostic 자원은 자동으로 삭제되지 않습니다. 로그 아티팩트를 확보한 후 직접 정리해야 합니다.
# Delete the NodeDiagnostic resource
kubectl delete nodediagnostics.eks.amazonaws.com/<node-name>
NodeDiagnostic node 목적지
Node Monitoring Agent 버전 v1.6.1-eksbuild.1부터 로그 수집 목적지를 node로 설정하는 옵션이 있습니다. 이 목적지를 사용하면 로그가 나중에 수집할 수 있도록 노드에 수집되어 임시로 보존됩니다. 이 기능 외에도 Node Monitoring Agent의 GitHub 저장소에는 상호 작용과 로그 수집을 쉽게 하는 kubectl 플러그인이 있습니다. 자세한 내용은 kubectl ekslogs 플러그인 문서를 참조하세요.
사용 예시
# Collect NodeDiagnostic logs from a single node
kubectl ekslogs <node-name>
# Collect NodeDiagnostic logs from multiple nodes
kubectl ekslogs <node-1> <node-2>
# Collect NodeDiagnostic logs from all nodes with a specific label
kubectl ekslogs -l <label-key>=<label-value>