컨트롤 플레인 로그를 CloudWatch Logs로 보내기

컨트롤 플레인 로그를 CloudWatch Logs로 보내기

Amazon EKS 컨트롤 플레인 로깅은 Amazon EKS 컨트롤 플레인에서 계정의 CloudWatch Logs로 감사 및 진단 로그를 직접 제공해요. 이러한 로그 덕분에 클러스터를 쉽게 보호하고 운영할 수 있어요. 필요한 로그 유형을 정확히 선택할 수 있으며, 로그는 CloudWatch의 각 Amazon EKS 클러스터 그룹에 로그 스트림으로 전송돼요. CloudWatch 구독 필터(subscription filters)를 사용해 로그에 대한 실시간 분석을 하거나 다른 서비스로 전달할 수 있어요(로그는 Base64로 인코딩되고 gzip 형식으로 압축돼요). 자세한 내용은 Amazon CloudWatch 로깅을 참고하세요.

참고

Amazon EKS 컨트롤 플레인 로그는 몇 분 안에 CloudWatch Logs로 전달돼요. 다만 로그 전달은 best effort로 이뤄져요.

새 Amazon EKS 클러스터와 기존 클러스터 각각에 대해 활성화할 로그 유형을 선택해 Amazon EKS 컨트롤 플레인 로깅을 사용할 수 있어요. AWS Management Console, AWS CLI(버전 1.16.139 이상) 또는 Amazon EKS API로 각 로그 유형을 클러스터별로 활성화하거나 비활성화할 수 있어요. 활성화하면 로그가 Amazon EKS 클러스터에서 같은 계정의 CloudWatch Logs로 자동 전송돼요.

Amazon EKS 컨트롤 플레인 로깅을 사용하면 실행하는 각 클러스터에 대해 표준 Amazon EKS 요금이 부과돼요. 클러스터에서 CloudWatch Logs로 전송되는 모든 로그에 대해서는 표준 CloudWatch Logs 데이터 수집 및 저장 비용이 부과돼요. 또한 클러스터의 일부로 프로비저닝하는 Amazon EC2 인스턴스나 Amazon EBS 볼륨 같은 AWS 리소스에 대해서도 요금이 부과돼요.

다음 클러스터 컨트롤 플레인 로그 유형을 사용할 수 있어요. 각 로그 유형은 Kubernetes 컨트롤 플레인의 한 구성 요소에 해당해요. 이러한 구성 요소에 대해 더 알아보려면 Kubernetes 문서의 Kubernetes Components를 참고하세요.

  • API server (api) – 클러스터의 API 서버는 Kubernetes API를 노출하는 컨트롤 플레인 구성 요소예요. 클러스터를 시작할 때나 그 직후에 API 서버 로그를 활성화하면 로그에 API 서버를 시작할 때 사용된 API 서버 플래그가 포함돼요. 자세한 내용은 Kubernetes 문서의 kube-apiserver와 audit policy를 참고하세요.
  • Audit (audit) – Kubernetes 감사 로그는 클러스터에 영향을 준 개별 사용자, 관리자 또는 시스템 구성 요소의 기록을 제공해요. 자세한 내용은 Kubernetes 문서의 Auditing을 참고하세요.
  • Authenticator (authenticator) – Authenticator 로그는 Amazon EKS에만 있는 로그예요. 이 로그는 Amazon EKS가 IAM 자격 증명으로 Kubernetes RBAC(Role Based Access Control) 인증에 사용하는 컨트롤 플레인 구성 요소를 나타내요. 자세한 내용은 클러스터 리소스 구성 및 모니터링을 참고하세요.
  • Controller manager (controllerManager) – 컨트롤러 매니저는 Kubernetes와 함께 제공되는 핵심 컨트롤 루프를 관리해요. 자세한 내용은 Kubernetes 문서의 kube-controller-manager를 참고하세요.
  • Scheduler (scheduler) – 스케줄러 구성 요소는 클러스터에서 언제 어디서 Pod를 실행할지 관리해요. 자세한 내용은 Kubernetes 문서의 kube-scheduler를 참고하세요.

출처: 문서

본문

컨트롤 플레인 로그 활성화 또는 비활성화

기본적으로 클러스터 컨트롤 플레인 로그는 CloudWatch Logs로 전송되지 않아요. 클러스터의 로그를 보내려면 각 로그 유형을 개별적으로 활성화해야 해요. CloudWatch Logs 수집, 아카이브 스토리지, 데이터 스캔 요금이 활성화된 컨트롤 플레인 로그에 적용돼요. 자세한 내용은 CloudWatch pricing을 참고하세요.

컨트롤 플레인 로깅 구성을 업데이트하려면 Amazon EKS가 각 서브넷에 최대 5개의 사용 가능한 IP 주소가 필요해요. 로그 유형을 활성화하면 로그가 로그 상세 수준(verbosity) 2로 전송돼요.

컨트롤 플레인 로그는 AWS Management Console이나 AWS CLI로 활성화하거나 비활성화할 수 있어요.

