OpenSearch에서 로그를 내보내는 방법

OpenSearch에서 로그를 내보내는 방법

SOC Prime Team
SOC Prime Team linkedin icon 팔로우

_search API를 사용하여 문서를 가져오거나, 짧은 Python 스크립트로 helpers.scan을 통해 페이지를 넘길 수 있습니다. 파이프라인이 원본 로그 라인을 보존했다면, 보통 message나 event.original에 있으며, 해당 필드를 추출하면 원본 로그가 반환됩니다. OpenSearch Dashboards는 저장된 검색으로부터 보고서를 생성할 수 있지만, 오늘날 LogTotal에서 읽을 수 있는 형식은 아닙니다.

OpenSearch는 Amazon OpenSearch Service와 Wazuh 인덱서 등을 포함하여 많은 자작 SIEM과 로그 플랫폼을 지원합니다. Prime Core는 MITRE ATT&CK 기술 671개에 매핑된 OpenSearch에 대한 23,466개의 탐지 규칙을 가지고 있습니다. 아래는 데이터를 깨끗하게 추출하고, 정리하고, 무료로 LogTotal에서 조사하는 방법입니다.

무료로 시작하기

시작하기 전에

권한. 보안 플러그인이 활성화된 경우, 사용자의 역할은 인덱스 패턴에서 읽기 액세스가 필요합니다: 읽기 액션 그룹, 또는 최소한 indices:data/read/search*와 indices:data/read/scroll* 권한이 필요합니다. Amazon OpenSearch Service에서는 세분화된 액세스 제어 사용자 또는 SigV4 서명이 있는 IAM 자격 증명이 필요합니다.

적절한 필드를 찾기. 인덱스 패턴은 파이프라인마다 다릅니다. 쿼리를 작성하기 전에 한 문서와 매핑을 확인하십시오:

GET logs-*/_search?size=1
GET logs-*/_mapping

검색 대상은 시간 필드(@timestamp 또는 timestamp)와 이상적으로 원본 라인을 저장하는 필드(message, event.original, Wazuh의 full_log)입니다.

먼저 수를 세기. 같은 쿼리로 GET logs-*/_count를 실행하여 가져올 내용을 확인하십시오.

아래 명령은 2026년 10월 확인된 OpenSearch 2.x 문서를 따릅니다.

옵션 1: opensearch-py를 사용한 Python (권장)

helpers.scan은 페이징을 처리하고 자체 정리를 진행합니다. opensearch-py를 설치한 후 다음을 실행합니다:

import json, os
from opensearchpy import OpenSearch, helpers

client = OpenSearch(
    "https://opensearch.example.com:9200",
    http_auth=("reader", os.environ["OS_PASSWORD"]),
    verify_certs=True,
)
query = {"query": {"range": {"@timestamp": {
    "gte": "2026-10-19T00:00:00Z", "lt": "2026-10-20T00:00:00Z"}}}}

with open("opensearch_1019.jsonl", "w") as out:
    for hit in helpers.scan(client, index="logs-*", query=query, size=1000):
        out.write(json.dumps(hit["_source"]) + "n")

문서 대신 원본 라인을 얻으려면 전체 _source 대신 hit[“_source”].get(“message”, “”)를 사용하십시오. 파일 크기를 작게 유지하려면 쿼리에 “_source”: [“@timestamp”, “host.name”, “message”]를 추가하십시오.

옵션 2: 작은 내보내기를 위한 curl

최대 10,000개의 문서에는 한 번의 요청으로 충분합니다:

curl -sS -u reader -H 'Content-Type: application/json' 
  "https://opensearch.example.com:9200/logs-*/_search" -d '{
    "size": 10000,
    "query": {"range": {"@timestamp": {"gte": "2026-10-19T00:00:00Z", "lt": "2026-10-20T00:00:00Z"}}},
    "sort": [{"@timestamp": "asc"}]
  }' | jq -c '.hits.hits[]._source' > opensearch_small.jsonl

10,000은 기본 인덱스.max_result_window입니다. 이를 넘어가면 요청이 실패하고, 옵션 1을 사용하거나 search_after와 함께 PIT를 사용하여 직접 스크립트를 작성해야 합니다.

3단계: LogTotal에서 업로드, 정리 및 검토

  1. 업로드. 열기 logtotal.com .jsonl 파일을 드래그 앤 드롭하세요.
  2. 정리. 계속하기 전에 검토하세요.
  3. 검토. 

문제가 발생했을 때

증상가능성이 높은 원인Fix
security_exception / 403역할에 검색 또는 스크롤 권한이 부족함인덱스 패턴에 대한 읽기 권한 요청
결과 창이 너무 큼한 요청에 10,000개 이상의 히트helpers.scan 또는 search_after와 함께 PIT 사용
0개의 히트, 데이터는 있는데잘못된 시간 필드 이름 또는 시간대 오류매핑을 확인하고 명시적 Z 타임스탬프 사용
검색 컨텍스트를 찾을 수 없음페이지 사이에 스크롤 만료됨helpers.scan에 scroll=”5m” 전달; 작은 페이지 사용
Amazon OpenSearch Service의 서명 오류IAM 기반 도메인은 SigV4를 기대함opensearch-py에서 AWSV4SignerAuth 사용

FAQ

Wazuh에 적용할 수 있나요?

네. Wazuh 인덱서는 OpenSearch 기반입니다. 경고는 보통 wazuh-alerts-*에 있으며, 원본 로그 라인은 full_log에 있습니다.

_source의 모든 것을 내보내야 하나요?

필요한 경우에만. 파이프라인은 종종 수십 개의 보강 필드를 추가합니다. 시간, 호스트 및 원본 메세지로 축소하면 파일이 작아지고 업로드가 빠릅니다.

SOC Prime의 Detection as Code 플랫폼에 가입하세요 귀사의 비즈니스에 가장 중요한 위협에 대한 가시성을 개선하세요. 시작을 돕고 즉각적인 가치를 제공하기 위해 지금 SOC Prime 전문가와의 회의를 예약하세요.