如何通过Splunk REST命令查询全用户执行的未保存/adhoc搜索
Splunk获取未保存/Adhoc搜索的实现方案
你可以通过两种官方支持的方式拉取全量用户执行的临时未保存搜索,适配不同的负载分析场景:
方案1:REST端点查询实时/近期搜索作业
所有在Splunk平台执行的搜索(无论是否保存)都会生成对应的搜索作业,存储在搜索作业端点中,直接执行以下SPL即可过滤出临时搜索:
| rest /services/search/jobs splunk_server=local count=0 | where isSavedSearch == 0 | table _time, user, app, search, runDuration, scanCount, eventCount, sid
核心字段说明:
_time:搜索发起时间user:执行搜索的账号名search:用户实际执行的SPL语句runDuration:搜索总执行耗时(单位:秒)scanCount:搜索扫描的总事件数,是评估搜索对集群负载影响的核心指标sid:搜索作业的唯一标识ID
注意:该端点默认仅返回近10分钟内未被系统清理的活跃/刚结束作业,适合实时排查当前运行的临时搜索,不适合长周期历史负载统计。
方案2:关联内部审计日志获取长周期历史搜索
如果需要分析数周/数月维度的临时搜索负载规律,直接查询Splunk内置的_audit审计索引即可,所有搜索操作都会在审计日志中留痕(留存周期由你环境的索引保留策略决定),执行以下SPL即可过滤出全量Adhoc搜索:
index=_audit action=search search=* NOT (search_id="scheduler*" OR savedsearch_name=*) | table _time, user, app, search, total_run_time, scan_count, event_count, search_id | rename total_run_time as runDuration, scan_count as scanCount, search_id as sid
过滤逻辑说明:
- 排除
search_id以scheduler开头的记录:这部分是定时调度触发的保存搜索作业 - 排除携带
savedsearch_name字段的记录:这部分是用户手动点击运行已保存搜索产生的作业 - 剩余结果即为用户在搜索栏手动输入、未保存直接执行的Adhoc临时搜索
补充说明:你之前使用的
| rest /servicesNS/-/-/saved/searches splunk_server=local命令仅能拉取所有已保存搜索的定义配置,不会返回任何搜索的实际执行记录,无论是保存搜索还是临时搜索的执行数据都无法通过该端点获取。
内容的提问来源于stack exchange,提问作者yoursplunkfriend
相关产品推荐
相关产品推荐

