はじめてのSplunk ― 概要から応用までを体系的に学ぶ

4-3 イベントの相関(transaction)

1. transactionとは

ログには、1つの出来事が複数のイベントにまたがって記録されることがあります。 たとえば、ユーザーがログインしてから操作を行い、ログアウトするまでの一連の流れは、 それぞれ別々のイベントとして残ります。

transactionコマンドは、こうした関連する複数のイベントを1つのまとまり(トランザクション)にグループ化するコマンドです。 共通するフィールドの値をキーにして、同じ値を持つイベントを束ねます。

SPL ― セッションIDでイベントをまとめる
index=web | transaction JSESSIONID

sessionidJSESSIONIDのように、一連の流れを通じて同じ値を持つフィールドを グループ化のキーに選ぶのが基本です。

2. 自動で付くフィールド

transactionでまとめると、各トランザクションに次のフィールドが自動的に追加されます。

フィールド 意味
duration 最初のイベントから最後のイベントまでの経過時間(秒)
eventcount そのトランザクションに含まれるイベント数

これらを使えば、「処理にどれだけ時間がかかったか」「何ステップの操作だったか」を そのまま集計に利用できます。

SPL ― セッションの所要時間を集計する
index=web | transaction JSESSIONID | stats avg(duration) max(duration)

3. 開始・終了と時間の制約

どのイベントでトランザクションが始まり、どこで終わるかを明示したいときは、 startswithendswithを使います。ログインからログアウトまでを1まとまりにする、といった指定ができます。

SPL ― ログインからログアウトまでをまとめる
index=web | transaction JSESSIONID startswith="action=login" endswith="action=logout"

さらに、時間的な区切りを与えるオプションもあります。

オプション 意味
maxspan トランザクション全体の最大の長さ(これを超えたら別のまとまりにする)
maxpause イベント間の最大の間隔(これ以上間が空いたら区切る)
SPL ― 30分を超えたら別セッション扱いにする
index=web | transaction JSESSIONID maxspan=30m maxpause=5m

4. statsとの使い分け

似た集計はstatsでもできますが、両者には役割の違いがあります。 件数や合計を求めるだけなら、軽くて高速なstatsで十分です。 transactionはイベントの順序や生イベントそのものを保持したいとき、 あるいはstartswith/endswithで始まりと終わりを条件指定したいときに使います。

transactionは多くのイベントを保持しながら処理するため、 対象が大量になると重く、メモリも消費します。 単純な集計で足りる場面ではstatsを優先し、必要なときだけtransactionを使いましょう。

5. まとめ

  • transactionは共通フィールドで関連イベントを1つのまとまりにグループ化する
  • 自動でduration(所要時間)とeventcount(件数)が付く
  • startswith/endswithで開始・終了、maxspan/maxpauseで時間の区切りを指定できる
  • 軽い集計はstats、順序や生イベントの保持が必要なときはtransaction