我需要从splunk导出大量事件。因此,出于性能原因,我在我的python代码中直接使用REST API而不是使用Splunk SDK本身。
我found以下curl命令导出结果。这也可用here: -
curl -ku username:password
https://splunk_host:port/servicesNS/admin/search/search/jobs/export -d
search=“search index%3D_internal | head 3” -d output_mode=json
我尝试使用python的http函数模拟这个函数如下: -
//assume i have authenticated to splunk and have a session key
base_url = "http://splunkhost:port"
search_job_urn = '/services/search/jobs/export'
myhttp = httplib2.Http(disable_ssl_certificate_validation=True)
searchjob = myhttp.request(base_url + search_job_urn, 'POST', headers=
{'Authorization': 'Splunk %s' % sessionKey},
body=urllib.urlencode({'search':'search index=indexname sourcetype=sourcename'}))[1]
print searchjob
最后一次打印会一直打印所有结果,直到完成为止。对于大型查询,我得到“内存错误”。我需要能够以块(例如50,000)读取结果并将它们写入文件并重置缓冲区以进行searchjob。我怎么能做到这一点?