짧은 Python 스크립트를 사용하여 공식 클라이언트의 helpers.scan 또는 _search API와 시점(PIT) 및 search_after를 사용하세요. 최대 10,000행까지 빠르게 가져오려면 Kibana의 Dev Tools에서 format=json을 사용한 ES|QL이 바로 작동합니다. Kibana Discover도 보고서를 생성할 수 있지만, 오늘날 LogTotal에서 읽는 형식으로는 아닙니다. 통합이 이를 보존했다면, event.original은 원본 로그 라인을 보유합니다.
Elastic은 Elastic Security부터 자체 구축 스택까지 사내 보안 분석의 가장 일반적인 기반 중 하나입니다. Prime Core는 Elastic에 대해 23,722개의 탐지 규칙을 보유하고 있으며, 이는 671개의 MITRE ATT&CK 기법에 매핑되었습니다. 아래는 LogTotal에서 무료로 데이터를 가져와서, 그 데이터를 정리하고 조사하는 방법입니다.
시작하기 전에
인증. 에서 API 키 생성 스택 관리 → API 키 읽기 및 view_index_metadata 권한이 필요한 인덱스에서. 이를 Authorization: ApiKey <key>로 전송하세요. Elastic Cloud에서는 Elasticsearch 엔드포인트가 배포의 개요 페이지에 있습니다.
데이터가 어디에 있는지 알아야 합니다. Elastic Agent 통합은 logs-<dataset>-<namespace>로 명명된 데이터 스트림에 기록합니다. 예를 들어, System 통합에서의 Linux 인증 로그는 logs-system.auth-default로 이동합니다.
확인을 위해 event.original. 많은 통합에서는 기본적으로 원본 라인을 저장하지 않으며, 이는 “원본 이벤트 보존” 옵션입니다. 없을 경우, 구문 분석된 필드가 존재하며, 이는 JSON 업로드에 적합합니다.
데이터 계층. 차갑거나 동결된 계층에 대한 검색은 느립니다. 데이터가 오래되었을 때 창을 좁히세요.
예제는 현재 Elastic 문서(2026년 10월 확인)를 따릅니다.
옵션 1: helpers.scan을 사용한 Python (권장)
import json, os
from elasticsearch import Elasticsearch, helpers
es = Elasticsearch("https://my-deployment.es.example.com:443", api_key=os.environ["ES_API_KEY"])
query = {"query": {"range": {"@timestamp": {
"gte": "2026-10-19T00:00:00Z", "lt": "2026-10-20T00:00:00Z"}}}}
with open("elastic_auth_1019.jsonl", "w") as out:
for hit in helpers.scan(es, index="logs-system.auth-*", query=query, size=1000):
out.write(json.dumps(hit["_source"]) + "n")
원본 라인에 대해, 전체 문서 대신 hit[“_source”].get(“event”, {}).get(“original”, “”)을 기록하세요.
옵션 2: 빠른 가져오기를 위한 ES|QL
Kibana Dev Tools에서:
POST /_query?format=json
{
"query": """
FROM logs-system.auth-*
| WHERE @timestamp >= "2026-10-19T00:00:00Z" AND @timestamp < "2026-10-20T00:00:00Z"
| KEEP @timestamp, host.name, user.name, source.ip, message
| LIMIT 10000
"""
}
두 가지 주의사항. ES|QL은 제한을 설정하지 않으면 1,000행을 반환하며, 최대 10,000행까지 가능합니다. JSON 응답은 레코드가 아닌 열과 값으로 오지만, 하나의 객체로 전환하려면 query.json으로 저장하여 jq를 통해 실행하세요:
curl -sS -H "Authorization: ApiKey $ES_API_KEY" -H 'Content-Type: application/json'
"https://my-deployment.es.example.com/_query?format=json" -d @query.json
| jq -c '.columns as $c | .values[] | [$c, .] | transpose | map({(.[0].name): .[1]}) | add' > esql_1019.jsonl
옵션 3: Kibana UI(Discover)에서 로그 내보내기
작은 조사를 위해, Kibana Discover를 사용하면 브라우저에서 직접 로그를 검색, 필터링 및 내보낼 수 있습니다.
- Discover 열기. Kibana에 로그인하고 분석 → Discover로 이동하거나 메인 네비게이션에서 Discover를 선택하세요.
- 데이터 선택. 필요한 로그를 포함한 데이터 뷰, 예를 들어 logs-system.auth-*과 같은 것을 선택하세요. 관련된 Elasticsearch 인덱스 또는 데이터 스트림을 포함하고 있는지 확인하세요.
- 시간 범위 설정. 우측 상단의 시간 선택기를 사용하여 조사할 기간을 선택하세요. 불필요한 이벤트를 내보내지 않도록 창을 좁히세요.
- 로그 필터링. 검색 바 및 사용 가능한 필터를 사용하여 관련 이벤트를 격리하세요. 예를 들어, event.category: authentication을 입력하여 인증 활동에 집중하세요.
- 필드 선택. @timestamp, host.name, user.name, source.ip, message와 같은 유용한 열들을 추가하세요. 가능한 경우, 원본 로그 내용 보존을 위해 event.original을 포함하세요.
- 결과 내보내기. 열기 더보기 → 내보내기 → 결과를 CSV로 탭 (일부 버전에서, 공유 → CSV 보고서) 생성하고 CSV 파일을 다운로드하세요. 내보내기가 즉시 다운로드되지 않으면, 스택 관리 → 보고.
에서 찾으세요 대안: 로그를 JSON으로 복사. 작은 선택의 이벤트에 대해, Discover에서 관련 행을 선택하고, 선택됨 메뉴를 열고문서를 JSON으로 복사
를 선택합니다. 복사된 내용을 텍스트 편집기에 붙여넣고 .json 파일로 저장하세요. 현재 테이블 선택에 포함된 필드만 복사될 수 있습니다. CSV 보고서는 중간 크기의 내보내기를 위해 설계되었으며, Kibana 버전 및 구성을 기준으로 행 수 및 파일 크기 제한이 있습니다. JSON으로 Discover 세션 정의를 내보내는 것은 로그 이벤트 자체를 내보내지 않습니다.
LogTotal를 위해 지원되는 로그 형식을 사용하세요. JSONL이 필요한 경우, 아래 설명된 Python이나 Elasticsearch API 방법을 사용하여 레코드를 내보내거나, 데이터를 하나의 줄당 하나의 JSON 객체로 변환한 후 업로드하세요.
단계 3: LogTotal에서 업로드, 정리 및 검토
- 업로드. 열기 logtotal.com 으로 주사위에 .jsonl 파일을 떨어뜨리세요.
- 정리. 계속하기 전에 그것을 검토하세요.
- 검토.
문제가 발생했을 때
| 증상 | 가능성 있는 원인 | Fix |
|---|---|---|
| 401 또는 403 | API 키에 인덱스에 대한 권한이 부족합니다 | read 및 view_index_metadata 추가 |
| 결과 윈도우가 너무 큽니다 | 하나의 _search에서 10,000건 이상의 결과 | helpers.scan 또는 search_after와 함께 PIT 사용 |
| ES|QL이 정확히 1,000행 반환 | 기본 제한 | LIMIT 추가 (최대 10,000) |
| event.original 필드 없음 | 통합이 이를 보존하지 않았습니다 | 해석된 문서를 대신 내보내기 |
| 타임아웃 | 차갑거나 동결된 계층의 오래된 데이터 | 창을 좁혀서 조각으로 실행하세요 |
FAQ
Elastic Security 경고는 어떻게 하나요?
경고는 자체 인덱스(.alerts-security.alerts-*)에 존재합니다. 경고를 내보내는 것은 그 뒤의 로그를 내보내는 것과 다른 작업이며, LogTotal에서는 로그를 내보내세요.
OpenSearch에도 작동합니까?
아이디어는 동일하지만, 클라이언트가 다릅니다.