Ssoon

AWS EKS - Observability - Open Source 본문

AWS EKS Workshop Study 2기

AWS EKS - Observability - Open Source

구구달스 2024. 3. 30. 12:30
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 4주차
# EKS Workshop 참고
  • Workshop 실습 환경 준비
더보기
  • 실습 환경 다음과 같이 변경
    • 오픈 텔레메트리용 AWS 배포용 EKS 관리형 애드온을 설치
    • ADOT 수집기가 Amazon 관리형 Prometheus에 액세스할 수 있도록 IAM 역할을 생성
    • 테라폼실습구성링크

AWS Distro for OpenTelemetry(ADOT)

  • AWS가 제공하는 오픈 표준 분산 추적 및 모니터링 솔루션
  • 모델 기반의 분산 추적, 메트릭 및 로그 수집, 분석을 지원하여 클라우드 환경에서 애플리케이션 성능 모니터링

  1. 분산 추적(Distributed Tracing):
    • ADOT는 애플리케이션의 분산 추적을 위한 오픈 표준을 제공
    • 애플리케이션의 요청이 여러 마이크로서비스를 통과하는 경로를 추적
    • OpenTelemetry의 모델 기반 추적을 기반으로 구축되어 있으며, 다양한 프로그래밍 언어 및 프레임워크에서 사용
  2. 메트릭 및 로그 수집:
    • ADOT는 메트릭과 로그를 수집하여 중앙 집중식 저장소에 보내는 기능을 제공
    • 애플리케이션의 성능 및 상태에 대한 실시간 모니터링을 수행
    • Amazon CloudWatch 및 Amazon S3와 같은 AWS 서비스와 통합되어 데이터를 수집하고 저장
  3. 연동 및 확장성:
    • ADOT는 다양한 AWS 및 서드파티 서비스와의 연동을 지원하여 클라우드 네이티브 환경에서의 모니터링
    • 또한 오픈 표준 기반으로 구축되어 있어 다양한 플러그인 및 확장 기능을 제공
  4. 보안 및 권한 관리:
    • ADOT는 AWS 보안 및 권한 관리 도구와 통합되어 데이터의 보안을 강화하고 접근 제어를 관리
    • IAM(Identity and Access Management)을 사용하여 데이터에 대한 액세스 권한을 제어
  5. AWS 지원 및 관리:
    • AWS Distro for OpenTelemetry는 AWS에서 제공하는 서비스로써 지속적인 업데이트와 관리를 제공
    • AWS가 OpenTelemetry의 지원 및 유지 관리를 담당하여 사용자는 안정적인 서비스를 기대

Amazon Managed Service for Prometheus(AMP)

  • AWS에서 제공하는 완전관리형 Prometheus 서비스
  • Prometheus와 호환되는 완전 관리형 솔루션으로, 클라우드에서 메트릭을 수집, 저장, 쿼리하는 데 사용
  • 애플리케이션 및 인프라의 성능을 실시간으로 모니터링하고 분석
  1. 완전 관리형 서비스:
    • AMP는 완전 관리형 서비스로, AWS가 서버 관리, 스케일링, 백업 및 유지 관리를 모두 담당
    • 사용자는 Prometheus 인프라를 구축하거나 관리할 필요 없이 메트릭을 수집하고 분석
  2. Prometheus 호환성:
    • AMP는 Prometheus와 완전히 호환되며, Prometheus가 지원하는 모든 기능과 기능을 지원
    • 사용자는 기존의 Prometheus 설정, 경보 및 규칙을 AMP에 쉽게 이전
  3. 확장성 및 성능:
    • AMP는 대규모 메트릭 데이터를 처리하고 분석할 수 있도록 설계
    • 탄력적인 스토리지 및 쿼리 엔진을 사용하여 대규모 환경에서도 높은 성능을 제공
  4. 시각화 및 모니터링:
    • AMP는 메트릭을 시각화하고 모니터링하기 위한 다양한 도구를 제공
    • Amazon CloudWatch 및 AWS X-Ray와 같은 AWS 서비스와 통합되어 메트릭 데이터를 모니터링하고 대시보드를 생성
  5. 보안 및 권한 관리:
    • AMP는 AWS의 보안 및 권한 관리 도구를 사용하여 데이터의 보안을 강화하고 접근 제어를 관리
    • IAM(Identity and Access Management)을 사용하여 데이터에 대한 액세스 권한을 제어

OpenTelemetry용 AWS 배포를 사용하여 애플리케이션에서 메트릭을 수집하고, Prometheus용 Amazon 관리형 서비스에 메트릭을 저장하고, Amazon 관리형 Grafana를 사용하여 시각화


