0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Splunkラボ】サンプルログを使ったソースタイプ作成/フィールド抽出定義を試す

0
Last updated at Posted at 2025-09-24

こんにちは。torippy1024です。
本日は、splunkを使ってソースタイプ作成やフィールド抽出定義をどう行うのか試してみます。

ソースタイプ/フィールド抽出とは

わざわざこの記事を読んでいる人であれば説明不要と思いますが、一応書いておきます。

ソースタイプとは、Splunkがログデータを分類するためにデータの構造、内容、形式を定義した属性です。フィールド抽出の定義、タイムスタンプの定義、改行の設定などの情報が含まれます。
参考:
https://docs.splunk.com/Splexicon:Sourcetype

フィールド抽出とは、ログデータに含まれる情報を抽出し、フィールドにマッピングする処理のことです。フィールドの抽出は、Splunkがログデータを受け取りインデックス化したときに行われるものと、サーチ実行時に行われるものの二つがあります。最近では、サーチ実行時に行われることのほうが多いようです。
参考:
https://docs.splunk.com/Splexicon:Fieldextraction

ソースタイプ作成/フィールド抽出の流れ

大まかには以下のような流れで実施します。
(1)ログ形式の確認(タイムスタンプ、文字コード、イベント区切りなどの確認)
(2)ソースタイプ作成とサンプルログのアップロード
(3)フィールド抽出の設定
(4)Forwarderへの設定反映

ラボで使うサンプルログ

サンプルログは以下とします。簡易的なものですがお試しなのでこれくらいにしておきます。

サンプルログ(ファイル名:labapp.logとしてローカルPCにコピペして保存しておいてください)

2025-09-23T14:30:25+09:00 [INFO] user:yamada action:login ip:192.168.1.100 result:success
2025-09-23T14:31:12+09:00 [INFO] user:tanaka action:login ip:192.168.1.101 result:success
2025-09-23T14:32:45+09:00 [WARN] user:sato action:login ip:10.0.0.15 result:failed
2025-09-23T14:33:22+09:00 [INFO] user:yamada action:access_file ip:192.168.1.100 result:success
2025-09-23T14:35:18+09:00 [INFO] user:suzuki action:login ip:192.168.1.102 result:success
2025-09-23T14:36:33+09:00 [ERROR] user:unknown action:login ip:203.0.113.45 result:blocked
2025-09-23T14:38:07+09:00 [INFO] user:tanaka action:logout ip:192.168.1.101 result:success
2025-09-23T14:39:41+09:00 [INFO] user:watanabe action:login ip:192.168.1.103 result:success
2025-09-23T14:41:15+09:00 [WARN] user:sato action:login ip:10.0.0.15 result:failed
2025-09-23T14:42:58+09:00 [INFO] user:kimura action:login ip:192.168.1.104 result:success

ソースタイプ作成/フィールド抽出の実施

では、サンプルログをSplunkにアップロードし、ソースタイプを作成してみます。用意するSplunk環境はEnterprise、Cloudどちらでも構いません。好きな環境でお試しください。

(1)ログ形式の確認(タイムスタンプ、文字コード、イベント区切りなど)

サンプルログを取得し、ログフォーマットの前提条件を確認します。
細かいところを網羅して確認していくのは大変なので、主に以下のような点を重視して確認していきます。[]内がパラメータ名です。

  • タイムスタンプの場所とフォーマット[TIME_FORMAT]:
    • 今回のログではタイムスタンプはログの先頭にあります。フォーマットはyyyy-MM-ddTHH:mm:ss+HH:mmです。デフォルトではタイムスタンプやタイムゾーンは、splunkが柔軟に見つけようとしてくれるので、あまり細かく指定しなくても大丈夫な場合は多いのですが、もし間違って認識した場合はソースタイプ定義で明示する必要があります。
  • 文字コード[CHARSET]:
    • 今回のログではUTF-8とします。デフォルトもUTF-8です。このためWindows OS上でログをモニターしている場合、明示的にSHIFT-JISを指定しなければならない可能性がありますので注意してください。(今回のサンプルログについても、Windowsで作業している場合はSHIFT-JISに変更する可能性があります)
  • イベントの区切り(複数行をまとめて一つのイベントとして扱う必要があるか)[SHOULD_LINEMERGE]:
    • 今回のログでは、一行が一イベントとし、複数イベントのマージは不要とします。一行が一イベントが確定している場合、マージ不要としたほうがパフォーマンスが上がります。ただエラーログなどは複数行にわたって出力される可能性があり、かつデフォルトではSplunkがある程度柔軟に改行を認識してくれるので、迷った場合はデフォルトのままにしておくと良いと思います。

