使用 _search API 拉取文档,或让一个短的 Python 脚本通过 helpers.scan 分页浏览。如果您的管道保留了原始日志行,通常在 message 或 event.original 中,只提取该字段,您就可以得到原始日志。OpenSearch Dashboards 可以从保存的搜索生成报告,但不是今天 LogTotal 读取的格式。
OpenSearch 支持许多自制的 SIEM 和日志平台,包括 Amazon OpenSearch Service 和 Wazuh 索引器。Prime Core 针对 OpenSearch 提供了 23,466 条检测规则,映射到 671 个 MITRE ATT&CK 技术。下面是如何将一块干净的数据切片,清理并免费在 LogTotal 中调查的方法。
开始之前
权限。 启用安全插件后,您的角色需要对索引模式具有读取访问权限:读取操作组,或至少 indices:data/read/search* 和 indices:data/read/scroll*。在 Amazon OpenSearch Service 上,这要么是精细粒度访问控制用户,要么是带有 SigV4 签名的 IAM 凭证。
找到合适的字段。 管道之间的索引模式有所不同。在您编写查询之前,检查一个文档和映射:
GET logs-*/_search?size=1
GET logs-*/_mapping
您要寻找的是时间字段(@timestamp 或 timestamp)以及理想情况下保存原始行的字段(在 Wazuh 中为 message, event.original, full_log)。
先进行计数。 运行 GET logs-*/_count 使用相同的查询查看您将要拉取的内容。
下面的命令遵循已在 2026 年 10 月检查的 OpenSearch 2.x 文档。
选项 1:使用 opensearch-py 的 Python(推荐)
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) 并搜索_after,如果您宁愿自己编写脚本。
步骤 3:在 LogTotal 中上传、清理和审核
- 上传。 打开 logtotal.com 并拖入 .jsonl 文件。
- 清理。 在继续之前查看它。
- 审核。
当出错时
| 症状 | 可能的原因 | Fix |
|---|---|---|
| security_exception / 403 | 角色缺少搜索或滚动权限 | 请求对索引模式的读取权限 |
| 结果窗口太大 | 一次请求中超过 10,000 次命中 | 使用 helpers.scan 或使用搜索后指针 (PIT) 和搜索_after |
| 零命中,但数据存在 | 时间字段名称错误或时区混淆 | 检查映射;使用显式 Z 时间戳 |
| 未找到搜索上下文 | 滚动在页面之间过期 | 传递 scroll=”5m” 给 helpers.scan;使用更小的页面大小 |
| Amazon OpenSearch Service 上的签名错误 | 基于 IAM 的域预期使用 SigV4 | 使用 opensearch-py 的 AWSV4SignerAuth |
FAQ
这适用于 Wazuh 吗?
是的。Wazuh 索引器是基于 OpenSearch 的。警报通常存在于 wazuh-alerts-* 中,原始日志行存在于 full_log。
我应该导出所有内容到 _source 吗?
只有当你需要时。管道通常添加数十个增强字段。修剪到时间、主机和原始消息可保持文件小且上传速度快。