Ssoon

AWS EKS - Observability - OpenSearch 본문

AWS EKS Workshop Study 2기

AWS EKS - Observability - OpenSearch

구구달스 2024. 3. 30. 12:29
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 4주차
# EKS Workshop 참고

 

AWS OpenSearch

  • AWS에서 호스팅되는 오픈 소스 검색 및 분석 엔진
  • 데이터를 수집, 검색, 시각화 및 분석하는 데 사용되는 커뮤니티 중심의 오픈 소스 검색 및 분석 제품군
  • Elasticsearch와 Kibana의 호스팅 및 관리를 쉽게 할 수 있도록 제공
  • 데이터 저장소 및 검색 엔진(OpenSearch), 시각화 및 사용자 인터페이스(OpenSearch 대시보드), 서버 측 데이터 수집기(Data Prepper)로 구성
  • 대화형 로그 분석, 실시간 애플리케이션 모니터링, 검색 등을 쉽게 수행할 수 있는 관리형 서비스

  1. 검색 및 분석 엔진:
    • OpenSearch는 대량의 데이터를 실시간으로 색인하여 검색 및 분석할 수 있는 엔진을 제공
    • 데이터를 색인하고 복잡한 쿼리를 실행하여 데이터를 검색하고 분석
  2. Kibana 지원:
    • OpenSearch는 Kibana를 통해 데이터 시각화, 대시보드 작성 및 분석 기능을 제공
    • Kibana를 사용하여 데이터를 시각적으로 탐색하고 사용자 정의 대시보드를 생성
  3. 실시간 데이터 분석:
    • OpenSearch는 실시간으로 데이터를 수집하고 분석하여 실시간 인사이트를 제공
    • 로그, 메트릭, 이벤트 등 다양한 데이터 유형을 분석
  4. 확장성 및 가용성:
    • AWS OpenSearch는 클러스터의 확장성과 가용성을 제공하여 대규모 데이터 세트를 처리
    • 다양한 인스턴스 유형 및 스토리지 옵션을 사용하여 클러스터를 조정
  5. 보안 및 권한 관리:
    • OpenSearch는 데이터 보안을 강화하기 위한 기능을 제공
    • HTTPS를 통한 암호화, IAM 기반의 액세스 제어, 로그 스트림 암호화 등의 보안 기능을 제공
  6. 모니터링 및 경고:
    • OpenSearch는 클러스터의 상태를 모니터링하고 경고를 설정하여 잠재적인 문제를 신속하게 식별
    • 클러스터 및 노드의 성능 지표를 모니터링하고 사용자 정의 경고를 설정

 실습

더보기

Workshop 실습 환경 준비

 

  • 실험실 환경이 다음과 같이 변경
    • 이전 EKS 작업장 모듈의 리소스 정리
    • Amazon OpenSearch Service 도메인 프로비저닝( 최대 30분 소요)
    • CloudWatch Logs에서 OpenSearch로 EKS 제어 평면 로그를 내보내는 데 사용되는 Lambda 기능 설정

변경 사항을 적용한 Terraform

💠 OpenSearch에 액세스

  • AWS Systems Manager Parameter Store 에서 OpenSearch에 대한 자격 증명을 검색
  • Kubernetes 이벤트 및 포드 로그에 대해 미리 생성된 OpenSearch 대시보드를 로드
  • OpenSearch에 대한 액세스를 확인
  • 프로비저닝 프로세스 중에 OpenSearch 도메인에 대한 자격 증명이 AWS Systems Manager Parameter Store 에 저장이 정보를 검색하고 필요한 환경 변수를 설정

  1. export OPENSEARCH_HOST=$(aws ssm get-parameter ...):
    • 이 라인은 AWS Systems Manager Parameter Store에서 OpenSearch 클러스터의 호스트 주소를 가져와 OPENSEARCH_HOST 환경 변수에 할당합니다.
    • aws ssm get-parameter 명령어를 사용하여 Parameter Store에서 파라미터 값을 가져옵니다.
    • --name 옵션으로 파라미터의 이름을 지정합니다. 여기서는 "/eksworkshop/$EKS_CLUSTER_NAME/opensearch/host"로 설정됩니다.
    • --region 옵션으로 AWS 리전을 지정합니다. $AWS_REGION 변수를 사용하여 현재 환경의 리전을 사용합니다.
    • jq .Parameter.Value를 사용하여 JSON 응답에서 파라미터 값만을 추출합니다.
    • tr -d '"'를 사용하여 따옴표를 제거합니다.
  2. export OPENSEARCH_USER=$(aws ssm get-parameter ...):
    • 이 라인은 OpenSearch 클러스터의 사용자 이름을 가져와 OPENSEARCH_USER 환경 변수에 할당합니다.
    • 암호화된 값이므로 --with-decryption 옵션을 사용하여 값을 복호화합니다.
  3. export OPENSEARCH_PASSWORD=$(aws ssm get-parameter ...):
    • 이 라인은 OpenSearch 클러스터의 암호를 가져와 OPENSEARCH_PASSWORD 환경 변수에 할당합니다.
    • 암호화된 값이므로 --with-decryption 옵션을 사용하여 값을 복호화합니다.
  4. export OPENSEARCH_DASHBOARD_FILE=~/environment/eks-workshop/modules/observability/opensearch/opensearch-dashboards.ndjson:
    • 이 라인은 OpenSearch 대시보드 파일의 경로를 OPENSEARCH_DASHBOARD_FILE 환경 변수에 할당합니다.
    • 대시보드 파일은 로컬 시스템에서 지정된 경로에 있어야 합니다.

  • 미리 생성된 OpenSearch 대시보드를 로드하여 Kubernetes 이벤트와 파드 로그를 표시
  • 대시보드는 opensearch-dashboards.ndjson 에서 사용
  • 이 NDJSON 파일에는 Kubernetes 이벤트와 파드 로그에 대한 OpenSearch 인덱스 패턴, 시각화 및 대시보드가 포함

  • 검색한 OpenSearch 서버 좌표 및 자격 증명을 보고 OpenSearch 대시보드에 액세스

  • 글로벌 테넌트를 선택
  • OpenSearch의 테넌트는 인덱스 패턴, 시각화 및 대시보드와 같은 리소스를 안전하게 공유하는 데 사용

  • 이전 단계에서 로드한 두 개의 대시보드(Kubernetes 이벤트 및 포드 로그용)가 표시
  • OpenSearch에 아직 데이터가 없기 때문에 대시보드는 현재 비어 있음