他にも、イベントあたりの最大サイズを決めるTRUNCATEなどのパラメータがありますが、考え出すとキリがないので今回は省略します。

また、ソースタイプ名も最初に決定しておきます。今回はソースタイプ名は「lab_login」とします。

(2)ソースタイプ作成とサンプルログのアップロード

次に、サンプルログをSplunkのテストインデックスにアップロードし、(1)で確認した内容が適切か確認します。

「設定」-「データの追加」を選択します。

次の画面で「アップロード コンピュータのファイルから」を選択します。

次の画面で「labapp.log」をアップロードして「次へ」を選択すると、「ソースタイプの選択」画面が表示されます。

スクリーンショット 2025-09-24 1.17.29.png

イベント改行、タイムスタンプ、詳細などのタブを選択すると、(1)で決めたパラメータを指定することができます。

ただ、今回はデフォルトのままで問題ないため、そのまま「名前をつけて保存」を選択し、ソースタイプ「lab_login」だけを指定してソースタイプを保存します。これでデフォルトパラメータを指定した状態でソースタイプの作成されます。

スクリーンショット 2025-09-23 21.10.30.png

次の画面で、テスト用のインデックス「test-labapp」を指定してアップロードします。

スクリーンショット 2025-09-23 21.12.23.png

無事にアップロードができたらサーチを実行し、(1)にて確認した、タイムスタンプ、文字コード、イベント区切りが適切に設定され、インデックスされていることを確認してください。

スクリーンショット 2025-09-24 1.21.49.png

(3)フィールド抽出の設定

次に、サンプルログに対してフィールド抽出を設定します。
今回は、GUIによるフィールド抽出ウィザードを使ってフィールド抽出を試してみます。

Splunk Webより「設定」-「フィールド」を選択し「フィールド抽出」を選択し、「フィールド抽出機能を開く」を選択します。

以下を選択すると、画面下にlab_loginのイベントがサーチされて表示されます。

項目
データタイプ ソースタイプ
ソースタイプ lab_login
時間範囲 全期間

スクリーンショット 2025-09-24 1.23.05.png

「_raw」から、適当に一つのイベントを選択すると次に進めるようになるので、「次へ」を選択します。

フィールド抽出を正規表現で決めるか、区切り文字で決めるか聞かれます。
区切り文字でフィールド抽出できるのはCSVなど特殊なフォーマットのみであるため、正規表現を選択し、「次へ」を選択します。

スクリーンショット 2025-09-24 1.24.29.png

「フィールドの選択」画面で、GUI上でフィールドにマッピングしたい項目を反転させ、フィールド名を入力して「Add Extraction」を選択していきます。

スクリーンショット 2025-09-24 1.25.30.png

今回は、timestamp、log_level、user、action、src_ip、resultをフィールドとして指定することにします。以下のような画面となります。

スクリーンショット 2025-09-24 1.29.12.png

ここで、「正規表現を表示」を選択すると、現時点でsplunkが想定している正規表現を表示することが可能です。
「次へ」を選択します。

認証画面では、指定したフィールド抽出定義が問題ないか、サーチを実行したり、「一致」「不一致」などのタブを選択してイベントのフィルタリングをしたりして検証することができます。
「不一致」タブをクリックした際、表示されるイベントが0となっていることが理想です。今回は単純なログなので不一致ログは存在しませんが、複雑なフォーマットのログなどを実際にフィールド抽出する際は、ここで考慮しなければならないことが発生する場合も多いです。

スクリーンショット 2025-09-24 1.31.13.png

「次へ」を選択し、フィールド抽出定義の名前(抽出名)と権限を指定して作成します。
抽出名は自動で勝手に作成されるので、そのまま保存してしまって構いませんが、権限はデフォルトの「オーナー」ではなく「すべてのApp」に変更しておきましょう。
(使い方によりますが、オーナーだけやAppだけに制限しないほうがいいと推測されます)

スクリーンショット 2025-09-24 1.32.47.png

作成されたフィールド抽出定義は、「設定」-「フィールド」を選択し、「フィールド抽出」を選択することで一覧表示することができます。以下のようになっていることがわかります。

