表の行と列を入れ替える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)のやり方は少し手間に思えますが、ログの形式によっては柔軟に活用できる方法ですので、このやり方もぜひ覚えてみてください。

関連記事

サーチのスキップを回避するためのヒント
Tips
7 分程度

サーチのスキップを回避するためのヒント

サーチのスキップは多くのSplunk管理者にとって悩みの種です。このブログでは、Splunkサーチの同時実行モデルについておさらいしてから、サーチがスキップされるさまざまな原因を特定するための体系的な方法とスキップの回避策をご紹介します。
1つのレポートで2つの時間範囲を比較する
Tips
6 分程度

1つのレポートで2つの時間範囲を比較する

2つの時間範囲でデータの関係を調べる方法をご紹介します。
Splunkサーチコマンド > stats、eventstats、streamstats
Tips
6 分程度

Splunkサーチコマンド > stats、eventstats、streamstats

Splunk初心者に向けて、Splunkサーチコマンド(stats, eventstats, streamstats)の使い方について説明します。Webログの5つのイベントを例に使って、stats、eventstats、streamstatsコマンドの機能と違いについてご説明します。利用できる統計関数は、count、sumなど、数多くあります。これを機にSplunkサーチコマンドをマスターしましょう。