💠 오픈 텔레메트리용 AWS 배포판을 사용한 메트릭 스크래핑

  • 이미 생성된 Amazon 관리형 서비스용 Prometheus 작업 공간에 메트릭을 저장
  • 워크스페이스를 보려면 왼쪽 제어판에서 모든 워크스페이스 탭을 클릭
  • eks-workshop으로 시작하는 작업 공간을 선택하면 작업 공간 아래에서 규칙 관리, 알림 관리자 등과 같은 탭 확인
  • Amazon EKS 클러스터에서 메트릭을 수집하기 위해 OpenTelemetryCollector 사용자 정의 리소스를 배포
  • EKS 클러스터에서 실행 중인 ADOT 운영자는 이 리소스의 존재 또는 변경 사항을 감지하고 그러한 변경 사항에 대해 다음 작업을 수행
    • 생성, 업데이트 또는 삭제 요청에 필요한 모든 연결이 Kubernetes API 서버에 사용 가능한지 확인
    • 사용자가 OpenTelemetryCollector 리소스 구성에 표현한 방식으로 ADOT collector 인스턴스를 배포
  • ADOT collector 에 필요한 권한을 허용하는 리소스 생성
  • 수집기 에 Kubernetes API에 액세스할 수 있는 권한을 부여하는 ClusterRole 부터 시작

  • 관리형 IAM 정책인 AmazonPrometheusRemoteWriteAccess 를 사용하여 서비스 계정에 대한 IAM 역할을 통해 수집기에 필요한 IAM 권한을 제공

  • 이 IAM 역활을 수집기에 대한 서비스 계정에 추가 

  • 리소스 생성

 

  • 수집기 의 사양 확인

 

  • OpenTelemetry 수집기 구성
  • 다음과 같은 구조로 OpenTelemetry 파이프라인을 구성
    • Receivers
      • Prometheus 엔드포인트를 노출하는 대상에서 메트릭을 스크랩하도록 설계된 Prometheus 수신기
    • Processors
      • 이 파이프라인에 없음
    • Exporters
      • AMP와 같은 Prometheus 원격 쓰기 엔드포인트로 메트릭을 전송하는 Prometheus 원격 쓰기 내보내기

  • 하나의 수집기 에이전트가 실행 중인 배포로 실행되도록 구성 

 

  • 실행 중인 ADOT 수집기 파드를 검사

💠 AMP로 메트릭 저장

  • 메트릭의 수집을 확인

💠 Grafana에 액세스

  • Grafana 인스턴스가 EKS 클러스터에 사전 설치 / 액세스하려면 먼저 URL을 검색

  • 사용자 자격 증명을 검색하려면 Grafana 헬름 차트에서 생성한 secret 을 쿼리

  • Grafana 콘솔에 로그인한 후, 데이터 소스 섹션 확인
  • 이미 데이터 소스로 구성된 Prometheus용 Amazon 관리형 서비스 작업 영역 확인

💠 클러스터 대시보드

  • 대시보드 섹션으로 이동하여 AWS 배포판에서 수집한 EKS 클러스터 메트릭을 시각화
  • 총 사용량 패널에는 CPU, 메모리 및 파일 시스템 사용량 측면에서 전체 클러스터 사용률이 표시

💠 Application Metrics

  • 워크로드에 의해 노출되는 메트릭에 대한 인사이트를 얻는 방법:
    • Java 힙 메트릭 또는 데이터베이스 연결 풀 상태와 같은 시스템 메트릭
    • 비즈니스 KPI와 관련된 애플리케이션 메트릭
  • OpenTelemetry용 AWS 배포판을 사용해 애플리케이션 메트릭을 수집하고 Grafana를 사용해 메트릭을 시각화하는 방법
    • 이 워크샵의 각 구성 요소는 특정 프로그래밍 언어 또는 프레임워크와 관련된 라이브러리를 사용하여 Prometheus 메트릭을 제공하도록 계측
    • 주문 서비스에서 이러한 메트릭의 예

  • System metric
    • 유휴 상태인 JDBC 연결 수
  • Application metric 
    • 리테일 스토어를 통해 접수된 주문 수
  • 결제 서비스 등 다른 컴포넌트에도 유사한 요청을 실행

  • 이 실습에서는 ADOT를 활용하여 모든 구성 요소에 대한 메트릭을 수집하고 주문이 접수된 수를 표시하는 대시보드를 확인
  • 애플리케이션 포드에서 메트릭을 스크랩하는 데 사용되는 OpenTelemetry 구성 확인

  • 이 구성은 특정 어노테이션이 있는 모든 파드를 자동으로 검색하기 위해 Prometheus Kubernetes 서비스 검색 메커니즘을 활용
  • prometheus.io/scrape 어노테이션이 있는 모든 파드를 검색하고 네임스페이스 및 파드 이름과 같은 Kubernetes 메타데이터로 스크랩하는 메트릭을 보강
  • 주문 구성 요소 포드에서 주석을 확인

  • 클러스터 지표에 관한 섹션에서 살펴본 것처럼 이러한 포드 지표도 동일한 OpenTelemetry 내보내기를 사용하여 AMP로 전송
  • 다음으로 아래 스크립트를 사용하여 스토어를 통해 주문을 처리하고 애플리케이션 지표를 생성하는 로드 생성기를 실행

  • 대시보드 페이지로 이동하여 대시보드 주문 서비스 메트릭을 클릭하여 대시보드 내의 패널을 검토

  • 제품별 주문' 패널의 제목 위로 마우스를 가져가 '편집' 버튼을 클릭 => 대시보드가 AMP를 쿼리하도록 어떻게 구성되었는지 확인
  • 이 패널을 만드는 데 사용된 PromQL 쿼리는 페이지 하단에 표시

  1. sum by(productId):
    • 결과를 productId 레이블을 기준으로 그룹화하고, 각 그룹의 값을 합산하는 것을 의미
    • 즉, 메트릭 데이터를 productId에 따라 그룹화하고, 같은 productId 값을 가지는 메트릭 값을 합산
  2. (watch_orders_total{productId!="*"}):
    • 쿼리의 대상이 되는 메트릭을 지정
    • watch_orders_total이라는 메트릭을 쿼리하며, productId 레이블 값이 "*"(모든 값)이 아닌 것들만 선택
    • 즉, 모든 productId 값을 가진 메트릭이 아닌, 실제 값이 있는 경우만 선택

특정 시간 범위 내에서 watch_orders_total 메트릭을 기반으로 한 productId의 합계를 계산합니다. 이를 통해 각 productId에 대한 주문 총액 또는 수량 등을 쉽게 파악

Comments