내용으로 건너뛰기

Amazon EKS에서 로깅 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 로깅을 활성화할 때 발생하는 문제를 해결하고 싶습니다.

해결 방법

문제를 해결하기 전에 애플리케이션이 로그를 작성하는지 확인하십시오.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

네트워킹이 올바르게 구성되었는지 확인

AAmazon Virtual Private Cloud(Amazon VPC) 서브넷 및 보안 그룹에 대해 네트워킹이 올바르게 구성되어 있는지 확인합니다. 다음 사항을 확인하십시오.

  • 인터넷 게이트웨이를 사용하는 경우 라우팅 테이블과 올바르게 연결되었는지 확인합니다. 또한 수신 또는 발신 네트워크 트래픽이 올바르게 라우팅되고 있는지 확인합니다.
  • NAT 게이트웨이를 사용하는 경우 퍼블릭 서브넷 내에 NAT 게이트웨이가 올바르게 구성되어 있는지 확인합니다. 그런 다음, 연결된 라우팅 테이블이 올바르게 라우팅되고 있는지 검증합니다.
  • 인터넷 액세스가 제한된 프라이빗 클러스터가 있는 경우 클러스터에 올바른 정책이 연결된 com.amazonaws.region.logs VPC 인터페이스 엔드포인트가 있는지 확인합니다.
  • 서비스 계정이 있는 경우 AWS Identity and Access Management(IAM) 역할로 포드를 구성했을 수 있습니다. 아웃바운드 인터넷 액세스가 없는 경우 VPC에서 AWS Security Token Service(AWS STS) VPC 엔드포인트 com.amazonaws.region.logs를 사용해야 합니다.
  • 프라이빗 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에서 이미지를 가져와야 할 수 있습니다. NAT 게이트웨이 또는 아웃바운드 인터넷 액세스가 없는 경우 다음과 같은 VPC 엔드포인트와 Amazon Simple Storage Service(Amazon S3) 게이트웨이 엔드포인트가 필요합니다.
    com.amazonaws.region-code.s3
    com.amazonaws.region-code.ecr.api
    com.amazon.region-code.ecr.dkr
  • VPC 엔드포인트의 보안 그룹에는 포트 443의 트래픽을 허용하는 인바운드 규칙이 있어야 합니다. 또한 노드 보안 그룹이 VPC 엔드포인트에 대한 아웃바운드 트래픽을 허용하는지 확인합니다.

포드에 충분한 권한이 있는지 확인

서비스 계정에 IAM 역할이 있는 포드를 사용하는 경우 서비스 계정에 올바른 IAM 역할로 주석을 추가했는지 확인하십시오. 그런 다음, 클러스터의 IAM OpenID Connect(OIDC) 공급자를 만들었는지 확인하십시오.

서비스 계정의 IAM 역할 및 권한을 확인하려면 다음 단계를 완료하십시오.

  1. 서비스 계정의 IAM 역할을 설명하고 다음 주석이 있는지 확인합니다. 다음 명령을 실행합니다.

    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/YOUR-ROLE-NAME

    참고: YOUR-ROLE-NAME을 계정의 IAM 역할 이름으로 바꾸십시오.

  2. IAM 역할에 CloudWatchAgentServerPolicy가 연결되어 있는지 확인합니다. 또는 동일한 권한을 사용하는 정책이 있는지 확인합니다. 그렇지 않은 경우 노드 역할에 CloudWatchAgentServerPolicy가 연결되어 있는지 확인합니다.

Fluent Bit 구성 문제 해결

Fluent Bit 로그 라우터를 설치한 경우 포드가 실행 중이고 시스템이 Amazon CloudWatch로 로그를 전송하는지 확인하십시오. 그렇지 않으면 IAM 권한 또는 네트워킹에 문제가 있을 수 있습니다.

Fluent Bit 배포 및 구성 문제를 해결하려면 다음 사항을 확인하십시오.

Fluent Bit를 설치한 네임스페이스의 포드를 확인하려면 다음 명령을 실행합니다.

kubectl get pods -n NAMESPACE

참고: NAMESPACE를 네임스페이스의 이름으로 바꾸십시오.

노드에 테인트가 있는 경우 포드가 톨러레이션으로 구성되어 있는지 확인합니다.

포드가 RUNNING 이외의 상태인 경우 다음 명령을 실행하여 포드 이벤트를 확인합니다.

kubectl describe pod POD_NAME -n NAMESPACE

참고: POD_NAME을 포드 이름으로 바꾸고, NAMESPACE를 네임스페이스 이름으로 바꾸십시오.

포드 로그에서 오류를 확인하려면 다음 명령을 실행합니다.

kubectl logs POD_NAME -n NAMESPACE

참고: POD_NAME을 포드 이름으로 바꾸고, NAMESPACE를 네임스페이스 이름으로 바꾸십시오.

기본적으로 Fluent Bit의 로그 수준은 info로 설정됩니다. 더 많은 인사이트를 원하면 debug로 구성합니다. 자세한 내용은 Fluent Bit 웹 사이트의 구성 파일을 참조하십시오.

Fluent Bit ConfigMap 구성을 보려면 다음 명령을 실행합니다.

