Data Engineering/opensearch

OpenSearch Searchable Snapshot을 이용한 원격 로그 검색 방법

ygtoken 2025. 8. 6. 22:22
728x90

지난 포스트에서는 기존 Warm Tier를 제거하고, MinIO 기반 Searchable Snapshot 구조로 전환하는 방법을 정리했습니다.

이번 글에서는 실제로 이렇게 저장된 Searchable Snapshot을 어떻게 원격에서 검색하는지 실습을 통해 자세히 알아보겠습니다.

 


🧩 전제 조건: 환경 구성 요약

  • OpenSearch 2.x 이상
  • repository-s3 플러그인 설치됨
  • minio 오브젝트 스토리지 준비됨
  • 버킷에 snapshot이 이미 존재함 (logs-snap-202308)
  • snapshot은 remote_snapshot 으로 복원됨

 

지난 포스트에서 설명한 구조를 그대로 이어받습니다.

 


 

🔁 1. 스냅샷 복원 (remote_snapshot 설정)

 

먼저, 원격 스냅샷을 복원하되, 로컬로 가져오지 않고 바로 검색 가능한 형태로 설정합니다.

POST _snapshot/minio-warm/logs-snap-202308/_restore
{
  "indices": "logs-*",
  "storage_type": "remote_snapshot",
  "rename_pattern": "(.+)",
  "rename_replacement": "restored-$1",
  "index_settings": {
    "index.blocks.read_only": false
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}

📌 주요 포인트

 

  • storage_type: remote_snapshot: 이게 핵심. 복원하지 않고 MinIO에 있는 데이터를 원격으로 직접 검색
  • rename_pattern/rename_replacement: 인덱스 이름 중복 방지

 


 

✅ 2. 인덱스가 잘 복원됐는지 확인

GET _cat/indices?v

또는 개별 인덱스의 저장 방식 확인:

GET /restored-logs-*/_settings?pretty

🔎 기대 결과:

"index.store.type": "remote_snapshot"

 


 

🔍 3. Searchable Snapshot 인덱스에서 검색하기

 

 

A. 일반 텍스트 검색 쿼리

GET /restored-logs-202308/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  },
  "size": 10
}

 

  • match: 일반적인 텍스트 검색
  • message: 로그 메시지 필드

 


 

B. 시간 범위 검색 (예: 특정 날짜의 오류 로그)

GET /restored-logs-202308/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "message": "OutOfMemoryError"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2023-08-01T00:00:00",
              "lte": "2023-08-01T23:59:59"
            }
          }
        }
      ]
    }
  }
}

 

  • @timestamp: 타임스탬프 필드를 기준으로 범위 지정
  • "match_phrase": 완전 일치 검색

 


 

C. Kibana / OpenSearch Dashboards에서 시각화도 가능

 

  • restored 인덱스를 Index Pattern에 등록
  • Discover 탭에서 restored-logs-* 검색
  • 시각화 차트도 동일하게 구성 가능

 


 

🧠 성능 팁

항목
🔄 자주 사용하는 쿼리 저장된 search template 또는 alias 활용
⚠️ 느린 응답 검색 전용 노드로 분리, MinIO IOPS 확인
📊 latency 측정 _profile 또는 _search?profile=true 옵션 활용
📁 인덱스 설계 @timestamp, level, message.keyword 등 필요한 필드에 keyword 매핑 고려

 


 

📉 searchable snapshot의 검색 성능은?

 

  • 로컬 인덱스보다는 느릴 수 있지만…
  • 잘 구성된 MinIO 환경(10Gbps 네트워크, SSD 기반)에서는 수초 내 응답 가능
  • 대량 복원 후 분석하는 것보다 즉시 검색 가능한 점이 큰 장점

 


 

📌 마무리

 

Searchable Snapshot을 이용하면, 더 이상 Warm Tier 노드를 유지하지 않아도 과거 로그를 MinIO에서 직접 검색할 수 있습니다.

운영 효율성과 비용 최적화를 동시에 달성할 수 있는 방법이며, 대규모 로그 데이터에 매우 적합한 구조입니다.

 

728x90