본문 바로가기
개발 환경/AWS

[AWS] AWS OpenSearch로 로그 및 데이터 검색 시스템 구축하기

by 우주다람쥐 2025. 3. 5.
반응형


개요

AWS OpenSearch(구 Elasticsearch)는 대규모 로그 및 데이터 검색을 효율적으로 수행할 수 있는 강력한 분산 검색 엔진입니다. 기존 Elasticsearch와의 차이점, Node.js를 활용한 데이터 저장 및 검색 방법, 그리고 AWS Lambda와 S3를 연계한 로그 분석 아키텍처를 살펴보겠습니다.


1. OpenSearch 개념과 기존 Elasticsearch와의 차이

1.1 OpenSearch란?

OpenSearch는 Amazon이 오픈소스로 제공하는 검색 및 분석 엔진으로, 기존 Elasticsearch 7.10 버전을 기반으로 개발되었습니다.

1.2 Elasticsearch와 OpenSearch 차이점

특징OpenSearchElasticsearch

라이선스 Apache 2.0 (완전 오픈소스) Elastic License (제한적)
지원 버전 OpenSearch 1.x, 2.x Elasticsearch 7.x, 8.x
AWS 서비스 연동 완전 지원 제한적
보안 기능 기본 내장 유료 X-Pack 필요
클러스터 관리 개선된 Auto-Tune 기능 기본 설정 유지

AWS 환경에서는 OpenSearch를 사용하는 것이 라이선스 및 관리 측면에서 유리합니다.


2. Node.js 기반 OpenSearch 데이터 저장 및 검색 예제

2.1 OpenSearch 클라이언트 설정

먼저, @opensearch-project/opensearch 라이브러리를 설치합니다.

npm install @opensearch-project/opensearch

이후, Node.js에서 OpenSearch 클라이언트를 설정합니다.

const { Client } = require('@opensearch-project/opensearch');

const client = new Client({
  node: 'https://your-opensearch-domain.com',
  auth: {
    username: 'admin',
    password: 'your-password'
  }
});

2.2 데이터 색인(Indexing)

async function indexDocument() {
  const response = await client.index({
    index: 'logs',
    body: {
      timestamp: new Date().toISOString(),
      level: 'INFO',
      message: 'Lambda function executed successfully'
    }
  });
  console.log(response);
}

indexDocument();

2.3 데이터 검색(Querying)

async function searchLogs() {
  const response = await client.search({
    index: 'logs',
    body: {
      query: {
        match: { message: 'Lambda' }
      }
    }
  });
  console.log(response.body.hits.hits);
}

searchLogs();

3. AWS Lambda + OpenSearch + S3를 활용한 로그 분석 아키텍처

3.1 아키텍처 개요

  • AWS Lambda: 로그 데이터를 S3에서 가져와 OpenSearch에 저장
  • S3: 원본 로그 파일 저장소
  • OpenSearch: 검색 및 분석 수행

3.2 Lambda 함수에서 OpenSearch로 데이터 적재

const AWS = require('aws-sdk');
const { Client } = require('@opensearch-project/opensearch');
const s3 = new AWS.S3();
const client = new Client({ node: 'https://your-opensearch-domain.com' });

exports.handler = async (event) => {
  for (const record of event.Records) {
    const bucket = record.s3.bucket.name;
    const key = record.s3.object.key;
    const data = await s3.getObject({ Bucket: bucket, Key: key }).promise();
    
    const logEntries = data.Body.toString('utf-8').split('\n');
    for (const log of logEntries) {
      await client.index({ index: 'logs', body: { message: log, timestamp: new Date() } });
    }
  }
};

이 Lambda 함수는 S3에 새로운 로그 파일이 생성될 때 자동으로 실행되어 데이터를 OpenSearch에 저장합니다.


결론

AWS OpenSearch를 활용하면 대규모 로그 데이터를 효율적으로 관리하고 검색할 수 있습니다. Node.js 기반으로 데이터를 저장하고 검색하는 방법을 익히고, AWS Lambda 및 S3를 연계하여 실시간 로그 분석 시스템을 구축할 수 있습니다.

핵심 요약

✅ OpenSearch와 기존 Elasticsearch의 차이 이해하기
✅ Node.js 기반 OpenSearch 클라이언트 활용법 익히기
✅ AWS Lambda + S3 + OpenSearch를 이용한 로그 분석 자동화 구현하기

이제 OpenSearch를 활용하여 강력한 데이터 검색 및 분석 시스템을 구축해보세요! 🚀

반응형

댓글