-
⚙️ EKS에서 Container Insights 설정클라우드 2023. 11. 2. 11:10반응형
Cluster 내부에서 CloudWatch로 Log 혹은 Metric을 전송하기 위해서는 CloudWatch Agent를 내부에 설치해야 한다. (이전 글) NextJS + k8s 프로덕션 환경에서 OOMKilled 현상
1. 클러스터의 Worker Node의 IAM 계정에 CloudWatch 접근 정책 연결
1-1. EC2 > 인스턴스 > 사용할 Worker Node 상세 > 보안 탭 > IAM 역할 순서로 접근한다. 따로 Node에 권한 세팅을 해두지 않았다면 현재 상태는 다음과 같을 것이다.
1-2. 권한 추가에서 해당 권한을 IAM 역할에 추가한다.
2. 클러스터 지표 수집을 위해 CloudWatch Agent 설정
2-1. CloudWatch 네임 스페이스 생성
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
2-2. Agent의 서비스 계정 생성
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
2-3. Agent의 ConfigMap 생성 및 수정
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml
다운로드된 cwagent-configmap.yaml에서 {{cluster_name}} 부분을 Cluster 이름으로 대치한다. 모니터링 주기 등의 설정값은 Default로 진행하며 변경 시 링크을 참고한다.
kubectl apply -f cwagent-configmap.yaml
클러스터에서 ConfigMap을 생성한다.
2-4. StatsD를 사용해서 CloudWatch Agent 배포
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
Metric 측정의 표준 데몬 StatsD를 사용해서 Agent를 배포한다. 다른 방법을 사용할 수도 있지만 해당 포스트에서는 다루지 않는다.
확인
kubectl get pods -n amazon-cloudwatch
CloudWatch Agent가 정상 배포되었다.
3. CloudWatch Console에서 모니터링
Agent가 정상 작동 중이라는 가정 하에 CloudWatch 탭에 들어가보면 다음과 같이 사용자 지정 네임스페이스에 ContainerInsights가 떠있다.
우선 현재 문제가 있는 Front의 Pod을 모니터링할 예정이므로 "ClusterName, Namespace, PodName"에서 해당 Pod의 pod_memory_utilization, pod_cpu_utilization, pod_number_of_container_restarts 등을 체크해 확인할 수 있다. 해당 지표들의 계산식은 다음을 참고하자.
🚫 TroubleShooting
- Agent가 정상 배포되었음에도 CloudWatch에 Metric이 전송되지 않는 현상
kubectl logs pod-name -n amazon-cloudwatch
확인해보니 해당 에러 메시지를 뱉는다.
Sender failed {"kind": "processor", "name": "batch/containerinsights", "pipeline": "metrics/containerinsights", "error": "Permanent error: InvalidParameterException: 1 validation error detected: Value '/aws/containerinsights/{{cluster_name}}/performance' at 'logGroupName' failed to satisfy constraint: Member must satisfy regular expression pattern: [\\.\\-_/#A-Za-z0-9]+"}
cwagent-configmap.yaml의 설정에서 이름을 대치시키지 않아 발생한 문제였다. 2-4에서 배포한 Agent를 지우고 ConfigMap을 업데이트해 다시 생성한 후 Agent를 배포하면 문제 없이 동작한다.
반응형'클라우드' 카테고리의 다른 글
⚙️ Amazon Chatbot으로 Slack 경보 설정 (1) 2023.11.02 NextJS + k8s 프로덕션 환경에서 OOMKilled 현상 (0) 2023.10.25 PaaS-TA #3 Paas-TA PlayPark 설정(1014) (0) 2020.10.14 Paas-Ta #2 환경설정(1007) (0) 2020.10.07 PaaS-TA #1 환경설정(0923) (0) 2020.09.23