Fessでは、どのような検索がされているかを確認するため、検索ログを標準で保存しています。検索ログを利用することで、利用者がどのような情報を求めているかなどを把握することができます。

標準構成でもFessの管理画面から検索ログ画面を表示して、検索ログや集計情報を確認できますが、今回はオープンソースのデータ視覚化ダッシュボード「Kibana」を利用した可視化方法を紹介します。

Kibanaの準備

今回は、Fess 13.4.3を利用します。Fessで検索した履歴をKibanaで参照するので、Fessをインストール/起動した後、クロールと検索をしておきます。クロール方法などについては、本連載の過去記事を参照してください。

次に、公式サイトからKibanaを入手し、インストールします。利用するKibanaのバージョンは、Fessが検索エンジンとして使用している「Elasticsearch」のバージョンと一致させてください。今回は、7.4.2を利用します。

Kibanaのインストール後、「./config/kibana.yml」で設定を記述します。デフォルト値はコメントアウトされているので、設定する必要がある値はコメントアウトを外します。具体的には、以下のように「elasticsearch.hosts」で接続先のElasticserchのURLを指定し、先頭の「#」を削除します。

# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: "http://localhost:9200"

なお、今回はElasticsearchは9200ポートで起動しているものとします。その他の項目に関しても必要に応じて編集してください。

設定の保存後、Kibanaを起動します。zip版であれば、「./bin/kibana」で起動できます。

起動したら、ブラウザで「http://localhost:5601」にアクセスしてください。インストール直後は参照するデータがないため、以下の画面が表示されます。

Kibana初期画面

今回はFessの検索ログを可視化するので「Explore on my own」をクリックして、次の画面に進みます。

Kibanaトップ画面

データの設定

ここからは、Kibanaで検索ログを可視化する手順について説明します。

まず、集計するインデックスを設定します。左メニューで「management」を選択し、「index Patterns」→「Create index pattern」をクリックします。「index pattern」のテキストボックスに「fess_log*」を入力して、「Next Step」をクリックします。

インデックスパターンの指定

「Time Filter field name」で「requestedAt」を選択します。「show advanced options」をクリックして「Custom index pattern ID」テキストボックスに「fess_log」を入力後、「Create index pattern」をクリックします。

インデックスパターンの作成

次に、ダッシュボードの項目を追加します。追加する項目は、Fessで提供している設定ファイルを利用してインポートしてください。

左メニューで「management」を選択し、「Saved Objects」で「import」をクリックします。インポート画面で「$FESS _HOME/extension/kibana/fess_log.ndjson」を指定して、「Import」ボタンをクリックします。最後に「Done」をクリックしてインポートは終了です。

検索ログの詳細

検索ログを可視化する設定ができたので、まずは検索ログがどのようなデータを保持しているかを説明します。

データの詳細は「Discover」で確認できます。左メニューの「Discover」をクリックしてください。デフォルトの表示期間が「last 15 minutes」のため、「No results match your search criteria」と表示されることがありますが、その場合は表示期間の設定を変えてください。表示期間は、画面右上で指定できます。

Discover画面

ここでは以下の項目を参照することができます。

項目 説明
searchWord 検索語
queryPageSize 検索結果の1ページあたりのドキュメント件数
queryOffset 検索結果の表示位置
hitCount 検索ヒット数
queryTime 検索にかかった時間
responseTime 検索結果の応答時間
requestedAt リクエストされた日時
userAgent ブラウザのユーザーエージェント
clientIp 検索したユーザーのIP
accessType アクセス種別(WebかAPI)
referer 参照元
languages 検索言語
user 検索したユーザー名

デフォルトでは全ての項目が表示されていますが、必要な項目を選んで表示させることも可能です。インデックス「fess_log*」下に表示されている項目名にマウスポインタを移動させると、「add」ボタンが表示されるのでクリックします。

Discoverで項目を選択する

複数項目表示させたい場合は同じ操作を繰り返して追加することで、項目を指定して表示することができます。例えば「検索語」「検索ヒット数」「検索結果の応答時間」を選択すると、以下のように表示されます。

「検索語」と「検索ヒット数」と「レスポンスにかかった時間」を表示

ダッシュボードの表示

Discoverでは検索ログをそのまま確認していましたが、Dashboardでは集計してグラフ化したものを見ることができます。左メニューから「Dashboard」を選択し、「fess_log」をクリックすると以下のように表示されます。

Dashboard画面

対象となる検索ログの表示期間の調整は画面右上で指定できます。

また、ダッシュボードでは以下を確認することができます。

項目 説明
search-query-counts-per-sec 秒あたりの検索回数
average-response-time 検索結果表示にかかる平均の時間
search-term-rank 検索語のランキング
search-term-rank-of-no-results 検索結果が0件の検索語ランキング
hit-counts 検索結果の合計数
rank-of-UserAgent ユーザーエージェントのランキング

上記以外の集計結果が必要な場合は、左メニューの「Visualize」で新たなグラフを作成して、ダッシュボードに表示することが可能です。

* * *

以上、今回はFessで取得した検索ログをKibanaで可視化する方法について説明しました。Kibanaを利用することで、容易に利用者の動向を確認できるようになります。ぜひ一度、お手元で試してみてください。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。