从QRadar提取原始事件的最干净方法是使用Ariel REST API。运行选择UTF8(payload)的AQL查询,等待搜索完成,并将结果以JSON格式提取。最终得到的日志行与日志来源发送时完全一致。日志活动选项卡也可以导出搜索结果,但格式不是LogTotal今日能够读取的。
QRadar位于许多SOC的中心,迟早有人需要在控制台之外获取其数据的一部分:例如IR合作伙伴、第二意见或无需构建新规则的快速检查。Prime Core为QRadar提供了23,656条检测规则,映射到674个MITRE ATT&CK技术。下面是如何提取一部分干净的原始事件,清理并在LogTotal中免费调查的。
本指南涵盖了QRadar SIEM、内部部署和软件。如果贵公司使用的是QRadar SaaS,IBM于2024年卖给Palo Alto Networks,您可能已经转移到Cortex XSIAM。
开始之前
一个授权服务令牌。 在下创建 管理员 → 授权服务 并为其设置过期日期。令牌承载用户角色和安全配置文件。安全配置文件决定了它可以查看哪些日志来源和网络。如果其范围比您自己的更窄,API会安静地返回比日志活动显示的更少的事件。这是QRadar导出时最常见的“我的事件去了哪里?”的时刻。
保留。 事件的存活时间由您的保留桶允许时间决定(管理员 → 事件保留)。如果您需要的时间窗口比这更旧,就没有可以导出的了。
网络访问。 API在控制台的HTTPS端口上运行。控制台通常使用自签名证书;使用–cacert指定正确的CA指向curl,而不是关闭验证。
步骤1:编写AQL查询
选择负载和一些字段以提供上下文:
SELECT DATEFORMAT(starttime, 'yyyy-MM-dd HH:mm:ss') AS event_time,
LOGSOURCENAME(logsourceid) AS log_source,
QIDNAME(qid) AS event_name,
UTF8(payload) AS payload
FROM events
WHERE LOGSOURCENAME(logsourceid) = 'web-03'
START '2026-10-19 00:00' STOP '2026-10-20 00:00'
一些经验注意事项:
- UTF8(payload) 是关键部分。 没有它,负载将以编码字节返回,而不是可读的日志文本。
- 缩小范围。 按日志来源名称过滤,或通过类型使用LOGSOURCETYPENAME(devicetype) ILIKE ‘%Linux%’,并保持窗口紧凑。
- START / STOP 用于精确的时间窗口,LAST 24 HOURS用于相对时间窗口。
- 先测试 in 日志活动 → 高级搜索。这与AQL相同,您将在导出前看到事件数量。
通过WinCollect收集的Windows事件作为文本负载到达,而不是EVTX。你导出的是那个文本。
步骤2:通过Ariel API运行
将此保存为qradar_export.sh。它启动搜索,等待并写入每行一个原始负载:
#!/usr/bin/env bash
set -euo pipefail
QRADAR="https://qradar.example.com"
TOKEN="${QRADAR_TOKEN:?set QRADAR_TOKEN first}"
AQL="SELECT UTF8(payload) AS payload FROM events WHERE LOGSOURCENAME(logsourceid) = 'web-03' START '2026-10-19 00:00' STOP '2026-10-20 00:00'"
# 1. start the search (-G puts the query in the URL, -X POST keeps the method)
SID=$(curl -sS -G -X POST -H "SEC: $TOKEN" -H "Accept: application/json"
--data-urlencode "query_expression=$AQL"
"$QRADAR/api/ariel/searches" | jq -r '.search_id')
# 2. wait for it to finish
while :; do
STATUS=$(curl -sS -H "SEC: $TOKEN" "$QRADAR/api/ariel/searches/$SID" | jq -r '.status')
[ "$STATUS" = "COMPLETED" ] && break
if [ "$STATUS" = "ERROR" ] || [ "$STATUS" = "CANCELED" ]; then echo "Search $STATUS"; exit 1; fi
sleep 5
done
# 3. fetch results: raw payloads, one per line
curl -sS -H "SEC: $TOKEN" -H "Accept: application/json"
"$QRADAR/api/ariel/searches/$SID/results" | jq -r '.events[].payload' > web-03_qradar_1019.log
想要结构化事件,通过字段获取时间和日志来源?在AQL中选择这些列,并在最后一步中使用jq -c ‘.events[]’。您将获得每行一个JSON对象。
对于非常大的结果集,请使用Range头分页获取结果,例如-H “Range: items=0-49999″,然后是下一个50,000。
步骤3:在LogTotal中上传、清理和查看
- 上传。 打开 logtotal.com 然后将文件拖入。
- 清理。 在继续之前检查一下。
- 查看。
当出现问题时
| 症状 | 可能原因 | Fix |
|---|---|---|
| 从API收到401 | 令牌无效、已过期,或者SEC头丢失 | 检查头;创建一个新令牌 |
| 事件比日志活动显示的少 | 令牌的安全配置文件看到的日志来源较少 | 给令牌一个与调查相匹配的配置文件 |
| 负载看起来像编码的乱码 | 查询中遗漏了UTF8() | 选择UTF8(payload) |
| 搜索状态变为ERROR | AQL语法 | 首先在高级搜索中测试查询 |
| 结果为空 | 时间窗口在保留之外,或者时区错误 | 检查保留;检查控制台的时区 |
| curl对证书发出警告 | 自签名控制台证书 | 使用–cacert指定控制台的CA |
FAQ
我可以从QRadar导出EVTX文件吗?
不能。QRadar将Windows事件存储为文本负载。若要获得真正的EVTX文件,从Windows主机上导出。
流数据呢?
流数据位于单独的表中:查询FROM flows而不是FROM events。它们是网络连接记录,不是日志,并且是独立的分析。