ログ分析ツールの検索文の書き方
自分でも忘れるのでログ分析ツールのヘルプで表示するための記事です。入力する検索文の横のヘルプボタンから、この記事を表示できるようにします。 2023/1/14に検索文のモードを追加したので追記します。
ログ保存先(ストレージエンジン)による検索機能の違い
TWLogAIAN v2.1.0 では、ログの保存先(ストレージエンジン)として Bluge(従来のインデックスエンジン)に加えて、Parquet、Badger、Bbolt を選択できるようになりました。 選択したストレージエンジンによって、検索機能の挙動が以下のように異なります。
| ストレージエンジン | 全文検索モード | 正規表現(Regexp)の動作 | 特徴・推奨用途 |
|---|---|---|---|
| Bluge(デフォルト) | 利用可能 | △ 制限あり(トークン単位) | 全文検索インデックスを用いた高速な単語検索・フィールド検索・範囲検索に適しています。ただし、正規表現はインデックス化された単語単位で評価されるため、ログ全文を対象とした一般的な正規表現としては意図通りにヒットしない場合があります。 |
| Bluge以外 (Parquet / Badger / Bbolt) |
利用不可 (非表示) |
◎ 完全・正確に動作 | 全文検索インデックスを作成しないため、全文検索モードは利用できません。 一方で、ログの生テキスト(Raw string)に対して標準的な正規表現エンジンで直接マッチングを行うため、正規表現が正しく・意図通りに動作します。 任意のメタ文字や複雑な正規表現パターンによる高精度な絞り込みに適しています。 |
※ ストレージエンジンが Bluge 以外の場合、検索設定の検索文モードから「全文検索」が自動的に除外されます。
検索文のモード切り替え
検索の詳細設定を開くと検索文モードの切り替えメニューがあります。ここで切り替えます。
- シンプル(Simple): キーワードのAND/NOT/前方一致による直感的な絞り込み
- 正規表現(Regexp): 正規表現パターンによる検索(Bluge以外で高精度に動作)
- AI正規表現(AI): 探したいログの条件を自然言語で指定し、LLMが最適な正規表現を考案して検索
- 全文検索(Full Text): Bluge 専用のクエリ構文による高度な検索(Bluge利用時のみ)
シンプルモード
シンプルモードは、すべてのストレージエンジンで利用できます。以下のルールに従います。
- キーワードをスペースで区切るとAND条件
- キーワードの最初に
!を付けるとNOT条件 - キーワードの最後に
*を付けるとプリフィックス(ワイルドカード)
例えば、
test !mode sta*
とすると、
testを含み、modeを含まない、staで始まる単語を含む
という条件になります。
※ Bluge使用時は単語区切りの関係で_や:が入る単語はワイルドカードでヒットしにくい場合があります。
正規表現モード
検索文に入力した内容を正規表現として検索します。
[!NOTE] ストレージエンジンによる違い:
- Parquet / Badger / Bbolt(Bluge以外)を使用している場合: Go言語の標準正規表現エンジン(RE2互換)を用いてログ全文に対して直接マッチングを行うため、正規表現が非常に正確に動作します。 例:
^.*ERROR.*\[code=\d+\].*$や(Failed|Invalid) password for (invalid user )?\w+- Blugeを使用している場合: 全文検索インデックス内のトークンに対して正規表現が適用されるため、ログ全体の行構造を前提とした正規表現などは期待通りに動作しない制限があります。
AI正規表現モード(v2.1.0追加)
設定画面でLLM(ローカルLLM tensai、またはOllama / Gemini / OpenAI / Anthropic)が有効になっている場合に利用できるモードです。
検索文に「探したいログの内容を日本語または英語の自然言語」で入力して検索を実行すると、AIが最適な正規表現パターンを自動生成し、その正規表現を用いてログを即座に検索します。 複雑な正規表現の構文を覚えていなくても、例えば以下のように入力するだけで検索可能です。
認証に失敗したログIPアドレスが 192.168. で始まるアクセスステータスコードが 500 番台のエラータイムアウトまたは接続切断
考案された正規表現は検索欄に反映され、検索詳細設定からも確認・微調整できます。
全文検索モード(Bluge専用)
ログ保存先が Bluge の場合のみ利用可能なモードです。Bluge(Bleve互換)の強力な検索文構文が使えます。以下のような仕様です。
単語(Term)
他の構文がない単語は単純に検索対象の単語です。一致する単語を含むドキュメント(ログ)を検索します。 例えば、
water
は、単語waterを含むドキュメントを検索します。
検索の範囲は、ドキュメントの全体の_allです。
フレーズ
ダブルクオートで括った単語の列はフレーズとして検索します。 例えば、
"light beer"
はフレーズとして検索します。
フィールド指定
フィールド名と検索条件をコロンで区切って指定することで検索する範囲を限定できます。 例えば、
description:water
と指定するとdescriptionというフィールドがwaterのドキュメント(ログ)を検索できます。
ワイルドカード
単語の一部に一致するような検索に使います。
mart*
のようにするとmartから始まる単語に一致するドキュメント(ログ)を検索できます。これは、フィールド指定でも使えます。
正規表現
検索文に正規表現を使うことができます。
正規表現のパターンを/で括ればよいです。
例えば、
/light (beer|wine)/
のように指定します。 フィールドを指定する場合は、
description:/wat.*/
必須、オプション、含まない
検索文の先頭に何もつけない状態だとオプション条件になります。
+を先頭につけると必須条件になります。-をつけると含まないことが検索条件になります。
例えば、
+description:water -light beer
は、descriptionフィールドにwaterが必須で、全体にlightを含まない、beerは含んでもよいという検索文になります。
優先順位指定
検索条件の優先順位をつけることができます。
検索条件の最後に^と数値を指定します。
例えば、
description:water name:water^5
のようにするとnameフィールドにwaterが含まれているほうのスコアが高くなります。
あいまい度の指定
検索のあいまい度を指定できます。現時点で使い方はわかりません。
watex~2
のように~と数値で指定します。
数値範囲
>、>=、<、<=の記号でフィールドの数値範囲を指定して検索できます。
例えば、
abv:>10
のように指定すれば、abv(アルコール度数)が10より大きいという条件になります。
日時範囲
>、>=、<、<=の記号でフィールドの日時範囲を指定して検索できます。
例えば、
created:>"2016-09-21"
のように指定すれば、createdのフィールドが2016年9月21日より大きいという条件になります。
エスケープ文字列
以下の文字を検索する場合はエスケープが必要です。
"+-=&|><!(){}[]^\"~*?:\\/ "
例えば、
my\ name
や
"contains a\" character"
です。スペースや"を検索文字に含めることができます。
元の情報
時間範囲の指定
検索文とは別に、GUIで指定します。
範囲
開始と終了の日時を分単位で指定できます。
ターゲット
指定の日時から指定の秒数範囲内にあるログを検索します。