Comment exporter des journaux depuis OpenSearch

Comment exporter des journaux depuis OpenSearch

SOC Prime Team
SOC Prime Team linkedin icon Suivre

Récupérez des documents avec l’API _search, ou laissez un court script Python les parcourir avec helpers.scan. Si votre pipeline a conservé la ligne de log originale, généralement dans message ou event.original, extrayez simplement ce champ et vous récupérez les logs bruts. OpenSearch Dashboards peut générer des rapports à partir de recherches sauvegardées, mais pas dans un format que LogTotal peut lire aujourd’hui.

OpenSearch soutient de nombreuses SIEMs et plateformes de logs maison, y compris Amazon OpenSearch Service et l’indexeur Wazuh. Prime Core dispose de 23 466 règles de détection pour OpenSearch, mappées sur 671 techniques MITRE ATT&CK. Ci-dessous est comment obtenir un extrait propre de données, le sanitiser et l’étudier gratuitement dans LogTotal.

Commencez gratuitement

Avant de commencer

Autorisations. Avec le plugin de sécurité activé, votre rôle doit avoir un accès en lecture sur le modèle d’index : le groupe d’actions de lecture, ou au moins indices:data/read/search* et indices:data/read/scroll*. Sur Amazon OpenSearch Service, cela correspond soit à un utilisateur de contrôle d’accès à grain fin, soit à des identifiants IAM avec signature SigV4.

Trouvez les bons champs. Les modèles d’index diffèrent entre les pipelines. Vérifiez un document et le mapping avant de rédiger une requête :

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

Vous cherchez le champ de temps (@timestamp ou timestamp) et, idéalement, un champ qui contient la ligne originale (message, event.original, full_log dans Wazuh).

Comptez d’abord. Lancez GET logs-*/_count avec la même requête pour voir ce que vous allez extraire.

Les commandes ci-dessous suivent la documentation OpenSearch 2.x, vérifiée en octobre 2026.

Option 1 : Python avec opensearch-py (recommandé)

helpers.scan gère le pagination et se nettoie après lui-même. Installez opensearch-py, puis :

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

Pour obtenir des lignes brutes au lieu de documents, écrivez hit[« _source »].get(« message », «  ») à la place de l’ensemble _source. Pour garder le fichier petit, ajoutez « _source » : [« @timestamp », « host.name », « message »] à la requête.

Option 2 : curl pour de petites exportations

Pour jusqu’à 10 000 documents, une seule requête suffit :

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 est l’index.max_result_window par défaut. Au-delà, la requête échoue, et vous voulez l’Option 1, ou un point dans le temps (PIT) avec search_after si vous préférez le programmer vous-même.

Étape 3 : Téléchargez, nettoyez et révisez dans LogTotal

  1. Télécharger. Ouvrir logtotal.com et déposez le fichier .jsonl.
  2. Nettoyer. Examinez-le avant de continuer.
  3. Revoir. 

Quand ça tourne mal

SymptômeCause probableFix
security_exception / 403Le rôle n’a pas les permissions de recherche ou de défilementDemander la lecture sur le modèle d’index
La fenêtre de résultats est trop largePlus de 10 000 résultats dans une seule demandeUtilisez helpers.scan ou PIT avec search_after
Zéro résultat, mais les données sont làNom de champ temporel incorrect, ou problème de fuseau horaireVérifiez le mapping ; utilisez des timestamps explicites avec Z
Aucun contexte de recherche trouvéDéfilement expiré entre les pagesPassez scroll= »5m » à helpers.scan ; utilisez des pages plus petites
Erreurs de signature sur Amazon OpenSearch ServiceLe domaine basé sur IAM attend SigV4Utilisez AWSV4SignerAuth depuis opensearch-py

FAQ

Est-ce que cela fonctionne pour Wazuh?

Oui. L’indexeur Wazuh est basé sur OpenSearch. Les alertes se trouvent généralement dans wazuh-alerts-*, et la ligne de log originale dans full_log.

Dois-je exporter tout dans _source?

Seulement si vous en avez besoin. Les pipelines ajoutent souvent des dizaines de champs d’enrichissement. Réduire aux champs de temps, d’hôte et de message brut garde les fichiers petits et les téléchargements rapides.

Rejoignez la plateforme Detection as Code de SOC Prime pour améliorer la visibilité sur les menaces les plus pertinentes pour votre entreprise. Pour vous aider à démarrer et à générer une valeur immédiate, planifiez dès maintenant une réunion avec des experts de SOC Prime.