cloudwithbass

[AWS] Amazon OpenSearch Ingestion 튜토리얼과 가이드 본문

AWS

[AWS] Amazon OpenSearch Ingestion 튜토리얼과 가이드

여영클 2024. 11. 13. 14:35
  • AWS Developer Guide의 Tutorial: Ingesting data into a domain using Amazon OpenSearch Ingestion 문서를 한글로 의역하고, 실습 사진을 포함한 저의 가이드를 추가한 글입니다.
  • 튜토리얼 문서의 내용이 아니라 제가 추가로 설명한 부분은 '*' 표시를 붙이고, 본명조 글씨체에 굵기를 높여 표시했습니다.

목차


     

    • 이 튜토리얼은 Amazon OpenSeearch Ingestion을 사용해서 간단한 파이프라인을 구성하는 방법과 Amazoon OpenSearch Service 도메인으로 데이터를 수집시키는(ingest) 방법을 보여줍니다.
    • 파이프라인이란 OpenSearch Ingestion에서 프로비저닝하고 관리하는 리소스입니다.
    • 여러분은 파이프라인을 이용해서 데이터를 필터링, 강화(enrich), 변형, 정규화, 집계하고 OpenSearch Service에서 그 데이터들을 분석하고 시각화할 수 있습니다.
    • 이 튜토리얼은 파이프라인을 생성하고 실행하기 위한 기본 단계를 안내합니다.
    • 자세한 사항은 Creating pipelines 문서를 참고해주세요.
    • 튜토리얼의 단계는 다음과 같습니다:
      • 1. 파이프라인 Role 생성하기
      • 2. 오픈서치 도메인 생성하기
      • 3. 파이프라인 생성하기
      • 4. 샘플 데이터 수집하기
    • 이 튜토리얼에서 다음 리소스들을 생성할 것입니다:
      • ingetstion-pipeline이라는 이름의 파이프라인
      • ingestion-domain이라는 이름의 도메인
      • PipelineRole이라는 이름의 IAM role

     

    필요 권한

    • 이 튜토리얼을 완료하기 위해, 여러분은 올바른 IAM 권한이 필요합니다.
    • 여러분이 사용하는 IAM User 또는 Role은 다음 최소 권한이 있어야 합니다.
      • *만약 실습용으로 root 유저를 이용 중일 경우 당연히 이 설정은 필요하지 않습니다.
    • 이 권한은 파이프라인 Role을 생성하고(iam:Create), 도메인을 생성 및 수정하고(es:*), 파이프라인을 실행시킬 수 있게 합니다(osis:*).
    • 추가로,  파이프라인 Role 리소스에 대한 iam:PassRole 권한이 필요합니다.
    • 이 권한은 파이프라인 Role을 OpenSearch Ingetsion에 전달해서 도메인에 데이터를 전달할 수 있게 합니다.
      • *your-account-id 부분을 계정 ID로 변경해야 합니다.
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Resource":"*",
             "Action":[
                "osis:*",
                "iam:Create*",
                "es:*"
             ]
          },
          {
             "Resource":[
                "arn:aws:iam::your-account-id:role/PipelineRole"
             ],
             "Effect":"Allow",
             "Action":[
                "iam:PassRole"
             ]
          }
       ]
    }

     


    1단계: 파이프라인 Role 생성하기

    가장 먼저, 파이프라인이 OpenSearch Service domain sink에 접근하기 위해 파이프라인 Role을 생성합니다.

    이 Role은 튜토리얼에서 추후 사용됩니다.

    1. 콘솔에서 IAM에 접속하세요. https://console.aws.amazon.com/iamv2/.

    2. 정책(Policy)을 선택해서 정책 생성을 누르세요.

    3. 이 튜토리얼에서 여러분은 다음 단계에서 생성할 ingetstion-domain이라는 이름의 도메인으로 데이터를 수집합니다. JSON을 눌러 아래 정책을 붙여 넣으세요. {youru-account-id}를 수정하고, 필요 시 Region을 수정하세요.

    *제 경우 us-east-1을 ap-northeast-2로 변경했습니다.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "es:DescribeDomain",
                "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain"
            },
            {
                "Effect": "Allow",
                "Action": "es:ESHttp*",
                "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*"
            }
        ]
    }

    4. 다음 버튼을 두 번 누르고, 이 정책의 이름을 pipeline-policy로 설정합니다.

    5. 정책을 생성합니다.

    6. 다음 이 정책을 연결할 역할을 생성합니다. 콘솔에서 Role을 누르고 역할 생성을 누릅니다.

    7. 사용자 지정 신뢰 정책을 눌러 다음 코드를 붙여넣습니다.

    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":"osis-pipelines.amazonaws.com"
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

    *

    AssumeRole은 리소스가 특정 동작을 수행하도록 sts를 이용해 일시적으로 권한을 부여하는 역할입니다.

    이 코드의 경우 osis(Open Search Indexing Service) 파이프라인이 이 역할을 사용할 수 있도록 합니다.

     

    그러면 만약 이 역할을 파이프라인이 아닌 ec2나 s3에 부여한다면 어떻게 될까요?
    당연히 아무런 동작도 실행할 수 없습니다. ec2와 s3 리소스에는 AssumeRole 권한이 없기 때문입니다.

    제가 이전에 작성한 포스팅에서 '2-1. AssumeRole이란?' 항목을 참조해주세요.

     

    8. 다음 버튼을 누르고, 이전에 생성한 정책인 piepline-policy를 선택하세요.

    9. 다음 버튼을 누르고, Role 이름을 PipelineRole로 설정하세요.

    10. 역할 생성 버튼을 누르세요.


    2단계: 도메인 생성하기

    다음으로 데이터를 수집(ingestion)할 ingestion-domain이라는 이름의 도메인을 생성할 것입니다. 

    다음 주소로 들어가서 아래 요구사항을 만족하도록 도메인을 생성할 것입니다.: https://console.aws.amazon.com/aos/home

    requirements:

    • OpenSearch 1.0 이상 버전 or Elasticsearch 7.4 이상 버전의 엔진
    • 퍼블릭 액세스 허용
    • 세분화된 액세스 제어 비활성화 

    *세분화된 액세스 제어는 도메인 생성 방법을 표준 생성으로 선택해야 비활성화할 수 있습니다.

     

    *저는 비용을 줄이기 위해 아래와 같이 구성했습니다.

    • 템플릿: 개발 및 테스트
    • 배포 옵션: 대기 없는 도메인, 가용 영역: 1-AZ
    • 엔진 옵션: 최신
    • 데이터 노드
    • Instance family: General purpose
      • 인스턴스 유형: t3.small.search (프리 티어에서만 사용 가능)
      • 노드 수: 1
    • 네트워크: 퍼블릭 액세스 (튜토리얼 권장 사항)
    • 세분화된 액세스 제어 비활성화 (튜토리얼 권장 사항)
    • 액세스 정책: 도메인 수준 액세스 정책 구성

    JSON을 눌러 다음 코드를 붙여 넣고, region과 account id를 수정하세요.

    *PipelineRole 역할이 도메인에 데이터를 전송하도록 허용하는 역할을 합니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::your-account-id:role/PipelineRole"
          },
          "Action": "es:*",
          "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*"
        }
      ]
    }

     


    3단계: 파이프라인 생성하기

    이제 여러분은 도메인과 적절한 권한이 있는 역할이 있으며, 파이프라인을 생성할 수 있습니다.

     

    파이프라인을 생성하기 위해 

    1. Amazon OpenSearch Service 콘솔의 왼쪽 메뉴에서 파이프라인을 선택하세요.

    2. 파이프라인 생성 버튼을 누르세요.

    3. Blank를 선택 후 Select BluePrint 버튼을 누르세요.

    4. 파이프라인 이름을 ingestion-piepline으로 설정하고, 파이프라인 용량은 기본 세팅을 사용하세요.

    5. 이 튜토리얼에선 Http source를 사용하는 log-pipeline이라는 이름의 sub-pipeline을 생성합니다. Http source 플러그인을 사용하면 Json 형식의 array에서 로그 데이터를 가져올 수 있습니다. 파이프라인 구성에 다음 코드를 붙여 넣으세요.

    version: "2"
    log-pipeline:
      source:
        http:
          path: "/${pipelineName}/test_ingestion_path"
      processor:
        - date:
            from_time_received: true
            destination: "@timestamp"
      sink:
        - opensearch:
            hosts: [ "https://search-ingestion-domain.us-east-1.es.amazonaws.com" ]
            index: "application_logs"
            aws:
              sts_role_arn: "arn:aws:iam::your-account-id:role/PipelineRole"
              region: "us-east-1"

    log-pipeline: sub-pipeline의 이름

    • log-pipeline.source.http.path: 로그를 수집할 HTTP 경로입니다. 이후 이 경로로 로그 데이터를 보낼 것입니다.

    processor: 로그에 적용할 데이터 처리 단계

    • from_time_recived: 로그 수신 시간을 기준으로 타임스탬프를 생성합니다.
    • destination: @timestamp 필드에 타임 스탬프를 저장합니다.

    sink.opensearch: 로그 데이터를 저장할 대상. 이 튜토리얼에선 opensearch를 사용합니다.

    • hosts: OpenSearch 도메인
    • index: 저장할 인덱스 이름
    • aws: AWS 인증 정보

    6. sink.opensearch에서 hosts와 aws를 각각 ingestion-domain의 URL과 PipelineRole의 ARN으로 변경하세요.

    7. 파이프라인 검증 버튼을 눌러 검증 성공을 확인하세요.

    8. 튜토리얼을 간소화하기 위해 네트워크 부분에서 퍼블릭 액세스를 허용하세요.

    9. 튜토리얼을 진행하다가 이슈를 겪을 경우 CloudWatch Logs에 로그 게시를 활성화하세요. 

    로그 그룹이름을 다음과 같이 설정하세요: /aws/vendedlogs/OpenSearchIngestion/ingestion-pipeline/audit-logs

    10. 다음 버튼을 눌러 파이프라인을 생성하세요. 5-10분 정도 소요됩니다.


    4단계: 샘플 데이터 수집하기

    파이프라인이 활성 상태가 되면 데이터 수집를 실행할 수 있습니다. 파이프라인에 대한 모든 HTTP 요청에는 Signature 4 버전을 사용해야 합니다. Postman이나 awscurl과 같은 http 요청 도구를 사용하세요.

    튜토리얼에서 awscurl을 사용하므로 저는 awscurl을 이용했습니다. 설치 방법과 사용 방법은 하이퍼링크를 참조해주세요.

     

    도메인의 데이터를 인덱싱하기 위해 항상 IAM Role이나 IAM access key, secret key가 필요합니다.

     

    가장 먼저 수집 URL을 확인하세요.

     

    이제 해당 URL로 샘플 데이터를 수집할 것입니다.

    awscurl --service osis --region us-east-1 \
        -X POST \
        -H "Content-Type: application/json" \
        -d '[{"time":"2014-08-11T11:40:13+00:00","remote_addr":"122.226.223.69","status":"404","request":"GET http://www.k2proxy.com//hello.html HTTP/1.1","http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)"}]' \
        https://pipeline-endpoint.us-east-1.osis.amazonaws.com/log-pipeline/test_ingestion_path

     

    * 위 명령에서 region과 url을 자신의 구성과 맞게 변경하세요. 아래 사진은 저의 경우입니다.

    region은 ap-northeast-2, url은 제 도메인의 수집 url입니다.

     

    *수집 URL의 'log-pipeline/test_ingestion_path' 경로로 요청을 보낸 게 보이시나요?

    'log-pipeline/test_ingestion_path'는 3단계의 코드에서 설정한 log-pipeline의 http 수신 경로입니다.

     

    여러분은 200 OK 응답을 받아야 합니다. 만약 인증 에러가 발생할 경우 아마 파이프라인이 있는 계정이 아닌, 다른 계정에서 명령을 실행했기 때문일 것입니다. Fixing permission issues 문서를 참고하세요.

     

    이제 로그 데이터를 쿼리하겠습니다.

    awscurl --service es --region us-east-1 \
         -X GET \
         https://search-ingestion-domain.us-east-1.es.amazonaws.com/application_logs/_search | json_pp

    이 명령을 자신의 구성에 맞도록 변경하세요.

     

    쿼리 대상은 도메인이니까 이번엔 파이프라인 url이 아닌 도메인의 엔드포인트로 url을 설정해야 합니다.

    아래 사진은 저의 경우입니다. 제가 http 요청을 두 번해서 hits에 두 로그가 있는데, 요청을 한 번만 했다면 정상적인 경우는 하나의 hit만 있을 것입니다.

     


    연관 리소스

    이 튜토리얼은 HTTP를 이용하여 간단한 데이터 수집 예시를 보여줬습니다. 프로덕션 환경에선 클라이언트 애플리케이션( Fluent Bit, Kubernetes, or the OpenTelemerty Collector)의 상황에 맞게 파이프라인을 구성해야 합니다. 그래서 파이프라인은 이 튜토리얼보다 훨신 복잡할 것입니다.

    클라이언트를 데이터를 구성하고 수집하고 싶다면 아래 리소스를 참고하세요:

     

    도움이 됐던 강의

    아래 AWS Summit 강의에서 파이프라인의 데모를 확인할AWS Developer Guide의 Tutorial: Ingesting data into a domain using Amazon OpenSearch Ingestion 문서를 한글로 의역하고, 실습 사진을 포함한 저의 가이드를 추가한 글입니다.

    튜토리얼 문서의 내용이 아니라 제가 추가로 설명한 부분은 '*' 표시를 붙이고, 본명조 글씨체에 굵기를 높여 표시했습니다.

    목차

     

     

     

    이 튜토리얼은 Amazon OpenSeearch Ingestion을 사용해서 간단한 파이프라인을 구성하는 방법과 Amazoon OpenSearch Service 도메인으로 데이터를 수집시키는(ingest) 방법을 보여줍니다.

    파이프라인이란 OpenSearch Ingestion에서 프로비저닝하고 관리하는 리소스입니다.

    여러분은 파이프라인을 이용해서 데이터를 필터링, 강화(enrich), 변형, 정규화, 집계하고 OpenSearch Service에서 그 데이터들을 분석하고 시각화할 수 있습니다.

    이 튜토리얼은 파이프라인을 생성하고 실행하기 위한 기본 단계를 안내합니다.

    자세한 사항은 Creating pipelines 문서를 참고해주세요.

    튜토리얼의 단계는 다음과 같습니다:

    1. 파이프라인 Role 생성하기

    2. 오픈서치 도메인 생성하기

    3. 파이프라인 생성하기

    4. 샘플 데이터 수집하기

    이 튜토리얼에서 다음 리소스들을 생성할 것입니다:

    ingetstion-pipeline이라는 이름의 파이프라인

    ingestion-domain이라는 이름의 도메인

    PipelineRole이라는 이름의 IAM role

     

     

    필요 권한

    이 튜토리얼을 완료하기 위해, 여러분은 올바른 IAM 권한이 필요합니다.

    여러분이 사용하는 IAM User 또는 Role은 다음 최소 권한이 있어야 합니다.

    *만약 실습용으로 root 유저를 이용 중일 경우 당연히 이 설정은 필요하지 않습니다.

    이 권한은 파이프라인 Role을 생성하고(iam:Create), 도메인을 생성 및 수정하고(es:*), 파이프라인을 실행시킬 수 있게 합니다(osis:*).

    추가로, 파이프라인 Role 리소스에 대한 iam:PassRole 권한이 필요합니다.

    이 권한은 파이프라인 Role을 OpenSearch Ingetsion에 전달해서 도메인에 데이터를 전달할 수 있게 합니다.

    *your-account-id 부분을 계정 ID로 변경해야 합니다.

    {

       "Version":"2012-10-17",

       "Statement":[

          {

             "Effect":"Allow",

             "Resource":"*",

             "Action":[

                "osis:*",

                "iam:Create*",

                "es:*"

             ]

          },

          {

             "Resource":[

                "arn:aws:iam::your-account-id:role/PipelineRole"

             ],

             "Effect":"Allow",

             "Action":[

                "iam:PassRole"

             ]

          }

       ]

    }

     

     

    1단계: 파이프라인 Role 생성하기

    가장 먼저, 파이프라인이 OpenSearch Service domain sink에 접근하기 위해 파이프라인 Role을 생성합니다.

     

    이 Role은 튜토리얼에서 추후 사용됩니다.

     

    1. 콘솔에서 IAM에 접속하세요. https://console.aws.amazon.com/iamv2/.

     

    2. 정책(Policy)을 선택해서 정책 생성을 누르세요.

     

    3. 이 튜토리얼에서 여러분은 다음 단계에서 생성할 ingetstion-domain이라는 이름의 도메인으로 데이터를 수집합니다. JSON을 눌러 아래 정책을 붙여 넣으세요. {youru-account-id}를 수정하고, 필요 시 Region을 수정하세요.

     

    *제 경우 us-east-1을 ap-northeast-2로 변경했습니다.

     

    {

        "Version": "2012-10-17",

        "Statement": [

            {

                "Effect": "Allow",

                "Action": "es:DescribeDomain",

                "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain"

            },

            {

                "Effect": "Allow",

                "Action": "es:ESHttp*",

                "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*"

            }

        ]

    }

    4. 다음 버튼을 두 번 누르고, 이 정책의 이름을 pipeline-policy로 설정합니다.

     

    5. 정책을 생성합니다.

     

    6. 다음 이 정책을 연결할 역할을 생성합니다. 콘솔에서 Role을 누르고 역할 생성을 누릅니다.

     

    7. 사용자 지정 신뢰 정책을 눌러 다음 코드를 붙여넣습니다.

     

    {

       "Version":"2012-10-17",

       "Statement":[

          {

             "Effect":"Allow",

             "Principal":{

                "Service":"osis-pipelines.amazonaws.com"

             },

             "Action":"sts:AssumeRole"

          }

       ]

    }

    *

     

    AssumeRole은 리소스가 특정 동작을 수행하도록 sts를 이용해 일시적으로 권한을 부여하는 역할입니다.

     

    이 코드의 경우 osis(Open Search Indexing Service) 파이프라인이 이 역할을 사용할 수 있도록 합니다.

     

     

     

    그러면 만약 이 역할을 파이프라인이 아닌 ec2나 s3에 부여한다면 어떻게 될까요?

    당연히 아무런 동작도 실행할 수 없습니다. ec2와 s3 리소스에는 AssumeRole 권한이 없기 때문입니다.

     

    제가 이전에 작성한 포스팅에서 '2-1. AssumeRole이란?' 항목을 참조해주세요.

     

     

     

    8. 다음 버튼을 누르고, 이전에 생성한 정책인 piepline-policy를 선택하세요.

     

    9. 다음 버튼을 누르고, Role 이름을 PipelineRole로 설정하세요.

     

    10. 역할 생성 버튼을 누르세요.

     

    2단계: 도메인 생성하기

    다음으로 데이터를 수집(ingestion)할 ingestion-domain이라는 이름의 도메인을 생성할 것입니다. 

     

    다음 주소로 들어가서 아래 요구사항을 만족하도록 도메인을 생성할 것입니다.: https://console.aws.amazon.com/aos/home

     

    requirements:

     

    OpenSearch 1.0 이상 버전 or Elasticsearch 7.4 이상 버전의 엔진

    퍼블릭 액세스 허용

    세분화된 액세스 제어 비활성화 

    *세분화된 액세스 제어는 도메인 생성 방법을 표준 생성으로 선택해야 비활성화할 수 있습니다.

     

     

     

    *저는 비용을 줄이기 위해 아래와 같이 구성했습니다.

     

    템플릿: 개발 및 테스트

    배포 옵션: 대기 없는 도메인, 가용 영역: 1-AZ

    엔진 옵션: 최신

    데이터 노드

    Instance family: General purpose

    인스턴스 유형: t3.small.search (프리 티어에서만 사용 가능)

    노드 수: 1

    네트워크: 퍼블릭 액세스 (튜토리얼 권장 사항)

    세분화된 액세스 제어 비활성화 (튜토리얼 권장 사항)

    액세스 정책: 도메인 수준 액세스 정책 구성

    JSON을 눌러 다음 코드를 붙여 넣고, region과 account id를 수정하세요.

     

    *PipelineRole 역할이 도메인에 데이터를 전송하도록 허용하는 역할을 합니다.

     

    {

      "Version": "2012-10-17",

      "Statement": [

        {

          "Effect": "Allow",

          "Principal": {

            "AWS": "arn:aws:iam::your-account-id:role/PipelineRole"

          },

          "Action": "es:*",

          "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*"

        }

      ]

    }

     

     

    3단계: 파이프라인 생성하기

    이제 여러분은 도메인과 적절한 권한이 있는 역할이 있으며, 파이프라인을 생성할 수 있습니다.

     

     

     

    파이프라인을 생성하기 위해 

     

    1. Amazon OpenSearch Service 콘솔의 왼쪽 메뉴에서 파이프라인을 선택하세요.

     

    2. 파이프라인 생성 버튼을 누르세요.

     

    3. Blank를 선택 후 Select BluePrint 버튼을 누르세요.

     

    4. 파이프라인 이름을 ingestion-piepline으로 설정하고, 파이프라인 용량은 기본 세팅을 사용하세요.

     

    5. 이 튜토리얼에선 Http source를 사용하는 log-pipeline이라는 이름의 sub-pipeline을 생성합니다. Http source 플러그인을 사용하면 Json 형식의 array에서 로그 데이터를 가져올 수 있습니다. 파이프라인 구성에 다음 코드를 붙여 넣으세요.

     

    version: "2"

    log-pipeline:

      source:

        http:

          path: "/${pipelineName}/test_ingestion_path"

      processor:

        - date:

            from_time_received: true

            destination: "@timestamp"

      sink:

        - opensearch:

            hosts: [ "https://search-ingestion-domain.us-east-1.es.amazonaws.com" ]

            index: "application_logs"

            aws:

              sts_role_arn: "arn:aws:iam::your-account-id:role/PipelineRole"

              region: "us-east-1"

    log-pipeline: sub-pipeline의 이름

     

    log-pipeline.source.http.path: 로그를 수집할 HTTP 경로입니다. 이후 이 경로로 로그 데이터를 보낼 것입니다.

    processor: 로그에 적용할 데이터 처리 단계

     

    from_time_recived: 로그 수신 시간을 기준으로 타임스탬프를 생성합니다.

    destination: @timestamp 필드에 타임 스탬프를 저장합니다.

    sink.opensearch: 로그 데이터를 저장할 대상. 이 튜토리얼에선 opensearch를 사용합니다.

     

    hosts: OpenSearch 도메인

    index: 저장할 인덱스 이름

    aws: AWS 인증 정보

    6. sink.opensearch에서 hosts와 aws를 각각 ingestion-domain의 URL과 PipelineRole의 ARN으로 변경하세요.

     

    7. 파이프라인 검증 버튼을 눌러 검증 성공을 확인하세요.

     

    8. 튜토리얼을 간소화하기 위해 네트워크 부분에서 퍼블릭 액세스를 허용하세요.

     

    9. 튜토리얼을 진행하다가 이슈를 겪을 경우 CloudWatch Logs에 로그 게시를 활성화하세요. 

     

    로그 그룹이름을 다음과 같이 설정하세요: /aws/vendedlogs/OpenSearchIngestion/ingestion-pipeline/audit-logs

     

    10. 다음 버튼을 눌러 파이프라인을 생성하세요. 5-10분 정도 소요됩니다.

     

    4단계: 샘플 데이터 수집하기

    파이프라인이 활성 상태가 되면 데이터 수집를 실행할 수 있습니다. 파이프라인에 대한 모든 HTTP 요청에는 Signature 4 버전을 사용해야 합니다. Postman이나 awscurl과 같은 http 요청 도구를 사용하세요.

     

    튜토리얼에서 awscurl을 사용하므로 저는 awscurl을 이용했습니다. 설치 방법과 사용 방법은 하이퍼링크를 참조해주세요.

     

     

     

    도메인의 데이터를 인덱싱하기 위해 항상 IAM Role이나 IAM access key, secret key가 필요합니다.

     

     

     

    가장 먼저 수집 URL을 확인하세요.

     

     

     

    이제 해당 URL로 샘플 데이터를 수집할 것입니다.

     

    awscurl --service osis --region us-east-1 \

        -X POST \

        -H "Content-Type: application/json" \

        -d '[{"time":"2014-08-11T11:40:13+00:00","remote_addr":"122.226.223.69","status":"404","request":"GET http://www.k2proxy.com//hello.html HTTP/1.1","http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)"}]' \

        https://pipeline-endpoint.us-east-1.osis.amazonaws.com/log-pipeline/test_ingestion_path

     

     

    * 위 명령에서 region과 url을 자신의 구성과 맞게 변경하세요. 아래 사진은 저의 경우입니다.

     

    region은 ap-northeast-2, url은 제 도메인의 수집 url입니다.

     

     

     

    *수집 URL의 'log-pipeline/test_ingestion_path' 경로로 요청을 보낸 게 보이시나요?

     

    'log-pipeline/test_ingestion_path'는 3단계의 코드에서 설정한 log-pipeline의 http 수신 경로입니다.

     

     

     

    여러분은 200 OK 응답을 받아야 합니다. 만약 인증 에러가 발생할 경우 아마 파이프라인이 있는 계정이 아닌, 다른 계정에서 명령을 실행했기 때문일 것입니다. Fixing permission issues 문서를 참고하세요.

     

     

     

    이제 로그 데이터를 쿼리하겠습니다.

     

    awscurl --service es --region us-east-1 \

         -X GET \

         https://search-ingestion-domain.us-east-1.es.amazonaws.com/application_logs/_search | json_pp

    이 명령을 자신의 구성에 맞도록 변경하세요.

     

     

     

    쿼리 대상은 도메인이니까 이번엔 파이프라인 url이 아닌 도메인의 엔드포인트로 url을 설정해야 합니다.

     

    아래 사진은 저의 경우입니다. 제가 http 요청을 두 번해서 hits에 두 로그가 있는데, 요청을 한 번만 했다면 정상적인 경우는 하나의 hit만 있을 것입니다.

     

     

     

    연관 리소스

    이 튜토리얼은 HTTP를 이용하여 간단한 데이터 수집 예시를 보여줬습니다. 프로덕션 환경에선 클라이언트 애플리케이션( Fluent Bit, Kubernetes, or the OpenTelemerty Collector)의 상황에 맞게 파이프라인을 구성해야 합니다. 그래서 파이프라인은 이 튜토리얼보다 훨신 복잡할 것입니다.

     

    클라이언트를 데이터를 구성하고 수집하고 싶다면 아래 리소스를 참고하세요:

     

    Creating and Managing Pipeline

    Configuring your clients to send data to OpenSearch Ingestion

    Data Prepper Documentation

     

     

    도움이 됐던 강의 (AWS Summit)

    올해 9월에 진행된 아래 AWS Summit 강의에서 파이프라인의 데모를 확인할 수 있습니다. (23:34 ~)

    https://www.youtube.com/watch?v=jJGdg-zkkro&t=2122s