CSVデータのフィールド抽出方法

公開日
2018-06-18
最終更新日
2023-11-27
バージョン
Splunk Enterprise 9.0.4
概要
CSVファイルを取り込みフィールドを抽出する方法
参考情報
内容

CSVファイルを取り込みフィールド抽出する方法は下記3通りの方法があります。

  • サーチ時にフィールド抽出する方法
  • データ取り込み時にフィールド抽出する方法
    2-1.Splunk Webを使ってフィールド抽出する方法
    2-2.設定ファイルへ記述してフィールド抽出する方法
  • サーチ時にフィールド抽出する方法

サーチ時にフィールド抽出するには、以下のように設定ファイルに記載をします。

【概要】

  • props.confおよびtransforms.confにフィールド抽出する設定を記載します。※詳細は後述
  • 手順1で作成したソースタイプをinputs.confへ記載します。※詳細は後述
  • 手順2でinputs.confを変更した場合、そのサーバーのSplunkサービスを再起動し、設定を有効にします。
===
$SPLUNK_HOME/bin/splunk restart
===

※$SPLUNK_HOMEはインストールディレクトリです。デフォルトでは以下です。

Linux :
Splunk Enterprise : /opt/splunk
Universal Forwarder : /opt/splunkforwarder
Windows :
Splunk Enterprise : C:\Program Files\Splunk
Universal Forwarder : C:\Program Files\SplunkUniversalForwarder

上記の手順1、2の設定方法として2通りの方法をご紹介します。

方法1:データ取り込み後に区切り文字(カンマ)で抽出する方法

単純に区切り文字(CSVではカンマ)で区切ることのできるデータの場合、transforms.confの設定にて区切り文字(DELIMS)とフィールド名(FIELDS)を定義してフィールド抽出を行います。

<用途>

方法1ではカラム数が追加になった場合でも対応可能です。(推奨)
カラムが追加された場合、自動的に追加された部分のフィールド抽出はされません。追加した設定をすることで追加されたカラムもフィールド抽出が可能です。

<データ例>

2015/01/01 00:00:00,aaaa,bbbb,ccc,ddd
2015/01/01 00:00:01,111,2222,333,ddd

<設定例>

props.conf
配置場所:検索を行うSplunkサーバー
設定例:

[testcsv]
KV_MODE = none
REPORT-testHeader = test_header

transforms.conf
配置場所:検索を行うSplunkサーバー
設定例:

[test_header]
DELIMS = ","
FIELDS = "header_field1", "header_field2", "header_field3", "header_field4", "header_field5"

inputs.conf (任意:既に設定している場合はスキップしてください)
配置場所:データ入力をするSplunkサーバーもしくはフォワーダー
設定例:

