表の行と列を入れ替えるSPL

Tips & Tricks 肥垣津 雄日

下記ログ形式で出力されるログに出会い、フィルターや統計処理の方法に悩みましたので、解決策について共有いたします。

time,2023/9/1-00:00,2023/9/1-00:01,2023/9/1-00:02,2023/9/1-00:03,…
send,0,1000,2000,3000,…
receive,0,100,200,300,…
flag,0,1,2,3,…

上記のログは、send、 receive、 flagといった各行に各データポイントの結果がoutputされており、データポイントごとにコンマ区切りで記録されます。

最終的に整形し出力したい表形式は下記です。

表形式

この形式にすることでsend、 recieve、 flagの値をフィルタリングしたり、統計処理することが可能です。

この記事では、次の2つの方法をご紹介します。

i) transposeコマンドを使用して、行と列を入れ替える
ii) rexコマンドを使用してフィールドを抽出し、各イベントごとに整形する

データの準備

いずれの方法もはじめにデータを準備します。

| makeresults
| eval _raw = "time;2023/9/1-00:00;2023/9/1-00:01;2023/9/1-00:02;2023/9/1-00:03;
send;0;1000;2000;3000;
receive;0;100;200;300;
flag;0;1;2;3; "

i) transposeコマンドを使用して、行と列を入れ替える

大まかな流れは次のとおりです。

手順は次のとおりです。

  1. multikvコマンドを用いて、_rawフィールドをテーブルに展開します
     multikvコマンドについては公式docをご確認ください。
     “forceheader=”で何行目をフィールド名として認識させるか指定できます。
    multikvコマンド
  2. fieldsコマンドを用い、不要なフィールドを省きます。transposeコマンドを用い、行と列を反転します
     transposeコマンドについては公式docをご確認ください。
    fieldsコマンド
  3. renameコマンドを用いて、列の名称を変更します
    renameコマンド

ii) rexコマンドを使用してフィールドを抽出し、各イベントごとに整形する

手順は次のとおりです。ポイントはmvexpandをするタイミングです。

整形手順

  1. rexコマンドを用いて、各フィールドを抽出します
    rexコマンド
  2. fieldsコマンドを用いて、不要なフィールドを省きます
    fieldsコマンド
  3. splitコマンドを用いて、シングルバリューをマルチバリューにします
     splitコマンドについては公式docをご確認ください。
    splitコマンド
  4. mvzipコマンドを用いて、各フィールドを結合したtemporaryフィールドを作成します
     mvzipコマンドについては公式docをご確認ください。
    mvzipコマンド
  5. Temporaryフィールド以外を省き、mvexpandコマンドを用いて、各行に展開します
     mvexpandコマンドについては公式docをご確認ください。
    fieldsコマンド
  6. rexコマンドを用いて、各フィールドを抽出します
     fieldsコマンドを用いて列を並び替えます
    rexコマンド/fieldsコマンド

    終わりに

    ii)のやり方は少し手間に思えますが、ログの形式によっては柔軟に活用できる方法ですので、このやり方もぜひ覚えてみてください。

関連記事

Splunk社員による公開研修!〜Splunk Japan SE Workshopのご紹介〜
Tips
5 分程度

Splunk社員による公開研修!〜Splunk Japan SE Workshopのご紹介〜

Splunkでは定期的に、日本のソリューションエンジニアが公開ワークショップ(オンライン)を開催しています。本記事では、どなたでも参加いただける、日本のソリューションエンジニアによるラボ演習付きワークショップをご紹介します。
SplunkとMicrosoft Azure Monitorの連携 パート2 – Azure Monitorの設定方法
Tips
6 分程度

SplunkとMicrosoft Azure Monitorの連携 パート2 – Azure Monitorの設定方法

SplunkとMicrosoft Azure Monitorの連携パート1では、Azure側の設定をご紹介しました。パート2ではSplunk側の設定をご紹介します。Azure MonitorでアクセスできるデータをSplunkに取り込み、有効活用できるように設定しましょう。
Splunkに燃料を与える:Universal Forwarderによるリアルタイムでのデータ取込方法とインストール(パート2)
Tips
5 分程度

Splunkに燃料を与える:Universal Forwarderによるリアルタイムでのデータ取込方法とインストール(パート2)

本ブログパート1では、Universal Forwarder(ユニバーサルフォワーダー)を使用したデータ取り込み方法、インストール方法をご紹介しました。本パート2では、Universal Forwarderに取り込んだ後のデータ送信の設定方法をお伝えしたいと思います。