Splunk SDK for Python如何在获取结果时指定所有(自定义)字段

本文档介绍了如何使用Splunk SDK进行日志分析,详细阐述了如何配置连接参数,调整搜索参数以获取包括默认字段、事件解析字段和自定义字段在内的所有数据。通过设置`exec_mode`为`blocking`和`rf`为`*`,确保能检索到完整的事件信息,从而避免仅依赖原始日志数据进行分析的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:最近在做日志分析相关开发,需要通过SDK对接splunk,拿到其中符合条件的syslog作进一步分析,但是在用splunk官方的SDK创建搜索并获取结果后发现,接口上获取到的数据相比于界面上搜索的内容多了一些内置字段,但是没办法看到界面上从事件中解析出来的字段并进行相应操作,这样导致只能拿到_raw字段中的原始日志进行分析,不能达到预期效果,于是翻阅了splunk接口文档以及rest api说明,通过参数调整能够拿到对应事件所有的字段(包括splunk默认字段及自动从事件中解析出的字段,还有自定义提取的字段),demo如下所示。

# pip install splunk-sdk
import splunklib.client as client
import splunklib.results as results

# splunk连接配置
connect_config = {
    "scheme": "https",
    "host": "192.168.100.10",
    "port": 8089,
    "autologin": True,
    "username": "admin",
    "password": "P@ssw0rd"
}

"""
splunk搜索配置,其中exec_mode为blocking表示阻塞获取,即等待查询完成后再接收返回的job对象
rf是指此次查询所需要的字段,具体参照splunk rest api中search/jobs的post参数说明[https://docs.splunk.com/Documentation/Splunk/8.2.6/RESTREF/RESTsearch#search.2Fjobs]
tips:在splunk中,如非特殊指定某索引的默认字段,则默认返回 host, source和source type这三个字段(以及其他内置字段),详见字段说明[https://docs.splunk.com/Documentation/Splunk/8.2.6/Search/Usefieldstoretrieveevents]
至于事件(splunk中的某一条数据可以理解为一个事件)中解析出来的字段,则不会在api接口中显式地返回(页面上也是通过选择字段实现额外展示),
而在创建job时若在rf参数中指定了"*",则表示此次查询返回默认字段、事件中解析出来的字段以及事先提取的自定义字段(提取字段时需要设置好该字段的用户权限及应用范围),
若不显式设置,只返回默认字段及其他内置字段
"""
splunk_search_kwargs  = {"exec_mode": "blocking", "rf":"*"}

# 创建splunk连接
splunk_client = client.connect(**connect_config)
# 构造splunk搜索语句
search_query_blocking = "search index=syslog | head 2"
# 创建搜索job
splunk_search_job = splunk_client.jobs.create(search_query_blocking, **splunk_search_kwargs)
"""
接收返回的结果,其中splunk_search_job.results(output_mode="json", f="*")的output_mode设为json是为了
将job的结果以json格式输出,然后用results库中的JSONResultsReader解析出来,
而f参数是指拿取结果时,要提取哪些在rf中指定的字段返回,默认是全部返回,若指定则用逗号分隔,详见search/jobs/{search_id}/results说明[https://docs.splunk.com/Documentation/Splunk/8.2.6/RESTREF/RESTsearch#:~:text=search_id%7D%20search%20events.-,search/jobs/%7Bsearch_id%7D/results,-https%3A//%3Chost%3E%3A%3CmPort]
"""
results = results.JSONResultsReader(splunk_search_job.results(output_mode="json", f="*"))
for result in results:
    print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值