Apache LuceneとSolr検索エンジンライブラリを活用している企業のLucid Imaginationが新しいLucidGazeというモニタリング製品を発表しています。その製品は完全に開発者用としてLucene対応版を備えている。 パフォーマンスデータはログ出力、ラウンドロビンのデータベースへの保存も可能で、Java API経由で操作できる。ラウンドロビンのデータベース方式を利用する場合には、そのデータベースの読み込み、操作が行えるRRD4jライブラリというスタンドアロンなSwingアプリケーションを用意している。
インストールは単純である。ソフトウェアは.jarファイルで提供され Lucene .jarファイルの置換を行う。インストールにあたって、開発者は単純にアプリケーションのクラスパス上にあるlucene-core.2.4.1.jarをlucene-core-gaze.2.4.1.jarに置き換える。開発者は自分達のアプリケーションのソースを変更する必要は一切ない、そして、そのアプリケーションでのモニタリングが必要ない場合にもそのまま利用する、ということも可能である。
LucidGazeはどれくらいドキュメント取得操作を行っているか、どれくらいインデックスによってユーザ入力が分析、分解され、どのようにテキストが処理されインデックスされるのか、といったさまざまな分析手段を開発者に提供する。 そのツールは統計をとるために以下の5つの異なるモニタを利用する。
- AnalysisStats: Analyzer、TokenFilter、TokenStream、Tokenizerと、どのAnalyzerが特定のフィールドのためのTokenStreamの生成に利用されたのかといった確認
- DocumentStats: ドキュメントのインデックス数とインデックスにあるフィールド数
- IndexStats: Activities and behaviour of IndexReaderとIndexWriterのアクティビティと振る舞い、例えば、各インスタンスの可視化、関連する各メソッド呼び出し、バッファ、メモリ使用、平均追加、コミット回数のトラッキング
- SearchStats: クエリー操作、検索パフォーマンスとパース時間、メソッド呼び出し統計とよく実行されるクエリー
- StoreStats: Luceneストレージディレクトリインスタンス
すべてをモニタリングするオーバーヘッドは考慮する必要がある。Lucid ImaginationのテクニカルチームのメンバーであるGrant Ingersoll氏との会話では10-15%ぐらいの数字を薦めている。しかし、どの統計情報を集めてどこに永続化するか設定することによってオーバーヘッドを短縮させることは可能である。
InfoQはIngersoll氏にLucidGazeを利用したアプリケーションの基本的なところについても話した。彼が強調したひとつは、Luceneを利用する時によくあるIndexReaderのcloseの失敗が導くメモリリークという開発者のエラーである。 LucidGazeは現在開いているIndexReadersの数、IndexReaderを新しくインスタンス化するIndexReader#reopen()の呼び出し数の合計、あわせて利用中の全IndexReaderで消費しているJVMの想定RAM容量も集計している。これら統計情報はIndexReaderのclose失敗によるメモリリーク分析を行う際にとても有益で、 基本的なところでは、2つのIndexReaderを使うことを想定していているところに10個メモリにある場合、どこかでリークしていることになる。 2つ目の利用例はボリュームのあるサイトにおける大量データテストでの再インデックス戦略 (例 たくさんのドキュメント生成、削除)。 Luceneのインデックスデータベースはいくつかの個々のファイルとして格納される個別の"セグメント"で構成している。ドキュメントをインデックスに追加した時に、新しいセグメントが生成されることがある。データベースをコンパクトにしセグメントの数を少なくすることによってクエリー時間を短縮することができるが、そのようにして最も良い戦略を考え出すのは多くの試行錯誤にかかわる傾向があり、オーバーヘッドも生じることとなる。LucidGazeは新しく作成されたインデックスセグメントの数や、マージしているセグメントの数、それにかかった平均時間といった開発者の実装を手助けする統計情報も提供する。ツールは大量データテストでの特定の問題を確認するという利用もでき、不定なリソース共有を消費する長時間実行クエリーの分離や、ボトルネックのもとになっている特定フィールド、ドキュメントのピンポイントの確認が可能である。
この製品はフリーですが、クローズドソースでLucid Imaginationのwebサイトからダウンロードできる。現在、 Lucene 2.4.1バージョンのみサポートしているが、Lucid Imaginationは他バージョンでのサポートの要望が十分あれば検討するとしている。