View a markdown version of this page

Amazon EKS의 OTel Container Insights에 대한 고급 구성 - Amazon CloudWatch

Amazon EKS의 OTel Container Insights에 대한 고급 구성

이 주제에서는 Amazon EKS의 OTel Container Insights에 대한 고급 구성 시나리오를 다룹니다. 이러한 구성을 사용하여 지표 수집을 사용자 지정하고, 로그를 필터링하고, 계정 간 원격 측정을 수집하고, 사용자 지정 차원을 추가하고, 대규모 클러스터에 대한 리소스 할당을 조정할 수 있습니다.

사전 조건

고급 설정을 구성하기 전에 다음 요구 사항을 충족하는지 확인합니다.

  • Amazon EKS 클러스터에 OTel Container Insights가 설치되어 있고 ACTIVE 상태임

  • Kubernetes 버전 1.28 이상을 실행하는 Amazon EKS 클러스터

  • AWS CLI 버전 2.15.0 이상

  • 대상 클러스터와 통신하도록 구성된 kubectl

  • IAM 권한: eks:UpdateAddon, eks:DescribeAddoniam:AttachRolePolicy (교차 계정 구성에 필요)

일반 구성 패턴

모든 고급 구성은 동일한 패턴을 따릅니다. aws eks update-addon 명령을 사용하여 amazon-cloudwatch-observability 추가 기능에 JSON 구성을 전달합니다.

aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
중요

--resolve-conflicts OVERWRITE 플래그는 기존 추가 기능 구성을 대체합니다. 기존 설정을 유지하려면 명령을 실행하기 전에 새 구성과 병합합니다.

로그 필터링

특정 기준과 일치하는 로그를 제외하여 CloudWatch Logs 비용을 줄일 수 있습니다. 로그 필터링을 사용하여 에이전트가 CloudWatch로 로그를 보내기 전에 디버그 수준 또는 상세 정보 로그를 삭제합니다.

로그 필터링 구성
  1. 다음 명령을 실행하여 로그 필터 구성으로 추가 기능을 업데이트합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE
  2. 업데이트 후 추가 기능 상태가 ACTIVE인지 확인합니다.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

exclude_filters 구성은 에이전트가 CloudWatch Logs로 로그 항목을 보내기 전에 지정된 로그 수준과 일치하는 로그 항목을 제거합니다. 이를 통해 로그 수집 볼륨 및 관련 비용이 줄어듭니다.

다중 계정 수집

교차 계정 IAM 역할 가정을 구성하여 워크로드 계정에서 중앙 모니터링 계정으로 원격 측정을 전송할 수 있습니다. 이 접근 방식을 사용하면 여러 AWS 계정의 여러 Amazon EKS 클러스터에서 지표와 로그를 한 번에 볼 수 있습니다.

다중 계정 수집 설정

모니터링 계정에서 교차 계정 역할 생성
  1. 중앙 모니터링 계정에서 워크로드 계정이 이를 가정하도록 허용하는 신뢰 정책을 사용하여 IAM 역할을 생성합니다. workload-account-id를 워크로드 계정의 AWS 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] }
  2. CloudWatchAgentServerPolicy 관리형 정책을 교차 계정 역할에 연결합니다.

교차 계정 전송을 위한 추가 기능 구성
  1. 워크로드 계정에서 추가 기능을 업데이트하여 교차 계정 역할을 가정합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고 monitoring-account-id를 중앙 모니터링 계정의 AWS 계정 ID로 바꿉니다.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE
  2. 업데이트 후 추가 기능 상태가 ACTIVE인지 확인합니다.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

사용자 지정 지표 차원

Kubernetes 레이블에서 파생된 사용자 지정 차원을 Container Insights 지표에 추가할 수 있습니다. 사용자 지정 차원을 사용하면 팀, 환경 또는 애플리케이션 계층별로 지표를 더 세밀하게 필터링하고 그룹화할 수 있습니다.

