3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Splunk Advent Calendar 2023Advent Calendar 2023

Day 6

TERM使ったらいつものIPアドレス検索が早くなった

Last updated at Posted at 2023-12-05

はじめに

  • 不審なIPアドレスを調査する際に、サーチ時間がかかることが少し悩ましい。少しの工夫で早く出来ないものか
  • データモデルアクセラレーションとか使う以前にキーワード検索の延長で早くする方法がないか探していた
  • そこでTERM()に出会って検証してみました。TERMは、ざっくりいうと、余計なデータまで無駄に検索せずピンポイントで指定した値を検索する方法の1つです

TERMとは

  • TERMコマンドは以下のように検索することでindex=activedirectoryを対象に、172.20.220.12に一致する値のみを高速に結果を返してくれます
index="activedirectory" TERM(172.20.220.12) 
  • 一致する値のみというところがポイントなのですが、以下の例のようにsrc="172.20.220.12"と検索していても、実はSplunkは「.(ドット)」をMinor breakers(マイナーブレーカー)という区切り文字として認識し分割してindexingしています。

参考:TSTATS and PREFIX
スクリーンショット 2023-11-22 19.17.52.png

  • 例えば、IPアドレスで127.0.0.1の場合、.のマイナーブレーカーで区切られるためindexされるとこんな形でTSIDXファイルに書き込まれます。赤枠の「127」と「0」と「1」と青枠の「127.0.0.1」でそれぞれindexingされることになります。

参考:Fields, Indexed Tokens,And You
スクリーンショット 2023-11-22 19.35.40.png

  • Index時だけでなく、またサーチをする際にもマイナーブレーカーごとに分割してデータを探しにいってしまうため余計なデータを探索しにいくことになります。つまり127.0.0.1のIPを検索すると[ AND 0 1 127]という形で分解してデータをサーチしにいきます。

参考:Fields, Indexed Tokens,And You
スクリーンショット 2023-11-22 19.27.32.png

  • これの何が問題かというと、ずばりIPアドレスそのもの(127.0.0.1)を探したいのに、127と0と1のデータを探しにいく形をとってしまうことで無駄なサーチコストが発生します。

  • 無駄とは、一致したデータ数(eventCount) / スキャン対象データ数(scanCount)のLispy効率*が悪いことをいいます。空振りサーチが多いことになります。


Lispyとは
Splunkの"Lispy"は、Splunkの検索クエリ言語であるSplunk Processing Language(SPL)の一部です。Lispyは、SPLのクエリ記述スタイルの1つであり、SPLをより簡潔かつ効率的に記述するための手法です。サーチバーに入力したSPLを内部でlipy形式に置き換えて、TSIDXにクエリをかける際に使われています

参考:Fields, Indexed Tokens,And You
スクリーンショット 2023-11-22 21.38.12.png

  • なお、以下のように""(ダブルクオーテーション)で囲って検索すれば、さも完全一致のIPアドレスだけ探してくれるのでは?と思いますが、実は.ドットのマイナーブレーカーに引っ張られて分割して検索しています。
index="activedirectory" src="172.20.220.12"
  • そこでTERMの出番です。TERM(127.0.0.1)と明示して検索すると、ずばり127.0.0.1を探してきてくれます。127や0や1を探しに行かないため空振りサーチを抑えることが出来ます。

スクリーンショット 2023-11-22 21.07.45.png

検証した事

  • 以下2つのサーチを実行した際の検索スピードを比較してみました
①TERMなし
index="activedirectory" src="172.20.220.12"

VS

②TERMあり*
index="activedirectory" TERM(172.20.220.12) src="172.20.220.12"

※TERM(172.20.220.12)で検索しただけだとdestなどの他のフィールドにも合致してしまうため最後にsrc=で明示的に指定
  • 結果、TERMなしが134秒近くかかった検索が、TERMありだと13秒で終わる結果となりました。

  • TERMなし
    スクリーンショット 2023-11-22 21.26.24.png

  • TERMあり
    スクリーンショット 2023-11-22 21.26.18.png

  • ここでLispy効率に注目してみると、 TERMありのほうが無駄がないことがわかります。

TERMなし TERMあり
eventCount 38,094 38,094
scanCount 774,915 38,094
Lispy効率 約0.05 1
seconds 144,492 sec 13.034 sec

結論

IPアドレスのようにマイナーブレーカーが含まれるデータを検索する際には、Lispy効率の高いTERM()を使うべし

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?