[monitor:///opt/test/data/test1.csv]
sourcetype=testcsv

※DELIMSにて区切り文字を指定します。
※FIELDSで各フィールドを定義します。
※フィールド文字には英数字およびアンダースコアを使用してください。
※props.confおよびtransforms.confの設定変更後、Splunkサービスの再起動は不要です。inputs.confの設定変更後はSplunkサービスの再起動が必要です。
※データ内にCSVのエスケープ文字(\\ あるいは ") が含まれる場合、方法1ではフィールド抽出ができません。この場合には方法2を使用します。

方法2:データ取り込み後に正規表現を使用してフィールド抽出する方法

transforms.confの設定にて正規表現(REGEX)を使用してフィールド抽出を行います。

<用途>

方法2ではカラム数が追加になった場合は対応できません。方法1では対応できない抽出の場合のみ推奨しています。(カラムが追加されたことにより指定した正規表現に合致しなくなった場合、既存部分と追加された部分どちらもフィールド抽出されなくなります)

<データ例>

2015/01/01 00:00:00,aaaa,bbbb,ccc,ddd
2015/01/01 00:00:01,111,2222,333,ddd

<設定例>

props.conf
配置場所:データ入力設定をしたSplunkサーバーもしくはフォワーダー
設定例:

[testcsv]
INDEXED_EXTRACTIONS=csv
FIELD_NAMES="header_field1", "header_field2", "header_field3", "header_field4", "header_field5"

inputs.conf
配置場所:データ入力設定をしたSplunkサーバーもしくはフォワーダー
設定例:

[monitor:///opt/test/data/test2.csv]
sourcetype=testcsv

fields.conf
配置場所:検索を行うSplunkサーバー
設定例:

[sourcetype::testcsv::*]
INDEXED=True

※header_field1はフィールド名です。(<>内にフィールド名を指定します。)
※props.confおよびtransforms.confの設定変更後、Splunkサービスの再起動は不要です。inputs.confの設定変更後はSplunkサービスの再起動が必要です。
※正規表現はあくまで一例です。実際の正規表現はお客様にて作成いただきますようお願いいたします。

2. データ取り込み時にフィールド抽出する方法
データ取り込み時にフィールド抽出するには、Splunk Webから設定する方法と設定ファイルへ記述して設定する方法の2種類がございます。
2-1. Splunk Webを使ってフィールド抽出する方法
CSVファイルにヘッダーがある場合、ヘッダーがない場合それぞれの方法を記載します。

※この方法を利用して設定ができるのは、以下の環境に限られます。下記以外の環境は「2-2. 設定ファイルへ記載してフィールド抽出する方法」をご利用ください。

スタンドアロン環境
Splunk Webを有効にしているヘビーフォワーダー

CSVファイルにヘッダーがある場合

  • SplunkWebにログインします。
  • 設定>データの追加をクリックします。
  • データの追加画面で「アップロード」を選択します。
  • ソースの選択画面でCSVファイルをドラッグ・アンド・ドロップします。
  • 「次へ」ボタンをクリックします。
  • ソースタイプの設定画面にてソースタイプボタンをクリックし、Structured>csvを選択します。
    (ソースタイプが「csv」になっている場合はそのままにします)
  • 表示されるイベント値がフィールドごと分けられていることを確認します。
  • (任意)その他の設定を行います。
  • 「名前を付けて保存」ボタンをクリックします。
  • ソースタイプ名や保存先App等を設定して「保存」ボタンをクリックします。
  • 「次へ」ボタンをクリックします。
  • ホストとインデックスを指定し「確認」ボタンをクリックします。

2-2. 設定ファイルへ記載してフィールド抽出する方法
CSVファイルにヘッダーがある場合、ヘッダーがない場合それぞれの方法を記載します。

CSVファイルにヘッダーがある場合

CSVファイルの取り込み時にヘッダー行からフィールド情報を抽出します。

<データ例>

field1,field2,field3,field4,field5
2015/01/01 00:00:00,aaaa,bbbb,ccc,ddd
2015/01/01 00:00:01,111,2222,333,ddd

※1行目がヘッダー行になります。

<設定例>

props.conf
配置場所:データ入力設定をしたSplunkサーバーもしくはフォワーダー
設定例:

[testcsv]
INDEXED_EXTRACTIONS=csv

inputs.conf
配置場所:データ入力設定をしたSplunkサーバーもしくはフォワーダー
設定例:

[monitor:///opt/test/data/test2.csv]
sourcetype=testcsv

fields.conf
配置場所:検索を行うSplunkサーバー
設定例:

[sourcetype::testcsv::*]
INDEXED=True

※props.confおよびinputs.confの設定変更後はSplunkサービスの再起動が必要です。
※fields.confの設定変更後は以下のURLへアクセスし、[refresh]ボタンを押して設定を適用します。

http://<SplunkサーバーのIPアドレス>:8000/debug/refresh

CSVファイルにヘッダーがない場合

CSVファイルの取り込み時に、ヘッダーフィールドを指定します。

<データ例>

2015/01/01 00:00:00,aaaa,bbbb,ccc,ddd
2015/01/01 00:00:01,111,2222,333,ddd

<設定例>

props.conf
配置場所:検索を行うSplunkサーバー
設定例:

[testcsv]
REPORT-testHeader=test_header

transforms.conf
配置場所:検索を行うSplunkサーバー
設定例:

[test_header]
REGEX = ^(?<header_field1>[^,]+),(?<header_field2>[^,]+),(?<header_field3>[^,]+),(?<header_field4>[^,]+),(?<header_field5>[^,]+)

inputs.conf(任意:既に設定している場合はスキップしてください)
配置場所:データ入力設定をしたSplunkサーバーもしくはフォワーダー
設定例:

[monitor:///opt/test/data/test2.csv]
sourcetype=testcsv

※props.confおよびinputs.confの設定変更後はSplunkサービスの再起動が必要です。
※fields.confの設定変更後は以下のURLへアクセスし、[refresh]ボタンを押して設定を適用します。

http://<SplunkサーバーのIPアドレス>:8000/debug/refresh

補足情報

Splunkは先頭の256バイトで取り込み対象のファイルを識別します。

CSVファイルのヘッダー部分など先頭の256バイトに同じデータがある場合、ファイルの中身が異なっていても、先頭の256バイトで既存と同一ファイルとみなして取り込みをしません。

ファイルの先頭に同じデータ(ヘッダー)があっても別ファイルと認識し、新規ファイルを取り込ませる場合、inputs.confファイルに以下を設定します。

<設定例>

[monitor:///tmp]
crcSalt = <SOURCE>

※[monitor:///tmp]のパス情報(/tmp)は環境に応じて読み替えを行ってください。

以上