새소식

AWS/EKS

[EKS Study 4주차] EKS Monitoring - CloudWatch Insight

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 4주차 스터디 내용 정리

이번 포스팅에서는 CloudWatch Insight 를 사용하여 EKS 의 로그를 확인하는 방법에 대해 알아보겠습니다.

 

1. EKS Control Plane Logging

 

EKS Control Plane 로그를 수집하기 위해서는 EKS 의 로깅 기능을 활성화해야 합니다.

EKS 의 Default 설정은 해당 기능을 비활성화입니다.

 

 

1.1. EKS Control Plane 로깅 활성화

 

  • 로깅은 AWS 콘솔 혹은 AWS CLI 를 통해 활성화 할 수 있습니다.

 

aws eks update-cluster-config --region $AWS_DEFAULT_REGION --name $CLUSTER_NAME \
    --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

 

 

각 로그를 활성화하면, /aws/eks/<cluster-name>/cluster 로그 그룹에 각각 LogStream 이 생성됩니다.

  1. apikube-apiserver-<nnn...>
  2. auditkube-apiserver-audit-<nnn...>
  3. authenticatorauthenticator-<nnn...>
  4. controllerManager kube-controller-manager-<nnn...>
  5. schedulerkube-scheduler-<nnn...>

 

 

1.2. CloudWatch Logs Insights 테스트

 

CloudWatch Logs Insights 는 CloudWatch Logs 내의 로그 데이터를 대화식으로 검색해 분석할 수 있는 서비스입니다.

기능

  1. 한 번의 요청으로 최대 50개의 로그 그룹 쿼리 가능
  2. 쿼리가 완료되지 않았을 경우, 60분 후에 Time Out
  3. 쿼리 결과는 7일 간 사용 가능
  4. 생성 쿼리 저장 기능 제공

 

Logs Insight Field

기본적으로 로그 인사이트는 다음의 5개 필드를 자동으로 생성합니다.

  1. @message : CloudWatch Logs 의 Message
  2. @timestamp : CloudWatch Logs 의 timestamp
  3. @ingestionTime : CloudWatch Logs 가 로그 이벤트를 수신한 시간
  4. @logStream : CloudWatch Logs 의 로그 스트림 이름
  5. @log : 로그 그룹 식별자

 

CloudWatch Logs Insight 참고 문서

 

CloudWatch Logs Insights 쿼리 구문 - Amazon CloudWatch Logs

쿼리 명령을 생성할 때 시간 간격 선택기를 사용하여 쿼리할 기간을 선택할 수 있습니다. 예를 들어, 5~30분 간격, 1, 3, 12시간 간격 또는 사용자 지정 시간 범위 중에서 설정할 수 있습니다. 특정

docs.aws.amazon.com

 

다음의 쿼리 예제를 통해 EKS 로그 그룹을 쿼리할 수 있습니다.

  1. @timestamp , @message 필드 출력
  2. authenticator 로그 스트림을 filtering
  3. @timestamp 를 기준으로 내림차순 정렬
  4. 최신 20개 로그만 쿼리
fields @timestamp, @message
| filter @logStream ~= "authenticator"
| sort @timestamp desc
| limit 20

 

 

2. EKS Application Logging

 

AWS 에서는 CloudWatch Logs Container Insight 를 통해 EKS 에 배포된 Application 메트릭 확인이 가능합니다.

 

2.1. Test Nginx Pod 배포

helm repo add bitnami https://charts.bitnami.com/bitnami

MyDomain=<Route53 Domain>
CERT_ARN=<ACM CERT>
cat <<EOT > nginx-values.yaml
service:
    type: NodePort

ingress:
  enabled: true
  ingressClassName: alb
  hostname: nginx.$MyDomain
  path: /*
  annotations: 
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/load-balancer-name: $CLUSTER_NAME-ingress-alb
    alb.ingress.kubernetes.io/group.name: study
    alb.ingress.kubernetes.io/ssl-redirect: '443'
EOT
helm install nginx bitnami/nginx --version 14.1.0 -f nginx-values.yaml

 

2.2. CloudWatch Agent / Fluent Bit 배포

플루언트 비트와 클라우드 와치 에이전트를 데몬셋 형태로 동작하여

다음 CloudWatch Logs Group 에 저장하면 Container Insight 를 활용할 수 있습니다.

 

  1. /aws/containerinsights/<Cluster_Name>/application : 컨테이너/파드 로그
  2. /aws/containerinsights/<Cluster_Name>/host : 노드(호스트) 로그
  3. /aws/containerinsights/<Cluster_Name>/dataplane : 데이터플레인 로그

 

  • AWS 에서는 CloudWatch Agent 와 Fluent Bit 이 통합된 Yaml 파일을 제공합니다.
FluentBitHttpServer='On'
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
FluentBitReadFromTail='On'
curl -s 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}}/'${CLUSTER_NAME}'/;s/{{region_name}}/'${AWS_DEFAULT_REGION}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

 

 

 

CloudWatch Log Group 을 확인해보면 다음과 같은 4개 로그 그룹이 생성된 것을 알 수 있습니다.

 

2.3. Container Insight 확인

Container Map

EKS 오브젝트에 대한 간략한 구성도를 볼 수 있습니다.

 

Resource Metrics / Monitoring

EKS 에 배포된 오브젝트에 대한 Monitoring 이 가능합니다.

 

 

 


참고 문서

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/control-plane-logs.html

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html

https://aws.amazon.com/ko/blogs/containers/fluent-bit-integration-in-cloudwatch-container-insights-for-eks/

Contents

포스팅 주소를 복사했습니다