💠 Kubernetes events

Kubernetes 이벤트 내보내기를 배포하여 이벤트를 OpenSearch로 전달하고, 테스트 워크로드를 생성하여 추가 Kubernetes 이벤트를 생성하고, OpenSearch Kubernetes 이벤트 대시보드를 탐색하고, 문제를 식별하고, 선택적으로 Kubernetes 클러스터 내의 이벤트를 탐색


  • Kubernetes 이벤트는 애플리케이션과 클러스터 상태를 모니터링하고, 장애에 대응하고, 진단을 수행하는 데 사용
  • 이벤트는 일반적으로 일부 상태 변화 표시
  • 각 이벤트에는 실패의 성공을 나타내는 정상 또는 경고로 설정된 유형 필드가 포함

  • Kubernetes 이벤트는 지속적으로 생성되지만 클러스터 내에서 한 시간 동안만 유지
  • 이 보존 기간은 60분이라는 Kubernetes 업스트림 기본 이벤트 TTL(Time-to-Live)과 일치
  • OpenSearch는 이러한 이벤트의 수집, 분석 및 시각화를 간소화하는 내구성 있는 저장소를 제공

  • kubernetes-events-exporter는 이벤트를 OpenSearch 도메인으로 전달하기 위해 opensearch-exporter 네임스페이스에 배포
  • 이벤트는 OpenSearch의 eks-kubernetes-events 인덱스에 저장
  • 앞서 로드한 OpenSearch 대시보드는 이벤트를 시각화하는 데 사용

  • Kubernetes events exporter 를 배포하고 OpenSearch 도메인으로 이벤트를 전송하도록 구성 (기본구성정보링크)
  • 앞서 검색한 OpenSearch credentials(자격 증명) 이 내보내기를 구성하는 데 사용

  • Kubernetes 이벤트 포드가 실행 중인지 확인

  • 테스트 네임스페이스 내에서 시나리오-a, 시나리오-b, 시나리오-c로 레이블이 지정된 세 개의 배포를 시작하여 정상 및 경고 이벤트를 시연함으로써 추가 Kubernetes 이벤트를 생성
  • 각 배포에는 의도적으로 오류가 포함됩니다.

Kubernetes 이벤트 내보내기는 지난 1시간 동안의 이벤트와 새로운 이벤트를 OpenSearch로 보냅니다. 따라서 다음 명령을 실행하고 OpenSearch 대시보드를 검사할 때 표시되는 정확한 이벤트 목록은 지난 한 시간 동안의 EKS 클러스터 활동에 따라 달라집니다.

 

  • 이전 페이지에서 사용했던 OpenSearch 대시보드로 돌아가서 OpenSearch Kubernetes 이벤트 대시보드를 탐색

  • 각 이벤트 옆의 '>'를 클릭하면 새 섹션이 열립니다.
  • 전체 이벤트 문서는 테이블 또는 JSON 형식
  • 쿠버네티스 이벤트 내의 데이터 필드에 대한 설명은 kubernetes.io에서 또는 kubectl explain events를 실행하여 확인

  • Kubernetes 이벤트 대시보드를 사용하여 세 가지 배포(시나리오-a, 시나리오-b, 시나리오-c)에서 문제가 발생하는 이유를 파악할 수 있습니다. 앞서 배포한 모든 파드는 테스트 네임스페이스에 있습니다.

  • 시나리오-a: 
    • 대시보드에서 시나리오-a의 FailedMount 이유와 MountVolume.SetUp failed for volume "secret-volume" : secret "misspelt-secret-name" not found 에 대한 마운트 실패 메시지가 표시

  • 시나리오-b: 
    • Failed to pull image "wrong-mage": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/wrong-image:latest": failed to resolve reference "docker.io/library/wrong-image:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

  • 시나리오-C: 
    • 0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod

  • 문제를 해결하고 OpenSearch 대시보드를 다시 방문하여 변경 사항을 확인
  • OpenSearch 대시보드로 돌아가서 이전 문제가 해결된 것을 확인합니다. 업데이트된 배포는 성공한 새 파드를 시작하고 이전에 생성된 (오류와 함께) 파드는 삭제

  • 선택적으로 EKS 클러스터 내에서 Kubernetes 이벤트를 탐색
  • OpenSearch 대시보드 내에서 탐색하던 이벤트는 클러스터 내에서 사용할 수 있는 정보를 반영
  • 클러스터에서 가장 최근 이벤트 5개를 검색합니다

  • 경고 또는 실패 상태의 이벤트를 확인

  • 가장 최근의 이벤트(모든 네임스페이스에 걸쳐)를 JSON 형식으로 확인
  • 출력 결과가 OpenSearch 인덱스에 있는 세부 정보와 매우 유사 (오픈서치 문서에는 오픈서치 내에서 색인을 용이하게 하기 위한 추가 필드가 있습니다).

Comments