Help us understand the problem. What is going on with this article?

xml ファイルを Splunkで読み込んで分析してみる

はじめに

Splunkでは、どんなテキストデータでも取り込めるようになってますが、取り込んだだけでは分析しにくいデータもあります。その一つが XML 形式のファイルです。Splunkでは、データフォーマットを自動で認識して、それぞれのフォーマットに合わせたイベント分類やフィールド抽出をしてくれるのですが、XML/jsonのようなKey/Value 形式では、自動認識には対応していないため、読み込む時にひと工夫必要になります。

spath コマンドの紹介

そのまま読み込んだとしても、XMLごとに分けてくれる spath という便利なコマンドがあるので、まずはそちらを紹介します。

なにも考えずに XMLファイルを読み込むと、フィールド抽出もしていないので、その後の分析が非常に面倒です。(splunkでは、"=" で指定されていると自動的にフィールド抽出していくれるみたいです。)ただ spathコマンドを使うと、jsonやXMLタグごとにフィールド抽出をしてくれるので便利です。
https://docs.splunk.com/Documentation/Splunk/7.2.5/SearchReference/Spath

image.png

spath の課題

非常に便利なツールですが、spathには抽出してくれるのは、最初の5000文字までという制限があります。また特定のフィールドをタイムスタンプとして指定するとか、イベント単位(イベントブレイク)の指定などができません。
これは、Splunkの仕様の問題ですが、タイムスタンプやイベント単位(イベントブレイク)などは、Indexに取り込まれる前の処理(パース処理)で処理されてしまうため、そのあとの分析では対応することができないのです。

図1:XMLサンプル
image.png

このような場合は、最初からソースタイプに指定しておく必要があります。またソースタイプにjson/xmlフォーマットを指定しておくと、同時にフィールド抽出を5000文字制限なく取得できるので便利です。

ソースタイプとは

データを Indexに保存するためのフォーマットのようなものです。Splunkでは様々なタイプのログを取り込めるので、ログによってタイムスタンプの位置やイベントの改行ポイントが違っていたり、フィールド抽出の指定が違ったりします。そのためソースタイプを指定する事で、正しくデータを取り込めるようになります。各ベンダーのSplunk Appをインストールすると、その製品のソースタイプが予め用意されていたりします。

ソースタイプの作成

普通に取り込むと以下のようになってしまいます。
image.png

今回は用意したXMLデータ(図1サンプルデータ)用にソースタイプで以下の3つを設定します。
1. イベント単位(イベントブレイク)の指定
2. タイムスタンプの指定
3. フィールド抽出指定

1. イベント単位(イベントブレイク)の指定

<Interceptor> の箇所でイベントを区切るようにしたいと思います。イベント改行という設定箇所で「正規表現」を選択し、パターンに ([\r\n]*) を入力します。 ([\r\n]*)は、それぞれ改行を表す正規表現で、改行+ のパターンで区切るというイメージです。

image.png

2. タイムスタンプの指定

<ActionDate> で囲まれている、時刻をイベントのタイムスタンプとして指定したいとします。
image.png

注意)指定した日付について、デフォルトでは過去に遡って2000日(約5-6年)前までのデータに制限されてます。そのためそれ以前のデータをタイムスタンプとして指定したい場合は、下の詳細設定で MAX_DAYS_AGO パラメータを追加設定する必要があります。

3. フィールド抽出

XML タグをフィールド名として抽出します。KV_MODEというパラメータがあり、xmlと指定すると、XMLタグを認識してフィールド抽出してくれます。同じくjsonと指定するとjsonを認識してフィールド抽出してくれます。
https://docs.splunk.com/Documentation/Splunk/7.2.5/Knowledge/Automatickey-valuefieldextractionsatsearch-time

image.png

結果

image.png

その他

Splunkには、デフォルトで様々なタイプのソースタイプが用意されてます。jsonや csvの場合は、最初から_jsonや csvなどのソースタイプが用意されていますし、アプリをインストールするとソースタイプが用意されているので、まずはそちらを確認した方がいいかと思います。
https://docs.splunk.com/Documentation/Splunk/7.1.1/Data/Listofpretrainedsourcetypes

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away