スクリーンショット 2025-09-24 1.38.24.png

項目
名前 lab_login:EXTRACT-timestamp,log_level,user,action,src_ip,result
タイプ Inline
抽出/変換 ^(?P[^ ]+)\s+[(?P\w+)[^:\n]*:(?P[^ ]+) action:(?P\w+) ip:(?P[^ ]+)\s+\w+:(?P\w+)

(4)Forwarderへの設定反映

最後に、Forwarder経由で取り込んだログのフィールドが抽出されることを確認したら完了です。
本番適用のため、新しくインデックス「labapp」を作成し、そこに本番データを格納することにします。

Forwarderへのログのモニター設定

touch /tmp/labapp.log
sudo /opt/splunkforwarder/bin/splunk add monitor /tmp/labapp.log -index labapp -sourcetype lab_login

ログの出力

echo "2025-09-23T14:46:12+09:00 [INFO] user:suzuki action:access_file ip:192.168.1.102 result:success
2025-09-23T14:47:35+09:00 [WARN] user:ito action:login ip:172.16.0.25 result:failed
2025-09-23T14:49:08+09:00 [INFO] user:watanabe action:upload_file ip:192.168.1.103 result:success
2025-09-23T14:50:44+09:00 [ERROR] user:admin action:system_config ip:192.168.1.200 result:errr
2025-09-23T14:52:17+09:00 [INFO] user:kimura action:logout ip:192.168.1.104 result:success
2025-09-23T14:53:29+09:00 [INFO] user:hayashi action:login ip:192.168.1.105 result:success
2025-09-23T14:55:03+09:00 [WARN] user:unknown action:brute_force ip:198.51.100.77 result:blocked
2025-09-23T14:56:38+09:00 [INFO] user:tanaka action:login ip:192.168.1.101 result:success
2025-09-23T14:58:14+09:00 [INFO] user:yamada action:logout ip:192.168.1.100 result:success
2025-09-23T15:00:22+09:00 [INFO] user:ito action:login ip:172.16.0.25 result:success
2025-09-23T15:01:55+09:00 [ERROR] user:system action:backup_failed ip:127.0.0.1 result:error
2025-09-23T15:03:31+09:00 [INFO] user:hayashi action:access_file ip:192.168.1.105 result:success
2025-09-23T15:05:18+09:00 [WARN] user:guest action:login ip:10.0.0.50 result:failed
2025-09-23T15:06:42+09:00 [INFO] user:suzuki action:logout ip:192.168.1.102 result:success
2025-09-23T15:08:27+09:00 [INFO] user:nakamura action:login ip:192.168.1.106 result:success
2025-09-23T15:10:13+09:00 [ERROR] user:admin action:db_connection ip:192.168.1.200 result:timeout
2025-09-23T15:11:55+09:00 [INFO] user:watanabe action:logout ip:192.168.1.103 result:success
2025-09-23T15:13:08+09:00 [WARN] user:unknown action:sql_injection ip:203.0.113.88 result:blocked
2025-09-23T15:14:44+09:00 [INFO] user:nakamura action:generate_report ip:192.168.1.106 result:success
2025-09-23T15:15:25+09:00 [INFO] user:suzuki action:access_file ip:192.168.1.102 result:success" >> /tmp/labapp.log

Splunk Webで実行するサーチコマンド(時間範囲は全時間で実行)

index=labapp sourcetype=labapp

実際にソースタイプ「lab_login」で取り込まれ、指定したフィールドが抽出されていることが確認できます。

スクリーンショット 2025-09-24 2.12.06.png

参考資料

例のごとく公式ドキュメントは英語ばかりですが・・・・・・。

Why source types matter
https://help.splunk.com/en/splunk-cloud-platform/get-started/get-data-in/10.0.2503/configure-source-types/why-source-types-matter

Create source types
https://help.splunk.com/en/splunk-cloud-platform/get-started/get-data-in/10.0.2503/configure-source-types/create-source-types

Build field extractions with the field extractor
https://help.splunk.com/en/splunk-enterprise/manage-knowledge-objects/knowledge-management-manual/10.0/use-the-field-extractor-in-splunk-web/build-field-extractions-with-the-field-extractor

Use the Field extractions page
https://help.splunk.com/en/splunk-enterprise/manage-knowledge-objects/knowledge-management-manual/10.0/use-the-settings-pages-for-field-extractions-in-splunk-web/use-the-field-extractions-page

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?