表の行と列を入れ替える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コマンドを使用して、行と列を入れ替える
大まかな流れは次のとおりです。
- “time”の行をフィールド名として認識させTable化 (multikvコマンド)
- 行と列を入れ替える (transposeコマンド)
手順は次のとおりです。
- multikvコマンドを用いて、_rawフィールドをテーブルに展開します
multikvコマンドについては公式docをご確認ください。
“forceheader=”で何行目をフィールド名として認識させるか指定できます。
- fieldsコマンドを用い、不要なフィールドを省きます。transposeコマンドを用い、行と列を反転します
transposeコマンドについては公式docをご確認ください。
- renameコマンドを用いて、列の名称を変更します
ii) rexコマンドを使用してフィールドを抽出し、各イベントごとに整形する
手順は次のとおりです。ポイントはmvexpandをするタイミングです。
- rexコマンドを用いて、各フィールドを抽出します
- fieldsコマンドを用いて、不要なフィールドを省きます
- splitコマンドを用いて、シングルバリューをマルチバリューにします
splitコマンドについては公式docをご確認ください。
- mvzipコマンドを用いて、各フィールドを結合したtemporaryフィールドを作成します
mvzipコマンドについては公式docをご確認ください。
- Temporaryフィールド以外を省き、mvexpandコマンドを用いて、各行に展開します
mvexpandコマンドについては公式docをご確認ください。
- rexコマンドを用いて、各フィールドを抽出します
fieldsコマンドを用いて列を並び替えます
終わりに
ii)のやり方は少し手間に思えますが、ログの形式によっては柔軟に活用できる方法ですので、このやり方もぜひ覚えてみてください。
Title
関連記事
Filter
Category
Blog Limit
3
Category
Tips & Tricks
Sort Category Shuffle Order
true
関連記事

Splunk社員による公開研修!〜Splunk Japan SE Workshopのご紹介〜
Splunkでは定期的に、日本のソリューションエンジニアが公開ワークショップ(オンライン)を開催しています。本記事では、どなたでも参加いただける、日本のソリューションエンジニアによるラボ演習付きワークショップをご紹介します。

SplunkとMicrosoft Azure Monitorの連携 パート2 – Azure Monitorの設定方法
SplunkとMicrosoft Azure Monitorの連携パート1では、Azure側の設定をご紹介しました。パート2ではSplunk側の設定をご紹介します。Azure MonitorでアクセスできるデータをSplunkに取り込み、有効活用できるように設定しましょう。

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