Ssoon

[4주차] EKS Observability - Logs, Traces and Metrics 본문

AWS EKS Workshop Study

[4주차] EKS Observability - Logs, Traces and Metrics

구구달스 2023. 5. 20. 00:33
CloudNet@ 팀의 AWS EKS Workshop Study 3주차 정리입니다.
# EKS Immersion Workshop 의 내용입니다.
  • AWS 환경에서 CloudWatch Container Insights, Cloudwatch Logs 및 Prometeus 을 이용하여 메트릭 모니터링, 로그 수집, 경고 트리거 및 분산 서비스 추적 기능을 강화하는 데 활용할 수 있습니다.

 

[ 마이크로서비스 배포 ]

 

  • Repository 복제합니다.
git clone https://github.com/aws-containers/eks-app-mesh-polyglot-demo.git
cd eks-app-mesh-polyglot-demo/workshop

  • Helm 차트를 설치합니다.
helm install workshop helm-chart/

  • 설정을 확인합니다.

  • 애플리케이션에 액세스합니다.
export LB_NAME=$(kubectl get svc frontend -n workshop -o jsonpath="{.status.loadBalancer.ingress[*].hostname}") 
echo $LB_NAME

 

  • IAM OIDC 공급자를 생성합니다. -> 이미 OIDC가 생성되어 있음을 확인합니다.

 

[ Cloudwatch Container Insights 활성화 ]

CloudWatch Container Insights

  • EKS 지표 및 로그를 수집, 집계 및 요약하는 완전관리형 서비스입니다.
  • CloudWatch Container Insights 대시보드는 다음 정보에 대한 액세스를 제공합니다.
    • CPU 및 메모리 활용률
    • 작업 및 서비스 수
    • 읽기/쓰기 저장소
    • 네트워크 Rx/Tx
    • 클러스터, 서비스 및 작업에 대한 컨테이너 인스턴스 수
  • Cloudwatch-에이전트 서비스 계정에 대한 IAM 역할을 생성합니다.
eksctl create iamserviceaccount \
  --cluster myeks \
  --namespace amazon-cloudwatch \
  --name cloudwatch-agent \
  --attach-policy-arn  arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
  --override-existing-serviceaccounts \
  --approve

  • Fluent-bit 서비스 계정에 대한 IAM 역할을 생성합니다.
eksctl create iamserviceaccount \
  --cluster myeks \
  --namespace amazon-cloudwatch \
  --name fluent-bit \
  --attach-policy-arn  arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
  --override-existing-serviceaccounts \
  --approve

  • EKS 클러스터에 Container Insights 을 배포합니다.
ClusterName=myeks
AWS_REGION=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}}/'${AWS_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에서 Prometheus 활성화 ]

  • Prometheus에 대한 CloudWatch Container Insights 모니터링은 컨테이너화된 시스템 및 워크로드에서 Prometheus 메트릭 검색을 자동화합니다. 
  • CloudWatch 에이전트는 Prometheus 설명서의 scrape_config에 설명된 대로 표준 Prometheus 스크레이프 구성을 지원합니다. 
  • Prometheus를 지원하는 CloudWatch 에이전트는 서비스 및 워크로드에서 지표를 자동으로 수집합니다. 
  • EKS 및 Kubernetes 클러스터에서 수집된 Prometheus 지표는 ContainerInsights/Prometheus 네임스페이스에 있습니다.

 

  • prometheus 서비스 계정에 대한 IAM 역할 생성
eksctl create iamserviceaccount \
  --cluster myeks \
  --namespace amazon-cloudwatch \
  --name cwagent-prometheus \
  --attach-policy-arn  arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
  --override-existing-serviceaccounts \
  --approve

  • prometheus용 Cloudwatch 에이전트를 설치합니다.

prometheus-eks.yaml

  • 이 YAML에는 스크랩되는 작업이 구성되어 있으며 지표는 CloudWatch로 전송됩니다.

  • 에이전트가 실행 중인지 확인합니다.

 

