Як експортувати логи з OpenSearch

Як експортувати логи з OpenSearch

SOC Prime Team
SOC Prime Team linkedin icon Стежити

Отримайте документи за допомогою _search API або дозвольте короткому скрипту на Python перегортати їх за допомогою helpers.scan. Якщо ваш pipeline зберіг оригінальний журнал, зазвичай у message або event.original, витягніть тільки це поле і отримаєте сирі журнали назад. OpenSearch Dashboards може створювати звіти з збережених пошукових запитів, але не у форматі, який читає LogTotal сьогодні.

OpenSearch підтримує безліч власноруч створених платформ SIEM та журналів, включаючи Amazon OpenSearch Service і індексатор Wazuh. Prime Core має 23466 правил виявлення для OpenSearch, які відповідають 671 техніці MITRE ATT&CK. Нижче показано, як отримати чистий зріз даних, очистити його та перевірити безкоштовно в LogTotal.

Почати безкоштовно

Перед початком

Дозволи. З увімкненим плагіном безпеки ваша роль повинна мати доступ на читання шаблону індексу: група дій читання або принаймні indices:data/read/search* та indices:data/read/scroll*. У Amazon OpenSearch Service це або користувач з детальним контролем доступу, або облікові дані IAM з підписом SigV4.

Знайдіть потрібні поля. Шаблони індексу відрізняються між pipelines. Перевірте один документ і мапінг перед написанням запиту:

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

Ви шукаєте поле часу (@timestamp або timestamp) і, ідеально, поле, яке містить оригінальний рядок (message, event.original, full_log у Wazuh).

Спочатку підрахувати. Виконайте GET logs-*/_count з тим самим запитом, щоб подивитися, що ви збираєтеся отримати.

Команди нижче відповідають документації OpenSearch 2.x, перевірені у жовтні 2026.

Варіант 1: Python з opensearch-py (рекомендовано)

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")

Щоб отримати сирі рядки замість документів, запишіть hit[“_source”].get(“message”, “”) замість цілого _source. Щоб зменшити розмір файлу, додайте “_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 – це максимальне значення index.max_result_window. Більше цього запит не успішний, і вам потрібен Варіант 1 або точка в часі (PIT) з search_after, якщо ви хочете скриптувати це самостійно.

Крок 3: Завантажте, очистіть та перегляньте в LogTotal

  1. Завантаження. Відкрийте logtotal.com і перетягніть файл .jsonl.
  2. Очистити. Перегляньте його перед продовженням.
  3. Переглянути. 

Коли щось йде не так

СимптомЙмовірна причинаFix
security_exception / 403Роль не має дозволів на пошук або скролінгЗапросіть доступ на читання шаблону індексу
Занадто велике вікно результатівБільше 10,000 хітів в одному запитіВикористовуйте helpers.scan або PIT з search_after
Нуль хітів, але дані єНеправильне ім’я поля часу або помилка в часовому поясіПеревірте мапінг; використовуйте явні Z часові мітки
Контекст пошуку не знайденоСкролінг закінчився між сторінкамиПередайте scroll=”5m” до helpers.scan; використовуйте менші сторінки
Помилки підпису на Amazon OpenSearch ServiceДомени на основі IAM очікують SigV4Використовуйте AWSV4SignerAuth з opensearch-py

FAQ

Це працює для Wazuh?

Так. Індексатор Wazuh базується на OpenSearch. Сповіщення зазвичай знаходяться в wazuh-alerts-*, а оригінальний журнал у full_log.

Чи слід експортувати все у _source?

Тільки якщо це потрібно. Пайплайни часто додають десятки полів збагачення. Скорочення до часу, хосту і сирого повідомлення дозволяє зменшити розмір файлів і швидше завантажити.

Приєднуйтесь до платформи Detection as Code від SOC Prime щоб покращити видимість загроз, найбільш актуальних для вашого бізнесу. Щоб допомогти вам розпочати та отримати негайну цінність, забронюйте зустріч зараз з експертами SOC Prime.