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

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

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

方法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

<設定例>

配置場所:検索を行うSplunkサーバ
対象ファイル、及び設定例:

------------------
props.conf
------------------
[testcsv]
KV_MODE = none
REPORT-testHeader = test_header
------------------
transforms.conf
------------------
[test_header]
DELIMS = ","
FIELDS = "header_field1", "header_field2", "header_field3",
"header_field4", "header_field5"

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

方法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

<設定例>

配置場所:検索を行うSplunkサーバ
対象ファイル、及び設定例:

------------------
props.conf
------------------
[testcsv]
REPORT-testHeader=test_header
------------------
transforms.conf
------------------
[test_header]
REGEX = ^(?<header_field1>[^,]+),(?<header_field2>[^,]+),(?<header_field3>[^,]+),
(?<header_field4>[^,]+),(?<header_field5>[^,]+)

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

方法3:データ取り込み時にヘッダー行からフィールド抽出する方法

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

<用途>

方法3は、バージョン6.2.2時点では抽出するフィールド数が多くなるとパフォーマンスに影響があることを確認しています。そのため現時点では推奨しておりません

<データ例>

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行目がヘッダー行になります。

<設定例>

①SplunkWeb画面上で設定する方法
例)CSVファイルをアップロードして取り込む場合

[手順]

  • 1)SplunkWebにログインします。
  • 2)設定>データの追加をクリックします。
  • 3)データの追加画面で「アップロード」を選択します。
  • 4)ソースの選択画面でCSVファイルをドラッグ・アンド・ドロップします。
  • 5)「次へ」ボタンをクリックします。
  • 6)ソースタイプの設定画面にてソースタイプボタンをクリックし、Structured>csvを選択します。(ソースタイプが「csv」になっている場合はそのままにします)
  • 7)その他の設定を行い、「名前を付けて保存」ボタンをクリックします。
  • 8)ソースタイプ名や保存先App等を設定して「保存」ボタンをクリックします。
  • 9)「次へ」ボタンをクリックします。
  • 10)ホストとインデックスを指定し「確認」ボタンをクリックします。

②設定ファイルを直接編集する方法

  • 配置場所:CSVファイルの入力設定(inputs.confの設定)を行ったサーバ(Forwarder、Indexer等)
  • 対象ファイル、及び設定例:
------------------
props.conf
------------------
[testcsv]
INDEXED_EXTRACTIONS=csv
------------------

※設定変更後Splunkサービスの再起動が必要です。

補足情報

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

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

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

<設定例>

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

※山括弧<>を全角で表記しておりますが、実際には半角の山括弧で設定してください。
※[monitor:///tmp]のパス情報(/tmp)は環境に応じて読み替えを行ってください。

以上