0
2

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 1 year has passed since last update.

Splunk: カスタムコマンド入門(2/4) - イベントを入力してみる

Posted at
実施環境

CentOS 8-Stream

Splunk Free 8.2.2

Python 3.7.10

splunk-sdk-python 1.7.3

0. 概要

Splunk のコマンドにはいくつかの種類があり、カスタムコマンドもそれぞれの種類のコマンドを作成することができます。
今回は各コマンドの作成方法を紹介していきます。

1. カスタムコマンドの種類

前回作成したカスタムコマンドのプログラムを見ると、コマンドの本体部分である「 test_class 」は「 GeneratingCommand 」というクラスを継承していることがわかります。

test.py
class test_class(GeneratingCommand):

この継承元のクラスは、作りたいコマンドの種類によっていくつか存在します。
実際、この継承元となるクラスがあるファイルを確認すると、以下の通り似たような名前のファイルが複数あることがわかります。

Linux
[root@testhost test]# ls -l /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/*command.py
-rw-r--r--. 1 splunk splunk  5432  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/eventing_command.py
-rw-r--r--. 1 splunk splunk  7872  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/external_search_command.py
-rw-r--r--. 1 splunk splunk 18949  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/generating_command.py
-rw-r--r--. 1 splunk splunk  9697  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/reporting_command.py
-rw-r--r--. 1 splunk splunk 40702  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/search_command.py
-rw-r--r--. 1 splunk splunk  6778  2月 13 14:59 /opt/splunk/etc/apps/search/lib/splunklib/searchcommands/streaming_command.py

前回使用した「 GeneratingCommand 」は、基本的に SPL の先頭で使用する、イベントの入力を受け付けないコマンドです。
今回は、 SPL の途中で使用する、イベントの入力を受け付ける種類のコマンド「 EventingCommand 」を紹介します。

基本的には「 GeneratingCommand 」「 EventingCommand 」の2つがあれば大抵のコマンドは作れるはずです。
他にもコマンドの種類はありますが、ここでは紹介しません。
気になる方は調べてみてください。

2. カスタムコマンド本体の作成

上記の通り、前回作成した「 GeneratingCommand 」は入力なしでイベントを生成し出力するコマンドでしたが、「 EventingCommand 」はそれとは異なり入力を加工して出力するコマンドです。

実際に作成してみました。
ファイルは前回作成したものをそのまま書き換えています。

test.py
#!/usr/bin/env python

import sys

sys.path.insert(0, "/opt/splunk/etc/apps/search/lib")
from splunklib.searchcommands import \
    dispatch, EventingCommand, Configuration

@Configuration()
class test_class(EventingCommand):
    def transform(self, events):
        test_sum = 0
        for event in events:
            test_sum = test_sum + int(event["test_count"])
        return [{"test_result": test_sum}]

dispatch(test_class)

「 events 」が入力イベント全体、「 event 」が1つ1つの入力イベントです。
「 event 」は出力イベントと同様に辞書の形をとり、上記のようにフィールド名を指定することで値を取得することができます。

3. 実行

実際に SPL で使用してみました。

Splunk
| makeresults count=3
| fields - _time
| streamstats count AS test_count
| TestCommand

WS000035.JPG

入力したイベントが加工されて出力されていることがわかります。

ここまで、カスタムコマンドの種類について紹介しました。
次回は、引数の指定や出力の分割など細かい機能を追加していきます。

戻る

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?