首页 > 解决方案 > Python:来自 splunk 的 .json 数据

问题描述

以下问题:对于我的大学项目,我将一个 json 文件上传到 splunk,现在我想在 python 中使用它作为数据框对象。

代码:

import urllib3
import requests
import json
import pandas as pd

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


server = 'localhost'
port = 8089
username = 'testuid'
password = 'testpw'
url='https://'+ server +':' + str(port)
param = {'shortname', 'permissionId'}

search='?search=search source%3D%22events.json%22%20host%3D%22DESKTOP-9QDQ0FT%22%20index%3D%22projektseminar%22%20sourcetype%3D%22_json%22%20%7Chead%2020%20%7Ctable%20shortname%20permissionId'

output_type =  '&output_mode=json'
search_url = url + '/servicesNS/nobody/search/search/jobs/export' + search + output_type

r = requests.get(search_url, auth=(username, password), verify=False)

到目前为止,效果很好。现在我想要这个特定的“r”响应对象作为具有 2 列“shortname”和“permissionId”的数据框对象。我有几个问题。首先,我从 Rest API 获得的 json 包含“preview”、“offset”和“results”列。我想要一个包含“shortname”和“permissionId”列的数据框。问题是我不能使用json.load(r)r.json()或类似的东西,总是出现“额外数据”错误。所以我是 splunk 和 python 的初学者,所以也许有更好的方法来做到这一点......我还没有尝试过的另一个想法是使用 csv 输出而不是 json。如果你们对如何解决这个问题有一些建议,那就太好了。

谢谢

标签: pythonjsoncsvsplunk

解决方案


完成此操作的最佳方法是使用 Splunk API for Python

您可以在此处找到 SDK:https ://github.com/splunk/splunk-sdk-python

import sys
import os
from time import sleep
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "splunk-sdk-python-1.6.13"))

import splunklib.client as client
import splunklib.results as results

import pandas as pd

# Note my port, username, and password are specific to my instance. The default port is 8089

service = client.connect(host='localhost', port=MY_PORT,
                   username='MY_USER', password='MY_PASS')

search = """search index=_internal sourcetype="splunkd_access" |table *"""

job = service.jobs.create(search)
while True:
    while not job.is_ready():
        pass
    if job['isDone'] == '1':
        break
    sleep(2)


reader = results.ResultsReader(job.results())


df = pd.DataFrame(reader)
print(df)

推荐阅读