Ssoon
[4주차] EKS Observability - Logs, Traces and Metrics 본문
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 에이전트를 설치합니다.
- 이 YAML에는 스크랩되는 작업이 구성되어 있으며 지표는 CloudWatch로 전송됩니다.
- 에이전트가 실행 중인지 확인합니다.
[ XRay Trace ]
- X-Ray는 개발자와 DevOps 엔지니어가 애플리케이션 및 해당 기본 서비스의 성능을 빠르게 이해할 수 있도록 도와줍니다.
- 애플리케이션 추적 기능을 제공하여 배포된 모든 마이크로서비스에 대한 심층적인 통찰력을 제공합니다.
- 마이크로서비스를 통과하는 모든 요청을 추적할 수 있습니다.
애플리케이션 코드를 계측하려면 X-Ray SDK를 사용하십시오.
SDK는 수신 및 발신 요청에 대한 데이터를 기록하고 이를 X-Ray 데몬으로 전송합니다.
데몬은 데이터를 일괄적으로 X-Ray에 전달합니다.
제품 카탈로그 데모 응용 프로그램에 대한 아래 코드의 예를 참조하십시오.
- 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를 배포하고 정보를 확인합니다.
※ 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 을 볼 수 있습니다.
'AWS EKS Workshop Study' 카테고리의 다른 글
[5주차] EKS Autoscaling - Horizontal Pod AutoScaler (HPA) (0) | 2023.05.21 |
---|---|
[4주차] EKS Observability - ADOT, AMP 및 AMG를 사용한 모니터링 (0) | 2023.05.20 |
[3주차] EKS 스토리지 - FSx for Lustre CSI driver (0) | 2023.05.12 |
[3주차] EKS 스토리지 - EFS CSI driver (0) | 2023.05.12 |
[3주차] EKS 스토리지 - EBS CSI driver (0) | 2023.05.12 |
Comments