我可以从one_shot查询中获得结果,但我无法获得_raw字段的完整内容。
import splunklib.client as client
import splunklib.results as results
def splunk_oneshot(search_string, **CARGS):
# Run a oneshot search and display the results using the results reader
service = client.connect(**CARGS)
oneshotsearch_results = service.jobs.oneshot(search_string)
# Get the results and display them using the ResultsReader
reader = results.ResultsReader(oneshotsearch_results)
for item in reader:
for key in item.keys():
print(key, len(item[key]), item[key])
这为_raw提供了以下内容:
('_raw', 120, '2013-05-03 22:17:18,497+0000 [SWF Activity attNsgActivitiesTaskList1 19] INFO c.s.r.h.s.a.n.AttNsgSmsRequestAdapter - ')
所以此内容被截断为120个字符。我需要搜索结果的整个值,因为我需要在其上运行一些字符串比较。我没有找到关于ResultsReader字段或其大小限制的任何文档。
答案 0 :(得分:2)
我最好的猜测是,在原始数据事件中插入特殊标记以突出显示Splunk UI前端中匹配的搜索词。很可能,您的搜索字符串指定了在截断点处原始数据中存在的匹配字面值。这不是SDK结果获取方法的合适默认行为,并且当前存在修复此问题的错误(内部参考DVPL-1519)。
幸运的是,避免这个问题是相当简单的:只需要将segmentation='none'
作为参数传递给job.results()方法:
(...)
oneshotsearch_results = service.jobs.oneshot(search_string,segmentation='none')
(...)
请注意,service.jobs()方法的'segmentation'参数仅适用于Splunk 5.0及更高版本。