kubectl get cm CONFIGMAP_NAME -n NAMESPACE -o yaml

참고: CONFIGMAP_NAME을 ConfigMap 이름으로 바꾸고, NAMESPACE를 네임스페이스 이름으로 바꾸십시오.

서비스 계정과 연결된 노드 역할 또는 역할에 구성된 대상에 따라 올바른 IAM 권한이 있는지 확인합니다.

CloudWatch 에이전트 문제 해결

노드 IAM 역할에 필요한 권한이 있는지 확인합니다. 서비스 계정 역할이 있는 IAM 역할을 사용하는 경우 OIDC 공급자와 IAM 역할 및 정책을 만들었는지 확인하십시오. 서비스 계정에 적절한 IAM 역할로 올바르게 주석이 추가되었는지 확인합니다.

cloudwatch-agent DaemonSet 포드가 올바르게 실행되는지 확인합니다. 노드에 테인트가 있는 경우 포드가 톨러레이션으로 구성되어 있는지 확인합니다. 포드 목록을 가져오려면 다음 명령을 실행합니다.

kubectl logs POD_NAME -n amazon-cloudwatch

참고: POD_NAME을 포드 이름으로 바꾸십시오.

포드가 RUNNING 이외의 상태인 경우 포드 이벤트를 확인합니다. 다음 명령을 실행합니다.

kubectl describe pod POD_NAME -n amazon-cloudwatch

참고: POD_NAME을 포드 이름으로 바꾸십시오.

ConfigMap에서 클러스터 이름을 올바르게 설정했는지 확인합니다. 포드의 로그를 확인하려면 다음 명령을 실행합니다.

kubectl logs POD_NAME -n amazon-cloudwatch

참고: POD_NAME을 포드 이름으로 바꾸십시오.

DaemonSet에서 퍼블릭 이미지를 사용하는 경우 노드가 인터넷에 연결되어 있는지 확인하십시오. 프라이빗 리포지토리의 이미지를 사용하는 경우 필요한 트래픽이 허용되는지 확인하십시오.

Fargate 클러스터의 로깅 문제 해결

참고: AWS Fargate 로깅은 ConfigMap의 동적 구성을 지원하지 않습니다. 변경 사항은 기존 포즈에 적용되지 않으므로 ConfigMap에 대한 모든 변경 사항은 새 포드에만 적용됩니다.

aws-observability: enabled 레이블을 사용하여 aws-observability라는 네임스페이스를 만들었는지 확인하려면 다음 명령을 실행합니다.

kubectl get ns aws-observability -o yaml

Fargate 프로파일의 포드 실행 역할에 올바른 IAM 정책을 지정했는지 확인합니다. 예를 들어 CloudWatch로 로그를 전송하려는 경우 포드 실행 역할에 다음과 같은 권한이 있는지 확인하십시오.

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:CreateLogGroup",
            "logs:DescribeLogStreams",
            "logs:PutLogEvents",
            "logs:PutRetentionPolicy"
        ],
        "Resource": "*"
    }]
}

aws-observability 네임스페이스에서 ConfigMap을 올바르게 만들었는지 확인하십시오. ConfigMap이 Fargate에서 필드를 검증하는 데 사용하는 규칙과 일치하는지 확인합니다.

Fluent Bit 프로세스 로그가 없는 경우 ConfigMap에서 **flb_log_cw: "true"**를 설정했는지 확인하십시오.

Amazon EKS의 CloudWatch Observability 추가 기능 문제 해결

Amazon EKS의 CloudWatch Observability 추가 기능이 서비스 계정에 IAM 역할을 사용하는 경우 클러스터의 OIDC 공급자를 만들었는지 확인하십시오. 그런 다음, 서비스 계정을 올바른 역할로 구성했는지 확인합니다. 역할에는 CloudWatchAgentServerPolicy 정책이 연결되어 있어야 합니다.

AWS Management Console을 사용하여 관리형 추가 기능을 설치한 경우 콘솔에서 추가 기능의 포드와 상태가 활성 상태인지 확인하십시오. 추가 기능이 실패 상태인 경우 실패 원인을 확인하십시오. 마찬가지로 헬름을 사용하여 추가 기능을 설치한 경우 헬름이 성공적으로 설치되었는지 확인합니다.

기존 리소스에서 장애가 발생한 경우 추가 기능에 필요한 구성 요소가 이미 설치되어 있을 수 있습니다. 이전에 CloudWatch 에이전트를 설치한 경우 추가 기능을 설치하기 전에 클러스터에서 제거하십시오. 또한 추가 기능을 설치하기 전에 원래 CloudWatch 에이전트에 적용한 모든 사용자 지정 또는 수정 사항의 백업을 만들어야 합니다. 추가 기능 또는 헬름 차트를 설치하거나 업데이트한 후 사용자 지정을 다시 적용할 수 있습니다.

관련 정보

Amazon ECS 또는 Amazon EKS의 컨테이너 로그 누락 문제를 해결하려면 어떻게 해야 합니까?

Amazon EKS 클러스터에서 Container Insights 지표를 활성화하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 일 년 전