はじめに
以前、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で取り扱えますよ!
最後に
上記のサンプルノートブック置いておくのでご自由にお使いください。
逆にデータをRestAPIを使ってSplunkに取り込みたい時はこちらをご覧ください↓
pythonでログを Splunkに取り込む ( RestAPI + HECの組み合わせ)