EKS 캐퍼빌리티 컨트롤러 로그 접근하기

EKS 캐퍼빌리티 컨트롤러 로그 접근하기

ACK, kro, Argo CD 용 EKS 캐퍼빌리티 컨트롤러 로그에 접근하고 Amazon CloudWatch Vended Logs로 로그 전달을 구성하는 방법을 설명합니다.

출처: 문서

본문

ACK, kro, Argo CD 용 EKS 캐퍼빌리티 컨트롤러는 클러스터 밖의 AWS 관리 인프라에서 실행됩니다. 이 컨트롤러들의 로그 전달을 Amazon CloudWatch Vended Logs를 사용해 구성하면 모니터링과 문제 해결을 위해 컨트롤러 동작을 관찰할 수 있습니다.

로그는 구조화된 JSON 형식으로 전달되며 로그 레벨, 메시지, 컨트롤러 이름, 리컨실리에이션 식별자 등의 운영 필드를 포함합니다. 전달 전에 내부 AWS 메타데이터는 필터링되므로, 캐퍼빌리티 컨트롤러와 관련된 운영 로그 내용만 받게 됩니다.

지원되는 로그 유형

각 캐퍼빌리티에는 하나 이상의 로그 유형이 있으며, 이를 CloudWatch Vended Logs 전달 소스로 개별 구성할 수 있습니다.

ACK

  • EKS_CAPABILITY_ACK_LOGS

kro

  • EKS_CAPABILITY_KRO_LOGS

Argo CD

  • EKS_CAPABILITY_ARGOCD_APPLICATION_LOGS
  • EKS_CAPABILITY_ARGOCD_APPLICATIONSET_LOGS
  • EKS_CAPABILITY_ARGOCD_COMMITSERVER_LOGS
  • EKS_CAPABILITY_ARGOCD_REPOSERVER_LOGS
  • EKS_CAPABILITY_ARGOCD_SERVER_LOGS

ACK는 모든 ACK 서비스 컨트롤러를 포괄하는 단일 로그 유형을 사용합니다. 로그 레코드에는 어떤 ACK 서비스 컨트롤러가 로그를 생성했는지 식별해 주는 controllerGroup 필드(예: s3.services.k8s.aws, rds.services.k8s.aws)가 포함됩니다. 이 필드를 사용해 CloudWatch Logs Insights나 다른 쿼리 도구에서 특정 서비스 컨트롤러의 로그를 필터링할 수 있습니다.

Argo CD에는 컨트롤러 구성 요소별로 다섯 개의 개별 로그 유형이 있습니다. 이렇게 하면 필요한 컨트롤러에 대해서만 로깅을 켜고 서로 다른 대상으로 라우팅할 수 있습니다.

로그 전달 구성하기

캐퍼빌리티 컨트롤러 로그 전달을 구성하려면 AWS Management Console 또는 Amazon CloudWatch Logs API를 사용합니다. 자세한 설정 방법은 Amazon CloudWatch Logs 사용자 가이드의 AWS 서비스 로깅 활성화를 참고하세요. 각 캐퍼빌리티 컨트롤러는 개별 CloudWatch Vended Logs 전달 소스로 구성할 수 있으므로 받을 로그를 선택할 수 있습니다.

콘솔

  1. https://console.aws.amazon.com/eks/home#/clusters 에서 Amazon EKS 콘솔을 엽니다.
  2. 클러스터 이름을 선택합니다.
  3. Capabilities 탭을 선택한 다음 캐퍼빌리티를 선택합니다.
  4. Log delivery 섹션에서 Add를 선택합니다.
  5. 캐퍼빌리티의 로그 유형을 선택하고 대상을 선택합니다.
  6. Add를 선택해 전달을 생성합니다.

Amazon CloudWatch API 사용

로깅을 설정하려면 세 단계가 필요합니다.

  1. CloudWatch PutDeliverySource API로 캐퍼빌리티의 전달 소스를 생성합니다. 캐퍼빌리티 ARN을 resourceArn으로 사용하고 원하는 로그 유형을 지정합니다.
  2. PutDeliveryDestination으로 전달 대상을 생성합니다. CloudWatch 로그 그룹, S3 버킷, Amazon Data Firehose 전달 스트림의 ARN을 지정합니다.
  3. CreateDelivery로 소스와 대상을 연결하는 전달을 생성합니다.

캐퍼빌리티 ARN은 describe-capability 명령으로 가져올 수 있습니다.

aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability \
  --query 'capability.capabilityArn' --output text

단일 캐퍼빌리티(전달 소스)가 여러 대상으로 로그를 보내도록 여러 전달을 만들 수도 있고, 여러 캐퍼빌리티의 로그를 같은 대상으로 보낼 수도 있습니다.

IAM 권한

선택한 대상에 따라 CloudWatch 로그 그룹, S3 버킷, Data Firehose 전달 스트림에 대해 IAM 정책이나 역할을 구성해야 로그 전달이 성공할 수 있습니다. 서로 다른 AWS 계정 간에 로그를 보낼 때는 PutDeliveryDestinationPolicy API를 사용해 대상으로의 전달을 허용하는 IAM 정책을 구성하세요. 추가 정보는 CloudWatch Vended Logs 권한 문서를 참고하세요.

예시: CloudWatch Logs Insights로 로그 쿼리하기

모든 컨트롤러의 오류 로그를 보려면 다음을 사용합니다.

fields @timestamp, controller, message, error
| filter level = "error"
| sort @timestamp desc
| limit 50

서비스 컨트롤러별 필터링, 리컨실리에이션 주기 추적, Argo CD 애플리케이션 필터링을 포함한 더 많은 쿼리 예시는 문제 해결에 컨트롤러 로그 사용하기를 참고하세요.

로그 보기

로그 전달을 구성한 후에는 지정한 대상으로 로그가 전달됩니다. 로그에 접근하는 방법은 선택한 대상 유형에 따라 다릅니다.

  • CloudWatch Logs — CloudWatch Logs 콘솔에서 로그를 보거나 AWS CLI 명령을 사용하거나 CloudWatch Logs Insights로 쿼리합니다.
  • Amazon S3 — S3 콘솔, AWS CLI, Amazon Athena 같은 분석 도구를 통해 S3 버킷의 객체로 로그에 접근합니다.
  • Amazon Data Firehose — 로그는 구성한 Firehose 대상(예: S3, OpenSearch Service, Redshift 등)으로 스트리밍됩니다.

요금

선택한 전달 대상에 따라 CloudWatch Vended Logs 요금이 로그 전달과 저장에 적용됩니다. CloudWatch Vended Logs는 AWS의 인증과 권한 부여가 내장된 안정적이고 안전한 로그 전달을 표준 CloudWatch Logs보다 저렴한 가격으로 제공합니다. 자세한 내용은 CloudWatch 요금 페이지의 Vended Logs 섹션을 참고하세요.

더 알아보기 (Learn more)