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.
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
- Télécharger. Ouvrir logtotal.com et déposez le fichier .jsonl.
- Nettoyer. Examinez-le avant de continuer.
- Revoir.
Quand ça tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| security_exception / 403 | Le rôle n’a pas les permissions de recherche ou de défilement | Demander la lecture sur le modèle d’index |
| La fenêtre de résultats est trop large | Plus de 10 000 résultats dans une seule demande | Utilisez 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 horaire | Vérifiez le mapping ; utilisez des timestamps explicites avec Z |
| Aucun contexte de recherche trouvé | Défilement expiré entre les pages | Passez scroll= »5m » à helpers.scan ; utilisez des pages plus petites |
| Erreurs de signature sur Amazon OpenSearch Service | Le domaine basé sur IAM attend SigV4 | Utilisez 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.