헬름을 사용하여 OTel Container Insights 배포
Amazon CloudWatch Observability 헬름 차트는 OTel Container Insights에 대한 유연한 배포 옵션을 제공합니다. 로그 수집을 위해 OpenTelemetry 파일 로그 수신기와 함께 CloudWatch 에이전트(OTel 기반)를 설치합니다. 헬름 차트는 https://github.com/aws-observability/helm-charts
다음 기능 중 하나 이상이 필요한 경우 헬름 차트를 사용합니다.
-
에이전트 구성에 대한 세분화된 제어
-
파일 로그 수신기를 사용한 OTel 네이티브 로그 수집(Fluent Bit 종속성 없음)
-
cert-manager를 통한 사용자 지정 TLS 인증서 관리
-
비EKS Kubernetes 클러스터(ROSA, 자체 관리형 Kubernetes)
-
ArgoCD 또는 Flux를 사용한 GitOps 워크플로
사전 조건
헬름을 사용하여 OTel Container Insights를 배포하기 전에 다음 요구 사항을 충족하는지 확인합니다.
-
Kubernetes 버전 1.28 이상을 실행하는 기존의 Amazon EKS 클러스터
-
Helm 버전 3.9 이상
-
대상 클러스터와 통신하도록 구성된
kubectl -
IAM 권한: 에이전트 역할에 연결된
CloudWatchAgentServerPolicy관리형 정책 -
서비스 계정에 대한 IAM 역할(IRSA)에 대해 구성된 OpenID Connect(OIDC) 공급자
-
클러스터에서 CloudWatch 엔드포인트로의 아웃바운드 인터넷 액세스
헬름 차트 설치
헬름 차트를 사용하여 OTel Container Insights를 배포하려면 다음 단계를 완료합니다.
1단계: 헬름 리포지토리 추가
AWS Observability 헬름 차트 리포지토리를 로컬 헬름 구성에 추가합니다.
헬름 리포지토리 추가
-
다음 명령을 실행하여 리포지토리를 추가합니다.
helm repo add aws-observability \ https://aws-observability.github.io/helm-charts -
리포지토리를 업데이트하여 최신 차트 버전을 가져옵니다.
helm repo update
2단계: IAM 역할 생성
CloudWatch 에이전트가 데이터를 CloudWatch로 전송할 수 있도록 IAM 역할을 생성합니다. 이 역할은 IRSA를 사용하여 IAM 권한을 Kubernetes 서비스 계정과 연결합니다.
CloudWatch 에이전트에 대한 IAM 역할 생성
-
클러스터의 OIDC 발급자 URL을 검색합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.aws eks describe-cluster \ --namecluster-name\ --query "cluster.identity.oidc.issuer" \ --output text -
IRSA에 대한 신뢰 정책을 사용하여 IAM 역할을 생성합니다.
account-id를 AWS 계정 ID로 바꾸고oidc-id를 이전 단계의 OIDC 공급자 ID로 바꿉니다(https://oidc.eks.region.amazonaws.com/id/다음 부분).aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }' -
CloudWatchAgentServerPolicy관리형 정책을 역할에 연결합니다.aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
3단계: 차트 설치
OTel Container Insights가 활성화된 Amazon CloudWatch Observability 헬름 차트를 설치합니다.
헬름 차트 설치
-
다음 명령을 실행합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고리전을 AWS 리전으로 바꾸고account-id를 AWS 계정 ID로 바꿉니다.helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true중요
otelContainerInsights.enabled파라미터가 필요합니다. OTel Container Insights는 기본적으로 활성화되어 있지 않습니다.
4단계: 설치 확인
헬름 릴리스 및 에이전트 포드가 성공적으로 배포되었는지 확인합니다.
헬름 설치 확인
-
헬름 릴리스 상태가
deployed로 표시되는지 확인합니다.helm list -n amazon-cloudwatch -
오퍼레이터 포드가 실행 중인지 확인합니다.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability -
CloudWatch 에이전트 포드가 모든 노드에서 실행 중인지 확인합니다.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent모든 포드에
Running상태가 표시되어야 합니다.
주요 구성 옵션
다음 표에서는 구성할 수 있는 주요 헬름 차트 값을 설명합니다. --set 플래그 또는 사용자 지정 values.yaml 파일을 사용하여 이러한 값을 전달합니다.
클러스터 설정
| 파라미터 | 기본값 | 설명 |
|---|---|---|
clusterName |
— | Amazon EKS 클러스터의 이름입니다. 필수 사항입니다. |
region |
— | 클러스터가 실행되는 AWS 리전입니다. 필수 사항입니다. |
otelContainerInsights.enabled |
false |
파일 로그 수신기를 사용하여 OTel Container Insights를 활성화합니다. |
컨테이너 로그(OTel 파일 로그 수신기)
| 파라미터 | 기본값 | 설명 |
|---|---|---|
containerLogs.enabled |
true |
OTel 파일 로그 수신기를 사용하여 컨테이너 로그 수집을 활성화합니다. |
containerLogs.logGroupName |
/aws/containerinsights/ |
컨테이너 로그의 CloudWatch Logs 로그 그룹 이름입니다. |
containerLogs.logRetentionDays |
7 |
CloudWatch Logs에 컨테이너 로그를 보관하는 일수입니다. |
에이전트(지표)
| 파라미터 | 기본값 | 설명 |
|---|---|---|
agent.enabled |
true |
지표 수집을 위해 CloudWatch 에이전트 DaemonSet를 활성화합니다. |
agent.serviceAccount.name |
cloudwatch-agent |
에이전트에 대한 Kubernetes 서비스 계정의 이름입니다. |
agent.resources.requests.cpu |
100m |
에이전트 컨테이너에 대한 CPU 요청입니다. |
agent.resources.requests.memory |
128Mi |
에이전트 컨테이너에 대한 메모리 요청입니다. |
agent.resources.limits.cpu |
200m |
에이전트 컨테이너에 대한 CPU 한도입니다. |
agent.resources.limits.memory |
256Mi |
에이전트 컨테이너에 대한 메모리 한도입니다. |
GPU 모니터링
| 파라미터 | 기본값 | 설명 |
|---|---|---|
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights |
true |
GPU 지표를 포함하여 Enhanced Container Insights 지표를 활성화합니다. |
dcgmExporter.enabled |
false |
NVIDIA GPU 지표에 대한 DCGM 내보내기를 활성화합니다. NVIDIA GPU 노드가 필요합니다. |
neuronMonitor.enabled |
false |
AWS Inferentia 및 Trainium 지표에 대한 Neuron 모니터를 활성화합니다. |
TLS 인증서 관리
CloudWatch Observability 오퍼레이터는 웹후크 통신을 위해 TLS 인증서가 필요합니다. 기본적으로 차트는 자체 서명 인증서를 생성합니다. cert-manager를 사용하여 인증서를 자동으로 관리할 수 있습니다.
자체 서명 인증서(기본값)
기본적으로 헬름 차트는 자체 서명 CA를 생성하고 해당 CA에서 인증서를 발급합니다. 추가 구성은 필요하지 않습니다. 차트는 업그레이드 중에 이러한 인증서를 자동으로 교체합니다.
cert-manager 통합
cert-manager를 사용하여 인증서 발급 및 갱신을 자동화할 수 있습니다. 이 접근 방식은 조직에 외부에서 서명된 인증서 또는 중앙 집중식 인증서 관리가 필요한 경우에 유용합니다.
cert-manager 통합 구성
-
클러스터에 cert-manager가 설치되어 있는지 확인합니다.
kubectl get pods -n cert-manager -
cert-manager가 활성화된 헬름 차트를 설치합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고리전을 AWS 리전으로 바꾸고account-id를 AWS 계정 ID로 바꿉니다.helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true
cert-manager가 활성화되면 차트는 cert-manager가 웹후크 TLS 인증서를 자동으로 발급하고 관리하는 데 사용하는 Certificate 리소스를 생성합니다.
참고
HashiCorp Vault와 같은 외부 발급자와 함께 cert-manager를 사용할 수도 있습니다. 외부 발급자를 구성하려면 cert-manager 발급자와 일치하도록 admissionWebhooks.certManager.issuerRef.name 및 admissionWebhooks.certManager.issuerRef.kind를 설정합니다.
차트 업그레이드
헬름 차트를 업그레이드하여 새 구성 값을 적용하거나 최신 차트 버전으로 업데이트합니다.
헬름 차트 업그레이드
-
헬름 리포지토리를 업데이트하여 최신 차트 버전을 가져옵니다.
helm repo update -
원하는 값으로 업그레이드 명령을 실행합니다.
cluster-name을 Amazon EKS 클러스터의 이름으로 바꾸고리전을 AWS 리전으로 바꾸고account-id를 AWS 계정 ID로 바꿉니다.helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true -
업그레이드가 성공적으로 완료되었는지 확인합니다.
helm list -n amazon-cloudwatch개정 번호는 증가해야 하고 상태는
deployed로 표시되어야 합니다.
작은 정보
업그레이드 중에 구성 값이 손실되지 않도록 사용자 지정 값을 values.yaml 파일에 저장하고 -f values.yaml 플래그와 함께 전달합니다.
차트 제거
클러스터에서 OTel Container Insights를 제거하려면 헬름 릴리스를 제거합니다.
헬름 차트 제거
-
다음 명령을 실행하여 릴리스를 제거합니다.
helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch -
선택적으로 네임스페이스가 더 이상 필요하지 않은 경우 삭제합니다.
kubectl delete namespace amazon-cloudwatch
헬름 차트를 제거한 후에도 IAM 역할 및 OIDC 공급자 구성은 AWS 계정에 남아 있습니다. 이러한 리소스가 더 이상 필요하지 않은 경우 별도로 삭제합니다.
aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role
CloudWatch에서 데이터 확인
헬름 차트를 설치하면 Container Insights 데이터가 3~5분 이내에 CloudWatch에 표시됩니다.
지표 확인
CloudWatch에서 지표 확인
-
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 Container Insights를 선택합니다.
-
클러스터가 클러스터 목록에 나타나고 인프라 지표가 채워지고 있는지 확인합니다.
로그 확인
클러스터에 대한 로그 그룹이 있는지 확인하려면 다음 명령을 실행합니다. cluster-name을 Amazon EKS 클러스터의 이름으로 바꿉니다.
aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].logGroupName" \ --output table
문제 해결
헬름을 사용하여 OTel Container Insights를 배포할 때 일반적인 문제를 해결하려면 다음 지침을 따릅니다.
CrashLoopBackOff의 오퍼레이터 포드
증상: kubectl get pods -n
amazon-cloudwatch를 실행하면 오퍼레이터 포드에 CrashLoopBackOff 상태가 표시됩니다.
원인: TLS 인증서 문제 또는 권한 부족으로 인해 오퍼레이터 포드를 시작할 수 없습니다.
해결 방법: 다음 단계에 따라 이 문제를 해결합니다.
-
오퍼레이터 포드 로그에서 인증서 관련 오류를 확인합니다.
kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50 -
웹훅 TLS 보안 암호가 네임스페이스에 존재하는지 확인합니다.
kubectl get secrets -n amazon-cloudwatch | grep webhook -
cert-manager를 사용하는 경우
Certificate리소스 상태가Ready로 표시되는지 확인합니다.kubectl get certificate -n amazon-cloudwatch -
인증서가 누락되었거나 유효하지 않은 경우 차트를 제거하고 다시 설치하여 인증서를 다시 생성합니다.
helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch
에이전트 포드가 모든 노드에 예약되지 않음
증상: 에이전트 DaemonSet은 클러스터의 노드 수보다 더 적은 포드를 표시합니다.
원인: 노드 테인트, 리소스 제약 또는 노드 선택기로 인해 에이전트 포드가 특정 노드에서 예약되지 않습니다.
해결 방법: 다음 단계에 따라 이 문제를 해결합니다.
-
DaemonSet 상태에서 예약 문제를 확인합니다.
kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent -
예약할 수 없는 포드가 있는지 확인하고 해당 이벤트를 봅니다.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running -
노드에 테인트가 있는 경우 헬름 차트 값에 허용치를 추가합니다. 예를 들어 모든 테인트를 허용하려면 다음 플래그로 차트를 업그레이드합니다.
helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists" -
이제 에이전트 포드가 모든 노드에서 실행되는지 확인합니다.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide