고기 대신 SW 한점/Public Cloud

[AWS] Monitoring Architecture - OpenSearch

지식한점 2022. 11. 16. 09:10
반응형

AWS는 CloudWatch를 기본으로 Monitoring, Logging, Alarm 및 Dashboard와 X-Ray를 통해 Tracing를 제공합니다. Observability(관측가능성)의 3가지 구성요소인(Telemetry, Log, Trace)를 제공합니다. X-Ray는 Tracing의 근본적인 부분이므로 CloudWatch와 함께 동작합니다. 오픈소스 observability interoperability (상호운영성)을 위해 Managed Prometheus 및 Grafana 서비스를 제공하며 OpenTelemetry까지 지원합니다.

 

 

 

 

 

구성 아키텍쳐(Overall)

 

모든 요소는 중복구성이 될 수 있기 때문에 의사결정이 필요하고, cloudwatch로 기본 수집되는 영역은 추가로 있습니다.

 

 

 

 

 

Ingest

  •  Lambda --> Log
  • envoy --> Trace : service mesh로 istio사용시 구성
  • aws-otel-collector --> Telemetry, Trace
  • Fluentd --> Log collector
  • Exporter(3rd) --> Telemetry

Aggregation (Backend)

  • OpenSearch
  • X-ray
  • Promethus (optional)
  • CloudWatch

Visualization (Dashboard)

  • OpenSearch Dashboard
  • Kibana
  • Managed Grafana
  • Grafana (promethus-stack)

 

Log: OpenSearch

1. OpenSearch Domain 생성
   OpenSearch Service 도메인은 OpenSearch 클러스터와 동의어입니다. 도메인은 설정, 인스턴스 유형, 인스턴스 수, 스토리지 리소스를 지정한 설정입니다. 콘솔, AWS CLI 또는 AWS SDK를 사용하여 OpenSearch Service 도메인을 만들 수 있습니다.

1. 콘솔을 사용하여 OpenSearch Service 도메인을 만들려면

  1. https://aws.amazon.com으로 이동하여 콘솔에 로그인(Sign In to the Console)을 선택합니다.
  2. Analytics(분석)에서 Amazon OpenSearch Service를 선택합니다.
  3. [도메인 생성(Create domain)]을 선택합니다.
  4. 도메인의 이름을 입력합니다. 이 자습서의 예제에서는 movies라는 이름을 사용합니다.
  5. 사용자 지정 엔드포인트(Custom endpoint) 설정을 무시합니다.
  6. 배포 유형은 개발 및 테스트(Development and testing)를 선택합니다.
  7. 버전(Version)에서 최신 버전을 선택합니다.
  8. 데이터 노드(Data nodes)에서 인스턴스 유형을 t3.small.search로 변경하고 세 개의 노드 기본값을 유지합니다.
  9. 이 자습서에서는 간단한 설명을 위해 퍼블릭 액세스 도메인을 사용합니다. [네트워크(Network)]에서 [퍼블릭 액세스(Public access)]를 선택합니다.
  10. 세분화된 액세스 제어 설정에서 마스터 사용자 생성(Create master user)을 선택합니다. 사용자 이름과 암호를 입력합니다.
  11. 지금은SAML 인증  Amazon Cognito 인증 섹션을 무시합니다.
  12. [액세스 정책(Access policy)]에서 [세분화된 액세스 제어만 사용(Only use fine-grained access control)]을 선택합니다. 이 자습서에서는 세분화된 액세스 제어를 통해 도메인 액세스 정책이 아닌 인증을 처리합니다.
  13. 나머지 설정은 무시하고 [생성(Create)]을 선택합니다. 새 도메인은 일반적으로 초기화하는 데 15~30분 정도 걸리지만 구성에 따라 시간이 더 오래 걸릴 수 있습니다. 도메인을 초기화한 후 도메인을 선택하여 구성 창을 엽니다. 다음 단계에서 사용할 일반 정보(General information)에서의 도메인 엔드포인트(예: https://search-my-domain.us-east-1.es.amazonaws.com)를 기록합니다.

2. 인덱싱을 위해 OpenSearch Service 도메인에 데이터 업로드

명령줄이나 대부분의 프로그래밍 언어를 사용하여 OpenSearch Service 도메인에 데이터를 업로드할 수 있습니다.

다음 예제의 요청에서는 편의상 간단히 일반적인 HTTP 클라이언트인 curl을 사용합니다. 액세스 정책에서 IAM 사용자 또는 역할을 지정한 경우 curl 같은 클라이언트에서는 필요한 요청 서명을 실행할 수 없습니다. 이 프로세스를 성공적으로 수행하려면 도메인 생성시에서 구성한 것처럼 기본 사용자 이름 및 암호로 세분화된 액세스 제어를 사용해야 합니다.

Windows에 curl을 설치하고 명령 프롬프트에서 이를 사용할 수 있지만, Cygwin 같은 도구나 Linux용 Windows 하위 시스템을 권장합니다. macOS 및 대부분의 Linux 배포판은 curl이 사전 설치된 상태로 제공됩니다.

  •  여러문서 업로드
    문서 여러 개가 포함된 JSON 파일을 OpenSearch Service 도메인에 업로드하려면
    - bulk_movies.json이라는 로컬 파일을 생성합니다. 다음 내용을 파일에 복사하여 붙여넣고, 후행 줄바꿈을 추가합니다
      { "index" : { "_index": "movies", "_id" : "2" } }
    {"director": "Frankenheimer, John", "genre": ["Drama", "Mystery", "Thriller", "Crime"], "year": 1962, "actor": ["Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom"], "title": "The Manchurian Candidate"}
    { "index" : { "_index": "movies", "_id" : "3" } }
    {"director": "Baird, Stuart", "genre": ["Action", "Crime", "Thriller"], "year": 1998, "actor": ["Downey Jr., Robert", "Jones, Tommy Lee", "Snipes, Wesley", "Pantoliano, Joe", "Jacob, Ir\u00e8ne", "Nelligan, Kate", "Roebuck, Daniel", "Malahide, Patrick", "Richardson, LaTanya", "Wood, Tom", "Kosik, Thomas", "Stellate, Nick", "Minkoff, Robert", "Brown, Spitfire", "Foster, Reese", "Spielbauer, Bruce", "Mukherji, Kevin", "Cray, Ed", "Fordham, David", "Jett, Charlie"], "title": "U.S. Marshals"}
    { "index" : { "_index": "movies", "_id" : "4" } }
    {"director": "Ray, Nicholas", "genre": ["Drama", "Romance"], "year": 1955, "actor": ["Hopper, Dennis", "Wood, Natalie", "Dean, James", "Mineo, Sal", "Backus, Jim", "Platt, Edward", "Ray, Nicholas", "Hopper, William", "Allen, Corey", "Birch, Paul", "Hudson, Rochelle", "Doran, Ann", "Hicks, Chuck", "Leigh, Nelson", "Williams, Robert", "Wessel, Dick", "Bryar, Paul", "Sessions, Almira", "McMahon, David", "Peters Jr., House"], "title": "Rebel Without a Cause"}

    파일이 저장되는 로컬 디렉터리에서 다음 명령을 실행하여 movies 도메인에 파일을 업로드합니다.
    curl -XPOST -u 'master-user:master-user-password' 'domain-endpoint/_bulk' --data-binary @bulk_movies.json -H 'Content-Type: application/json'

 

구성 환경 (Dev account)

Dashboard: Dashboard : https://search-opensearch-dev-kidsworld-bsofrdpgmfcwtykxcjvulnkave.ap-northeast-2.es.amazonaws.com/_dashboards
Endpoint : https://search-opensearch-dev-kidsworld-bsofrdpgmfcwtykxcjvulnkave.ap-northeast-2.es.amazonaws.com/

 

 

ame : opensearch-dev-test
Custom endpoint : 미사용
Deployment type : Development and testing
Version : OpenSearch 1.1
Auto-Tune : enable
Data nodes : r6g.large.search 1 node (2core, 16G, 1024GB(GP))
Dedicated master nodes : 미사용
VPC access
Fine-grained access control : master user (id - master, pass - testdev**)
Access policy : Only use fine-grained access control

 

 

 

 

 

 

 

 

Input

curl -XPUT -u 'master:Uplusdev1!' 'https://search-opensearch-dev-kidsworld-bsofrdpgmfcwtykxcjvulnkave.ap-northeast-2.es.amazonaws.com/movies/_doc/1' -d '{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}' -H 'Content-Type: application/json'

 

Search

curl -XGET -u 'master:Uplusdev1!' 'https://search-opensearch-dev-kidsworld-bsofrdpgmfcwtykxcjvulnkave.ap-northeast-2.es.amazonaws.com/movies/_search?q=mars&pretty=true'

반응형