Pobierz dokumenty za pomocą API _search lub pozwól krótkiej skrypcie Python przewijać je za pomocą helpers.scan. Jeśli twój pipeline zachował oryginalną linię logowania, zazwyczaj w message lub event.original, wyciągnij tylko to pole i otrzymasz surowe logi. OpenSearch Dashboards może generować raporty z zapisanych wyszukiwań, ale nie w formacie, który LogTotal czyta dzisiaj.
OpenSearch wspiera wiele własnych systemów SIEM i platform logowania, w tym Amazon OpenSearch Service i indeksator Wazuh. Prime Core ma 23,466 reguł detekcji dla OpenSearch, przypisanych do 671 technik MITRE ATT&CK. Poniżej pokazano, jak uzyskać czystą porcję danych, oczyścić ją i zbadać za darmo w LogTotal.
Zanim zaczniesz
Uprawnienia. Z włączoną wtyczką zabezpieczeń, twoja rola musi mieć dostęp do odczytu wzorca indeksu: grupę akcji do odczytu, lub przynajmniej indices:data/read/search* i indices:data/read/scroll*. Na Amazon OpenSearch Service, to albo użytkownik z kontrolą dostępu o drobnoziarnistym poziomie, albo poświadczenia IAM z podpisem SigV4.
Znajdź odpowiednie pola. Wzorce indeksów różnią się między pipeline’ami. Sprawdź jeden dokument i mapowanie, zanim napiszesz zapytanie:
GET logs-*/_search?size=1
GET logs-*/_mapping
Szukasz pola czasu (@timestamp lub timestamp) i, idealnie, pola, które przechowuje oryginalną linię (message, event.original, full_log w Wazuh).
Najpierw policz. Uruchom GET logs-*/_count z tym samym zapytaniem, aby zobaczyć, co zamierzasz pobrać.
Poniższe komendy posługują się dokumentacją OpenSearch 2.x, sprawdzoną w październiku 2026.
Opcja 1: Python z opensearch-py (zalecane)
helpers.scan zajmuje się paginacją i sprząta po sobie. Zainstaluj opensearch-py, a następnie:
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")
Aby uzyskać surowe linie zamiast dokumentów, napisz hit[„_source”].get(„message”, „”) zamiast całego _source. Aby zachować mały plik, dodaj „_source”: [„@timestamp”, „host.name”, „message”] do zapytania.
Opcja 2: curl dla małych eksportów
Dla maksymalnie 10,000 dokumentów wystarczy jedno żądanie:
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 to domyślne index.max_result_window. Po przekroczeniu tego, żądanie się nie powiedzie i potrzebujesz Opcji 1, lub punktu w czasie (PIT) z search_after, jeśli wolisz skryptować to samodzielnie.
Krok 3: Prześlij, oczyść i przejrzyj w LogTotal
- Prześlij. Otwórz logtotal.com i wrzuć plik .jsonl.
- Oczyść dane. Przejrzyj je przed kontynuacją.
- Przejrzyj.
Kiedy coś się psuje
| Objaw | Prawdopodobna przyczyna | Fix |
|---|---|---|
| security_exception / 403 | Rola nie ma uprawnień do wyszukiwania lub przeglądania | Poproś o odczyt wzorca indeksu |
| Okno wyników jest zbyt duże | Więcej niż 10,000 wyników w jednym żądaniu | Użyj helpers.scan lub PIT z search_after |
| Zero wyników, ale dane są tam | Zła nazwa pola czasu lub pomyłka w strefie czasowej | Sprawdź mapowanie; używaj jawnych znaczników czasu Z |
| Nie znaleziono kontekstu wyszukiwania | Scroll wygasł między stronami | Przekaż scroll=”5m” do helpers.scan; używaj mniejszych stron |
| Błędy podpisu w Amazon OpenSearch Service | Domena na bazie IAM oczekuje SigV4 | Użyj AWSV4SignerAuth z opensearch-py |
FAQ
Czy to działa z Wazuh?
Tak. Indexer Wazuh jest oparty na OpenSearch. Alerty zazwyczaj znajdują się w wazuh-alerts-* i oryginalna linia logowania w full_log.
Czy powinienem eksportować wszystko w _source?
Tylko jeśli tego potrzebujesz. Pipeline często dodaje dziesiątki pól wzbogacających. Ograniczenie do czasu, hosta i surowego komunikatu utrzymuje pliki małe i przyspiesza ich przesyłanie.