使用会话密钥的Splunk REST Curl查询连续执行失败求助
我来帮你梳理下几个最可能的原因,都是日常用Splunk API时容易踩的坑:
会话密钥(Session Key)过期:Splunk的session key默认是有有效期的(通常1小时左右),首次调用成功后,后续请求可能刚好赶上密钥失效。你可以重新获取新的session key试试,用这个命令:
curl -u your_username:your_password https://hostname:8089/services/auth/login拿到新的密钥后替换掉请求里的
sessionkeyincluded,再重试后续操作。搜索作业并发限制触发:Splunk默认对同时运行的搜索作业有数量限制(比如
max_concurrent_searches参数,默认值取决于你的Splunk版本和许可证)。首次创建的作业可能还在运行状态,后续的创建请求被系统拒绝了。你可以先查看当前所有作业的状态:curl -H 'Authorization:Splunk <valid_session_key>' https://hostname:60659/services/search/jobs如果发现有大量pending或running的作业,可以先手动终止无用的作业,或者修改
limits.conf里的max_concurrent_searches参数调整限制(修改后需要重启Splunk生效)。请求格式或参数错误:后续调用时可能不小心搞错了请求格式,比如:
- 再次创建作业时,search参数里的引号转义是否正确?比如你的示例里用了
\",如果后续请求里没正确转义,会导致搜索语法错误。 - 轮询结果时,是不是用错了URL?轮询应该请求具体的SID地址:
https://hostname:60659/services/search/jobs/<your_sid>,而不是重复调用创建作业的/services/search/jobs接口。
- 再次创建作业时,search参数里的引号转义是否正确?比如你的示例里用了
SSL证书验证的隐性问题:虽然首次调用成功,但后续请求可能因为证书缓存或环境变化触发了验证失败。如果你的Splunk用的是自签名证书,可以在curl命令里加上
-k参数跳过证书验证试试:curl -k -H 'Authorization:Splunk <valid_session_key>' https://hostname:60659/services/search/jobs -d search="search sourcetype=\"xx:yy\" earliest=\"03/19/2018:07:00:00\" latest=\"03/19/2018:07:15:00\" | stats count"作业权限或用户上下文问题:确保后续请求用的是和首次创建作业相同的用户session key,因为Splunk的搜索作业是和创建用户绑定的,不同用户无法访问别人的作业。另外,检查该用户是否有足够的权限创建和查看搜索作业(比如
search和list_search_jobs权限)。
内容的提问来源于stack exchange,提问作者sathish

