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:DescribeAddon및iam:AttachRolePolicy(교차 계정 구성에 필요)
일반 구성 패턴
모든 고급 구성은 동일한 패턴을 따릅니다. aws eks update-addon 명령을 사용하여 amazon-cloudwatch-observability 추가 기능에 JSON 구성을 전달합니다.
aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
중요
--resolve-conflicts OVERWRITE 플래그는 기존 추가 기능 구성을 대체합니다. 기존 설정을 유지하려면 명령을 실행하기 전에 새 구성과 병합합니다.
로그 필터링
특정 기준과 일치하는 로그를 제외하여 CloudWatch Logs 비용을 줄일 수 있습니다. 로그 필터링을 사용하여 에이전트가 CloudWatch로 로그를 보내기 전에 디버그 수준 또는 상세 정보 로그를 삭제합니다.
로그 필터링 구성
-
다음 명령을 실행하여 로그 필터 구성으로 추가 기능을 업데이트합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.aws eks update-addon \ --cluster-namecluster-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 -
업데이트 후 추가 기능 상태가
ACTIVE인지 확인합니다.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
exclude_filters 구성은 에이전트가 CloudWatch Logs로 로그 항목을 보내기 전에 지정된 로그 수준과 일치하는 로그 항목을 제거합니다. 이를 통해 로그 수집 볼륨 및 관련 비용이 줄어듭니다.
다중 계정 수집
교차 계정 IAM 역할 가정을 구성하여 워크로드 계정에서 중앙 모니터링 계정으로 원격 측정을 전송할 수 있습니다. 이 접근 방식을 사용하면 여러 AWS 계정의 여러 Amazon EKS 클러스터에서 지표와 로그를 한 번에 볼 수 있습니다.
다중 계정 수집 설정
모니터링 계정에서 교차 계정 역할 생성
-
중앙 모니터링 계정에서 워크로드 계정이 이를 가정하도록 허용하는 신뢰 정책을 사용하여 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" } ] } -
CloudWatchAgentServerPolicy관리형 정책을 교차 계정 역할에 연결합니다.
교차 계정 전송을 위한 추가 기능 구성
-
워크로드 계정에서 추가 기능을 업데이트하여 교차 계정 역할을 가정합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고monitoring-account-id를 중앙 모니터링 계정의 AWS 계정 ID로 바꿉니다.aws eks update-addon \ --cluster-namecluster-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 -
업데이트 후 추가 기능 상태가
ACTIVE인지 확인합니다.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
사용자 지정 지표 차원
Kubernetes 레이블에서 파생된 사용자 지정 차원을 Container Insights 지표에 추가할 수 있습니다. 사용자 지정 차원을 사용하면 팀, 환경 또는 애플리케이션 계층별로 지표를 더 세밀하게 필터링하고 그룹화할 수 있습니다.
Kubernetes 레이블에서 사용자 지정 차원 추가
-
다음 명령을 실행하여 사용자 지정 차원을 구성합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고label-key를 차원으로 사용할 Kubernetes 레이블로 바꿉니다.aws eks update-addon \ --cluster-namecluster-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 -
업데이트 후 추가 기능 상태가
ACTIVE인지 확인합니다.aws eks describe-addon \ --cluster-namecluster-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에 대한 리소스 제한 구성
-
다음 명령을 실행하여 리소스 요청 및 제한을 설정합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고 리소스 값을 이전 테이블의 값으로 바꿉니다.aws eks update-addon \ --cluster-namecluster-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 -
추가 기능 상태가
ACTIVE이고 에이전트 포드가 새 리소스 할당으로 다시 시작되는지 확인합니다.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text -
에이전트 포드가 새 리소스 제한으로 실행 중인지 확인합니다.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'
구성 변경 사항 확인
고급 구성을 적용한 후 추가 기능이 정상이고 에이전트 포드가 성공적으로 다시 시작되었는지 확인합니다.
구성 변경 확인
-
추가 기능 상태가
ACTIVE인지 확인합니다.cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table -
에이전트 포드가 다시 시작되고
Running상태인지 확인합니다.kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent모든 에이전트 포드는 최근 재시작 시간과 함께
Running상태로 표시되어야 합니다.
문제 해결
다음 지침을 사용하여 고급 구성과 관련된 일반적인 문제를 해결합니다.
ConfigurationConflict에서 추가 기능 업데이트 실패
증상: aws eks update-addon 명령이 ConfigurationConflict 오류를 반환합니다.
원인: 제공한 JSON 구성의 형식이 잘못되었거나 잘못된 키가 포함되어 있습니다.
해결 방법: 다음 단계에 따라 이 문제를 해결합니다.
-
JSON linter를 사용하거나 다음 명령을 실행하여 JSON 구성을 검증합니다.
echo 'your-json-configuration' | python3 -m json.tool -
모든 구성 키가
amazon-cloudwatch-observability추가 기능에 유효한지 확인합니다. -
수정된 JSON으로 업데이트를 다시 시도합니다.
모니터링 계정에 표시되지 않는 교차 계정 지표
증상: 다중 계정 수집을 구성한 후에 지표가 중앙 모니터링 계정에 표시되지 않습니다.
원인: 교차 계정 IAM 역할 신뢰 정책 또는 권한이 잘못되었습니다.
해결 방법: 다음 단계에 따라 이 문제를 해결합니다.
-
모니터링 계정의 신뢰 정책이 워크로드 계정이 역할을 가정하도록 허용하는지 확인합니다.
-
교차 계정 역할에
CloudWatchAgentServerPolicy관리형 정책이 연결되어 있는지 확인합니다. -
에이전트 로그에
AssumeRole오류가 있는지 확인합니다.kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied" -
워크로드 계정의 에이전트 IAM 역할에 교차 계정 역할 ARN에 대한
sts:AssumeRole권한이 있는지 확인합니다.