transforms.conf 解説【Splunk】

この記事は約7分で読めます。
sponsored link

transforms.conf とは

transforms.conf とは「データの変換 (e.g., overriding, anonymizing) を正規表現で指定した構成ファイル」のことで、props.conf の定義をより柔軟にすることができます。(HF, Indexerが対象)

なお、利用の際は props.conf と連携させる必要があり、transforms.conf 単体で利用することはできません。

props.conf 解説【Splunk】
props.conf とは props.conf とは「データの処理 (e.g., inputs, indexing, searching) に関する構成ファイル」のことで、host, source...

transforms.conf の利用用途

  • 機密データのマスキング設定
  • 外部ソースのフィールドを利用するための lookup tables の設定
  • 自動で付与された host, sourcetype を特定のルールに基づいて上書きする設定
  • (複数 Indexes の環境下で) 個別のイベントを特定の Index にルーティングする設定
  • インデックス時に抽出されるフィールドの定義
  • サーチ時に抽出されるフィールドを props.conf よりも高度に定義 (e.g., 正規表現を複数のsources/sourcetypes/hostsに適用、複数の正規表現の利用、区切り文字抽出、1つのフィールドから複数の値を抽出、数値や_で始まるフィールドの抽出)

代表的なコマンドを用いた利用例

まず、props.conf の TRANSFORM-<class> = <stanza_name> でスタンザを作成します。

# props.conf 
[sample_sourcetype]            # [default]にするとグローバルに適用
TRANSFORM-test = test-stanza   # transforms.confと連携するためのスタンザを作成

Session IDのマスキング

SOURCE_KEY = <string>』:正規表現の適用先を指定 (e.g., _raw, MetaData:Host, field:test1, fields:test1,test2) 。大文字/小文字の区別があるため metadata:host としてはいけない。デフォルトでは「_raw」

『REGEX = <regex>』:正規表現 (e.g., ([a-z]+)=([a-z]+) )。FORMAT で形式を指定せずに利用することも可能 (e.g., (?<_KEY_1>[a-z]+)=(?<_VAL_1>[a-z]+) )。デフォルトでは空。

『FORMAT = <string_using_$n>』(インデックス抽出)$n を用いたそれぞれの正規表現に対応する出力形式を指定 (e.g., ipaddress::$1.$2.$3.$4)。デフォルトでは「<stanza>::$1」

『FORMAT = <field>::<value>』(サーチ抽出)$n に対応する出力や、固有値を用いた出力の形式を指定 (e.g., first::$1 second::$2 third::other-value, $1::$2)。デフォルトでは空。

『DEST_KEY = <key>』(インデックス抽出で有効)REGEX, FORMAT で得た結果の保存先を指定 (e.g., _raw, _MetaData:Index, queue, _TCP_ROUTING)。大文字/小文字の区別があるため _metadata:index としてはいけない。

[test-stanza]
SOURCE_KEY = _raw                              # default (基本設定しなくて良い) 
REGEX = (?m)^(.*)SessionId=\w+(\w{4}[&"].*)$   # 左の正規表現にマッチするイベントを抽出
FORMAT = $1SessionId=########$2           # セッションIDの先頭8桁をマスキング
DEST_KEY = _raw                                # マスキングした結果を_rawに上書き

エラーイベントのsourceを変更

[test-stanza]
REGEX = error$                 # イベント末尾が"error"のイベントの 
FORMAT = source::error_files   # sourceを"error_files"に変更し
DEST_KEY = MetaData:Source     # メタデータであるsourceに上書き (大文字/小文字の区別があるのでmetadata:sourceは×)

イベント毎に異なるhostをセット

[test-stanza]
REGEX = server-name:(\w*)$    # イベントの"server-name:"に続く文字列を
FORMAT = host::$1             # 新たなHostとしてセット 
DEST_KEY = MetaData:Host

500文字以上のイベントを取り込み前に削除

『INGEST_EVAL = <comma_separated_eval_expression>』(インデックス抽出で有効):インデックス抽出で新たに作成するカラムを計算式と共に記述。INGEST_EVAL は他のインデックス抽出の設定 (e.g., REGEX, DEST_KEY ) を上書きする。デフォルトは空。

なお、queue=nullQueue に指定したデータはインデックス化を行うキュー ( indexQueue ) へ送信されないため、不要なファイルを取り込まずにライセンスを節約することができる。

[test-stanza]
INGEST_EVAL = queue=if(length(_raw) > 500, "nullQueue", "indexQueue")
# queue=nullQueueとするとライセンスにカウントされない

イベントの中身に応じて異なるサーバーへルーティング

HFの props.conf, transforms.conf, outputs.conf を連携させることで、イベントの中身に応じて異なるサーバーへルーティングすることができます。

  • props.conf:スタンザ作成
  • transforms.conf:正規表現を指定し DEST_KEY = _TCP_ROUTING を設定
  • outputs.conf:ルーティング先のサーバーを指定
# props.conf
[default]                       # グローバルに適用
TRANSFORMING-routing = ERROR    # ERRORスタンザを作成
[syslog]                        # sourcetype = syslog
TRANSFORMING-routing = Syslog   # Syslogスタンザを作成

# transforms.conf
[ERROR]
REGEX = device_id=\[w+\](error+)
FORMAT = errorGroup
DEST_KEY = _TCP_ROUTING   # 宛先をTCPルーティングに指定
[Syslog] 
REGEX = \s(\w*)$
FORMAT = syslogGroup
DEST_KEY = _TCP_ROUTING   # 宛先をTCPルーティングに指定

# output.conf
[tcpout:errorGroup]
server = 999.99.99.9:9997, 999.99.99.0:9996   # 出力先のサーバーを指定 (エラーデータ)
[tcpout:syslogGroup]
server = 10.1.1.1:9997                        # 出力先のサーバーを指定 (Syslogデータ)

References

props.conf – Splunk Documentation

transforms.conf – Splunk Documentation

outputs.conf – Splunk Documentation

Anonymize data – Splunk Documentation

Route and filter data – Splunk Documentation