AWS Management Console

  1. Amazon EKS 콘솔을 엽니다.
  2. 클러스터의 이름을 선택해 클러스터 정보를 표시합니다.
  3. Observability 탭을 선택합니다.
  4. Control plane logging 섹션에서 Manage logging을 선택합니다.
  5. 각 개별 로그 유형에 대해 로그 유형을 켤지 끌지 선택합니다. 기본적으로 각 로그 유형은 꺼져 있어요.
  6. Save changes를 선택해 마칩니다.

AWS CLI

  1. 다음 명령으로 AWS CLI 버전을 확인합니다.
aws --version
  1. AWS CLI 버전이 1.16.139보다 낮다면 먼저 최신 버전으로 업데이트해야 합니다. AWS CLI 설치 또는 업그레이드는 AWS Command Line Interface 사용자 가이드의 Installing the AWS Command Line Interface를 참고하세요.
  2. 다음 AWS CLI 명령으로 클러스터의 컨트롤 플레인 로그 내보내기 구성을 업데이트합니다. my-cluster를 클러스터 이름으로 바꾸고 원하는 엔드포인트 접근 값을 지정하세요.

참고

다음 명령은 사용 가능한 모든 로그 유형을 CloudWatch Logs로 보내요.

aws eks update-cluster-config \
    --region region-code \
    --name my-cluster \
    --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

출력 예시는 다음과 같아요.

{
    "update": {
        "id": "883405c8-65c6-4758-8cee-2a7c1340a6d9",
        "status": "InProgress",
        "type": "LoggingUpdate",
        "params": [
            {
                "type": "ClusterLogging",
                "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}"
            }
        ],
        "createdAt": 1553271814.684,
        "errors": []
    }
}
  1. 이전 명령에서 반환된 클러스터 이름과 업데이트 ID를 사용해 다음 명령으로 로그 구성 업데이트 상태를 모니터링합니다. 상태가 Successful로 표시되면 업데이트가 완료된 거예요.
aws eks describe-update \
    --region region-code \
    --name my-cluster \
    --update-id 883405c8-65c6-4758-8cee-2a7c1340a6d9

출력 예시는 다음과 같아요.

{
    "update": {
        "id": "883405c8-65c6-4758-8cee-2a7c1340a6d9",
        "status": "Successful",
        "type": "LoggingUpdate",
        "params": [
            {
                "type": "ClusterLogging",
                "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}"
            }
        ],
        "createdAt": 1553271814.684,
        "errors": []
    }
}

클러스터 컨트롤 플레인 로그 보기

Amazon EKS 클러스터의 컨트롤 플레인 로그 유형 중 하나를 활성화한 뒤에는 CloudWatch 콘솔에서 이를 볼 수 있어요.

CloudWatch에서 로그를 보고·분석하고·관리하는 방법에 대한 자세한 내용은 Amazon CloudWatch Logs 사용자 가이드를 참고하세요.

  1. CloudWatch 콘솔을 엽니다. 이 링크는 콘솔을 열고 현재 사용 가능한 로그 그룹을 /aws/eks 접두사로 필터링해 표시합니다.
  2. 로그를 보려는 클러스터를 선택합니다. 로그 그룹 이름 형식은 /aws/eks/my-cluster/cluster이에요.
  3. 볼 로그 스트림을 선택합니다. 다음 목록은 각 로그 유형의 로그 스트림 이름 형식을 설명해요.

참고

로그 스트림 데이터가 커지면 로그 스트림 이름이 회전(rotate)돼요. 특정 로그 유형에 대해 여러 로그 스트림이 존재하면 가장 최근 Last event time이 있는 로그 스트림 이름을 찾아 최신 로그 스트림을 볼 수 있어요.

  • Kubernetes API 서버 구성 요소 로그 (api) – kube-apiserver-1234567890abcdef01234567890abcde
  • Audit (audit) – kube-apiserver-audit-1234567890abcdef01234567890abcde
  • Authenticator (authenticator) – authenticator-1234567890abcdef01234567890abcde
  • Controller manager (controllerManager) – kube-controller-manager-1234567890abcdef01234567890abcde
  • Scheduler (scheduler) – kube-scheduler-1234567890abcdef01234567890abcde
  1. 로그 스트림의 이벤트를 살펴봅니다.

예를 들어 kube-apiserver-1234567890abcdef01234567890abcde의 위쪽을 보면 클러스터의 초기 API 서버 플래그를 볼 수 있어야 해요.

참고

로그 스트림 시작 부분에 API 서버 로그가 보이지 않는다면, 서버에서 API 서버 로깅을 활성화하기 전에 API 서버 로그 파일이 서버에서 회전되었을 가능성이 높아요. API 서버 로깅이 활성화되기 전에 회전된 로그 파일은 CloudWatch로 내보낼 수 없어요.

다만 같은 Kubernetes 버전으로 새 클러스터를 만들고 클러스터를 만들 때 API 서버 로깅을 활성화할 수 있어요. 같은 플랫폼 버전의 클러스터는 같은 플래그가 활성화되어 있으므로 여러분의 플래그가 새 클러스터의 플래그와 일치할 거예요. CloudWatch에서 새 클러스터의 플래그 보기를 마친 뒤 새 클러스터를 삭제할 수 있어요.

더 알아보기 (Learn more)