0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pyhton コードで Splunk サーチ結果を読み込む (RestAPI編)

Last updated at Posted at 2021-02-27

はじめに

以前、JpyterNotebookを使ってSplunkデータを利用する という記事を書いたのですが、RestAPIを使ってもっと簡単に読み込むことが出来たので、ご紹介します。

Splunk RestAPI

Splunkでは Defaultでは 8089ポートを使って API接続することができます。RestAPIに関しては、@odorusatoshiさんのSplunk REST APIの玄関を叩いてみるが参考になるので、ご覧ください。

今回は、この Curlで取り込む方法を使って pythonで直接読み込むようにしたいと思います。

Curl 内容を Pythonコードに変更

Curl でできることは、pythonでももちろんできます。しかもこちらのサイトを利用すると、自動的にpythonコードに変換してくれるという非常に便利なサイトもあります。

変換したコードがこちらです。

import requests

# サーチ内容をこちらに記載
search_list_query = """
search index=_internal 
| head 200 
| table _time source sourcetype user bytes
""" 

# curlオプションを記載
data = {
  'search': search_list_query,
  'exec_mode': 'oneshot',
  'output_mode': 'json',
  'count': '0'   # default だと 100個しかリターンされない
}

# Splunk サーバ、ユーザー、パスワードを変更ください
response = requests.post('https://<splunk-server>:8089/services/search/jobs' , data=data, verify=False, auth=("<user-name>", "<passwd>"))

サーチ内容: Splunk側でのサーチ内容は、search_list_query に書きます。
curlオプション: curlオプションは、 data に書いております。ポイントは count :0 とすることです。defaultだと100個までしか結果が取得できません。
接続情報: 最後にSplunkサーバとそのユーザー名(apiを実行できるロールを持っている)、パスワードを変更してください

注意点としては、8089ポートが FWなどでブロックされていないことを確認ください。(事前にcurlでチェックしておくのが重要)

結果をデータフレームに入れる

取得したデータは jsonフォーマットになっているので、pythonで扱いやすくするために データフレームに変換しておきます。(他にリストやタプル形式でも問題ないですが、単純に好きだから)

import pandas as pd
result=response.json()['results']
df = pd.DataFrame(result)

これで、自由にpythonで取り扱えますよ!

image.png

最後に

上記のサンプルノートブック置いておくのでご自由にお使いください。

逆にデータをRestAPIを使ってSplunkに取り込みたい時はこちらをご覧ください↓
pythonでログを Splunkに取り込む ( RestAPI + HECの組み合わせ)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?