Puxe documentos com a API _search, ou deixe um script Python curto percorrê-los com helpers.scan. Se o seu pipeline manteve a linha de log original, geralmente em message ou event.original, extraia apenas esse campo e você terá os logs brutos de volta. O OpenSearch Dashboards pode gerar relatórios a partir de pesquisas salvas, mas não em um formato que o LogTotal leia hoje.
O OpenSearch suporta muitos SIEMs e plataformas de log caseiros, incluindo Amazon OpenSearch Service e o indexador Wazuh. O Prime Core tem 23.466 regras de detecção para OpenSearch, mapeadas para 671 técnicas MITRE ATT&CK. Abaixo está como obter uma fatia limpa de dados, sanitizá-la e investigá-la gratuitamente no LogTotal.
Antes de começar
Permissões. Com o plugin de segurança ativado, seu papel precisa de acesso de leitura no padrão do índice: o grupo de ações de leitura, ou pelo menos indices:data/read/search* e indices:data/read/scroll*. No Amazon OpenSearch Service, isso é feito por um usuário de controle de acesso detalhado ou credenciais IAM com assinatura SigV4.
Encontre os campos corretos. Os padrões de índice diferem entre pipelines. Verifique um documento e o mapeamento antes de escrever uma consulta:
GET logs-*/_search?size=1
GET logs-*/_mapping
Você está procurando o campo de tempo (@timestamp ou timestamp) e, idealmente, um campo que contenha a linha original (message, event.original, full_log no Wazuh).
Conte primeiro. Execute GET logs-*/_count com a mesma consulta para ver o que você está prestes a puxar.
Os comandos abaixo seguem a documentação do OpenSearch 2.x, verificada em outubro de 2026.
Opção 1: Python com opensearch-py (recomendado)
helpers.scan lida com paginação e se limpa sozinho. Instale opensearch-py, então:
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")
Para obter linhas brutas em vez de documentos, escreva hit[“_source”].get(“message”, “”) em vez de toda a _source. Para manter o arquivo pequeno, adicione “_source”: [“@timestamp”, “host.name”, “message”] à consulta.
Opção 2: curl para exportações pequenas
Para até 10.000 documentos, uma solicitação é suficiente:
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 é o default para index.max_result_window. Além disso, a solicitação falha, e você quer a Opção 1, ou um ponto no tempo (PIT) com search_after se preferir scriptar você mesmo.
Etapa 3: Carregar, sanitizar e revisar no LogTotal
- Carregar. Abra logtotal.com e soltar o arquivo .jsonl.
- Sanitizar. Revise antes de continuar.
- Revisão.
Quando dá errado
| Sintoma | Causa provável | Fix |
|---|---|---|
| security_exception / 403 | O papel não tem permissões de busca ou scroll | Peça acesso de leitura no padrão do índice |
| Janela de resultados é muito grande | Mais de 10.000 hits em uma solicitação | Use helpers.scan ou PIT com search_after |
| Zero hits, mas os dados estão lá | Nome errado do campo de tempo, ou confusão de fuso horário | Verifique o mapeamento; use timestamps Z explícitos |
| Nenhum contexto de busca encontrado | Scroll expirou entre páginas | Passe scroll=”5m” para helpers.scan; use páginas menores |
| Erros de assinatura no Amazon OpenSearch Service | Domínio baseado em IAM espera SigV4 | Use AWSV4SignerAuth de opensearch-py |
FAQ
Isso funciona para o Wazuh?
Sim. O indexador do Wazuh é baseado no OpenSearch. Alertas geralmente vivem em wazuh-alerts-*, e a linha de log original em full_log.
Devo exportar tudo em _source?
Somente se você precisar. Pipelines frequentemente adicionam dúzias de campos de enriquecimento. Reduzir ao tempo, host e a mensagem bruta mantém arquivos pequenos e uploads rápidos.