[Kubernetes] AWS EKS - CloudWatch Container Insight
🚀 CloudWatch Container Insight
Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정 - Amazon CloudWatch
안정적인 서비스의 운영을 위해서는 서비스의 CPU, Memory 등을 모니터링하고 Application Log를 확인하는 것이 중요하다.
쿠버네티스에서도 마찬가지로 Cluster, Namespace, Service, Pod 등에 대한 모니터링과 필요에 따라 Application 로그 수집이 필요하다.
AWS에서 제공하는 Container Insights와 로그 수집기인 Fluent Bit로 로그를 수집하고 모니터링 할 수 있다.
- Container Insights (모니터링)
- ECS, EKS Cluster에 대하여 CPU, Memory, 디스크, 네트워크 등 리소스에 대한 지표를 자동으로 수집
- CloudWatch agent로 수집된 지표를 사용하여 CloudWatch DashBoard 구성 가능
- Fluent-bit (로깅)
- fluentd보다 Memory를 적게 사용하는 경량화된 로그 수집기, 전달자 역할 수행
- 수집된 지표를 Output Plugin을 통해 CloudWatch Logs, ElasticSearch, S3 등으로 전달 가능
🚀 CloudWatch Container 로그 수집하기
https://github.com/git-for-windows/git/releases/download/v2.36.1.windows.1/Git-2.36.1-64-bit.exe
윈도우에서 Bash가 필요하다. git bash를 사용한다.
ClusterName=myeks-custom
RegionName=ap-northeast-2
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${RegionName}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -
해당 내용을 실행한다.
PS C:\Users\Shinsohui\aws-eks\ca> kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
amazon-cloudwatch cloudwatch-agent-4z2cf 1/1 Running 0 117s
amazon-cloudwatch cloudwatch-agent-77sh4 1/1 Running 0 117s
amazon-cloudwatch cloudwatch-agent-rp6gj 1/1 Running 0 117s
amazon-cloudwatch fluent-bit-dzvch 1/1 Running 0 116s
amazon-cloudwatch fluent-bit-s8ls5 1/1 Running 0 116s
amazon-cloudwatch fluent-bit-xlm2f 1/1 Running 0 116s
amazon-cloudwatch라는 네임스페이스가 있고 cloudwatch-agent와 fluent-bit가 있다.
fluent-bit가 로그를 수집하고 그 로그를 cloudwatch-agent가 cloudwatch로 전송시킨다.
/aws/eks/myeks-custom/cluster 로그는 컨트롤 플레인의 로그이다.
scheduler, api-server, controller manager 등의 로그가 쌓인다.
로그 스트림에서 로그가 계속 쌓이는 것을 볼 수 있다. EKF의 경우 컨테이너의 log만 수집한다.
host의 로그 application의 로그가 있으며 performance라는 것이 추가적으로 있다.
해당 로그는 성능 데이터를 수집한 로그이다.
🚀 Container Insights 수집 확인
Pod, Service, Namespace 정보가 계속 수집되며 CPU, Memory 양을 확인할 수도 있다.
컨테이너 맵을 볼 수 있다.
프로메테우스를 통해 확인할 수 있는 것들을 AWS 콘솔창에서 확인할 수 있다.
CPU, Memory, Network, Disk 사용률을 확인할 수 있다.
Container Insights 기능을 이용해서 모니터링도 가능하다.
EKF나 프로메테우스를 올리지 않아도 기본적인 모니터링과 로깅을 할 수 있다.
Tip) 로그 그룹은 별도로 로그를 지우지 않으므로 주기적으로 삭제해줘야 한다.
🚀 리소스 정리
PS C:\Users\Shinsohui\aws-eks> eksctl delete cluster -f .\myeks.yaml