1. transactionとは
ログには、1つの出来事が複数のイベントにまたがって記録されることがあります。 たとえば、ユーザーがログインしてから操作を行い、ログアウトするまでの一連の流れは、 それぞれ別々のイベントとして残ります。
transactionコマンドは、こうした関連する複数のイベントを1つのまとまり(トランザクション)にグループ化するコマンドです。
共通するフィールドの値をキーにして、同じ値を持つイベントを束ねます。
index=web | transaction JSESSIONID
sessionidやJSESSIONIDのように、一連の流れを通じて同じ値を持つフィールドを
グループ化のキーに選ぶのが基本です。
2. 自動で付くフィールド
transactionでまとめると、各トランザクションに次のフィールドが自動的に追加されます。
| フィールド | 意味 |
|---|---|
duration |
最初のイベントから最後のイベントまでの経過時間(秒) |
eventcount |
そのトランザクションに含まれるイベント数 |
これらを使えば、「処理にどれだけ時間がかかったか」「何ステップの操作だったか」を そのまま集計に利用できます。
index=web | transaction JSESSIONID | stats avg(duration) max(duration)
3. 開始・終了と時間の制約
どのイベントでトランザクションが始まり、どこで終わるかを明示したいときは、
startswithとendswithを使います。ログインからログアウトまでを1まとまりにする、といった指定ができます。
index=web | transaction JSESSIONID startswith="action=login" endswith="action=logout"
さらに、時間的な区切りを与えるオプションもあります。
| オプション | 意味 |
|---|---|
maxspan |
トランザクション全体の最大の長さ(これを超えたら別のまとまりにする) |
maxpause |
イベント間の最大の間隔(これ以上間が空いたら区切る) |
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