マクロでサーチを効率化するゾイ【Splunk】

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

マクロ (Macro) とは

マクロとは「よく使う検索条件を関数化した機能」のことです。

例えば、アメリカ本部の売上($)を「日本円(¥) – 税込表記に変換する」というマクロを「sales_jpy_taxincluded(2)」という名前で登録した場合、以下のように利用することができます。

作成方法

マクロの作成方法:[Settings] > [Advanced search] > [Search macros] (+ Add new)

次に、対象アプリ/関数名/関数の定義/引数などを設定します。下の2つは「サーチを行う方が適切に引数を入力しているか」「誤って入力している場合どのようなエラー文を表示させるか」を指定する項目です。

画像からわかる通り、マクロを作成する際には「マクロ名の末尾に引数の数を指定する」「引数を$$で囲む」というルールがあります。これらを忘れてしまうとSplunkがマクロを認識してくれないので注意が必要です。
※引数を設定せずに利用することもできます。

# 今回定義したマクロ
stats sum(Price) as price by ProductName
| eval “¥売上(税込) - $country$” = price*$rate$*1.1

使い方

マクロをサーチ文で利用する際には「マクロを“で囲む」「引数の順番に気を付ける」というルールがあります。引数の順番は意外と忘れがちなので、マクロ名を工夫したり、引数の数を減らしたり、引数の順番を組織で統一するといった工夫が必要です。
マクロをバックテック(`)ではなくシングルクォーテーション(‘)にすると利用できませんので注意してください。バックティック(`)は「Shift + @」で入力できます。

# sales_jpy_taxincluded(2)の場合
source="tutorialdata.zip:*" action="purchase"
| `sales_jpy_taxincluded(USA, 120)`

transaction と組み合わせて使う

冗長的になりがちな transaction もマクロを使うとスッキリさせることができます。

例えば、ログ内のイベントでトランザクションセッションを定義する『makesession』というマクロを以下の式で定義したとします。

# 共通のclientipを持つイベント(最大30分)を同一トランザクションとして定義
transaction clientip maxspan=30m

Webのトラフィックに対して先ほど作成したマクロを用いると、

sourcetype=access_* 
| `makesession`

となり、このマクロを用いて「1日毎のセッションあたりPV数」をレポート化する場合を考えると以下のようになります。

sourcetype=access_* 
| `makesession`
| timechart span=1d sum(req_time) as pageviews count as sessions

しかし1日単位だけでなく、1時間単位、30分単位でみたいというニーズもあるかと思います。そこで初めに作成した『makesession』に被せる形で『pageviews_per_session(1)』という新しいマクロを以下の式で定義します。

sourcetype=access_* 
| `makesession`
| timechart $span$ sum(req_time) as pageviews count as sessions

これでspanを自由に変更できるマクロができたので、試しに「span=1h」という条件でサーチをかけてみます。

成功です。今回のマクロを用いることにより、任意のspanでイベントからセッションあたりPV数を簡単に集計することができました。

削除/無効化/権限設定

マクロは [Settings] > [Advanced search] > [Search macros] から削除/無効化/権限設定を行うことができます。

References

Use Search macros in searches – Splunk Serch Reference

Define search macros in Settings – Splunk Knowledge Manager Manual

Search macros examples – Splunk Knowledge Manager Manual