[ XRay Trace ]

  • X-Ray는 개발자와 DevOps 엔지니어가 애플리케이션 및 해당 기본 서비스의 성능을 빠르게 이해할 수 있도록 도와줍니다.
  • 애플리케이션 추적 기능을 제공하여 배포된 모든 마이크로서비스에 대한 심층적인 통찰력을 제공합니다.
  • 마이크로서비스를 통과하는 모든 요청을 추적할 수 있습니다. 
애플리케이션 코드를 계측하려면 X-Ray SDK를 사용하십시오. 
SDK는 수신 및 발신 요청에 대한 데이터를 기록하고 이를 X-Ray 데몬으로 전송합니다. 
데몬은 데이터를 일괄적으로 X-Ray에 전달합니다. 
제품 카탈로그 데모 응용 프로그램에 대한 아래 코드의 예를 참조하십시오.

apps/frontend_node/server.js

apps/product_catalog/app.py

apps/catalog_detail/app.js

 

  • X-Ray용 서비스 계정의 IAM 역할을 생성합니다.
eksctl create iamserviceaccount \
  --cluster myeks \
  --namespace default \
  --name xray-daemon \
  --attach-policy-arn  arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
  --override-existing-serviceaccounts \
  --approve

  • service account에 label를 적용합니다.

  • X-Ray DaemonSet를 배포하고 정보를 확인합니다.

xray-eks.yaml

 

 

 

※ EKS 제어부에 대한 CloudWatch 로깅은 데이터 수집 및 스토리지 비용으로 인해 기본적으로 활성화되지 않습니다.

eksctl utils update-cluster-logging \
    --enable-types all \
    --region ${AWS_REGION} \
    --cluster myeks \
    --approve

 

[ Logs, Traces and Metrics ]

 

Cloudwatch Container Insights

  • Cloudwatch -> 인사이트 -> Container Insights -> 성능 모니터링

Cloudwatch Logs

  • Cloudwatch -> Logs -> LogGroups

Catalog Detail Container Logs

  • 애플리케이션 LogGroup을 클릭하고 모두 검색을 클릭합니다.

  • 검색 상자에 Catalog Detail을 입력하고 30m를 선택하고 클릭하면 proddetail 백엔드 서비스에서 로그가 표시됩니다.

Product Catalog Container Logs

  • 애플리케이션 LogGroup을 클릭하고 모두 검색을 클릭하고 검색 상자에 Get Request successful을 입력하면 로그가 표시됩니다.

 

[ Prometheus Metrics ]

Prometheus Log

  • Amazon EKS 및 Kubernetes 클러스터의 로그 이벤트는 Amazon CloudWatch Log 의 /aws/containerinsights/cluster_name/prometheus LogGroup에 저장됩니다.
  • Cloudwatch -> LogGroups로 이동하면 /aws/containerinsights/eksworkshop-eksctl/prometheus LogGroup이 표시되고 이를 선택하면 여기에 기록된 모든 컨테이너에 대한 메트릭을 볼 수 있어야 합니다.

Prometheus Metrics

  • Cloudwatch -> Metrics -> ContainerInsights/Prometheus -> "ClusterName, Namespace" 로 이동하면 메트릭이 표시됩니다.

 

 

[ XRay ]

 

Service Map

  • Cloudwatch -> X-Ray traces -> 서비스 맵
  • AWS X-Ray 서비스 맵은 클라이언트에서 다운스트림 서비스로의 호출에 대한 정보를 보여줍니다.
  • 서비스 그래프 화살표는 서비스 간의 관계 요청 워크플로를 보여줍니다.

Trace Details

  • X-Ray traces > Traces 를 클릭하고 edge("Frontend", "Product-Catalog") 쿼리를 실행하여 Traces을 필터링합니다. 
  • Trace가 나열되고 Trace ID를 클릭하면 대기 시간 및 기타 정보와 함께 전체 종단 간 Trace 을 볼 수 있습니다.

Comments