Kubernetes 레이블에서 사용자 지정 차원 추가
  1. 다음 명령을 실행하여 사용자 지정 차원을 구성합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고 label-key를 차원으로 사용할 Kubernetes 레이블로 바꿉니다.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE
  2. 업데이트 후 추가 기능 상태가 ACTIVE인지 확인합니다.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

구성이 적용되면 지정된 Kubernetes 레이블이 CloudWatch의 Container Insights 지표에 차원으로 표시됩니다.

대규모 클러스터에 대한 리소스 튜닝

대규모 클러스터의 경우 CloudWatch 에이전트 DaemonSet의 CPU 및 메모리 제한을 늘려야 할 수 있습니다. 기본 리소스 할당은 소규모 클러스터에서 효과적이지만 클러스터가 클수록 원격 측정 데이터가 더 많이 생성되고 추가 에이전트 리소스가 필요합니다.

다음 표에는 클러스터 크기에 따른 크기 조정 지침이 나와 있습니다.

클러스터 크기 CPU 요청 CPU 제한 메모리 요청 메모리 제한
소규모(20개 이하의 노드) 100m 200m 128Mi 256Mi
중간 규모(21~100개의 노드) 200m 400m 256Mi 512Mi
라지(100개 이상의 노드) 300m 500m 384Mi 768Mi
초대형(500개 이상의 노드) 500m 1,000m 512Mi 1Gi
에이전트 DaemonSet에 대한 리소스 제한 구성
  1. 다음 명령을 실행하여 리소스 요청 및 제한을 설정합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고 리소스 값을 이전 테이블의 값으로 바꿉니다.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE
  2. 추가 기능 상태가 ACTIVE 이고 에이전트 포드가 새 리소스 할당으로 다시 시작되는지 확인합니다.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
  3. 에이전트 포드가 새 리소스 제한으로 실행 중인지 확인합니다.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'

구성 변경 사항 확인

고급 구성을 적용한 후 추가 기능이 정상이고 에이전트 포드가 성공적으로 다시 시작되었는지 확인합니다.

구성 변경 확인
  1. 추가 기능 상태가 ACTIVE인지 확인합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table
  2. 에이전트 포드가 다시 시작되고 Running 상태인지 확인합니다.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    모든 에이전트 포드는 최근 재시작 시간과 함께 Running 상태로 표시되어야 합니다.

문제 해결

다음 지침을 사용하여 고급 구성과 관련된 일반적인 문제를 해결합니다.

ConfigurationConflict에서 추가 기능 업데이트 실패

증상: aws eks update-addon 명령이 ConfigurationConflict 오류를 반환합니다.

원인: 제공한 JSON 구성의 형식이 잘못되었거나 잘못된 키가 포함되어 있습니다.

해결 방법: 다음 단계에 따라 이 문제를 해결합니다.

  1. JSON linter를 사용하거나 다음 명령을 실행하여 JSON 구성을 검증합니다.

    echo 'your-json-configuration' | python3 -m json.tool
  2. 모든 구성 키가 amazon-cloudwatch-observability 추가 기능에 유효한지 확인합니다.

  3. 수정된 JSON으로 업데이트를 다시 시도합니다.

모니터링 계정에 표시되지 않는 교차 계정 지표

증상: 다중 계정 수집을 구성한 후에 지표가 중앙 모니터링 계정에 표시되지 않습니다.

원인: 교차 계정 IAM 역할 신뢰 정책 또는 권한이 잘못되었습니다.

해결 방법: 다음 단계에 따라 이 문제를 해결합니다.

  1. 모니터링 계정의 신뢰 정책이 워크로드 계정이 역할을 가정하도록 허용하는지 확인합니다.

  2. 교차 계정 역할에 CloudWatchAgentServerPolicy 관리형 정책이 연결되어 있는지 확인합니다.

  3. 에이전트 로그에 AssumeRole 오류가 있는지 확인합니다.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied"
  4. 워크로드 계정의 에이전트 IAM 역할에 교차 계정 역할 ARN에 대한 sts:AssumeRole 권한이 있는지 확인합니다.