今回は、Fessを構築/運用するにあたり、よくご質問いただく問題について、ログの見方や解決方法をご紹介します。
Fessのログファイル
Fessのログファイルは、サーバ上のログファイルを直接確認するか、管理画面からダウンロードして確認することができます。Fessのログファイルは以下に保存されています。
◆ZIPパッケージの場合
[Fessのインストールディレクトリ]/logs
◆RPM/DEBパッケージの場合
/var/log/fess/
管理画面から確認する場合は、管理画面の左メニュー「システム情報」→「ログファイル」の画面で該当ファイルをクリックするとダウンロードできます。各ログファイルの説明は、Fessの設定ガイドに記載されているので必要に応じて確認してください。
Fessの起動ができない場合
Fessが正常に起動できない場合は、以下のログファイルを確認してください。
- server_0.log
- fess.log
ログファイルに出力されたエラーメッセージから、問題の原因を確認します。
例えば、fess.logに以下のようなエラーメッセージが表示された場合について考えてみましょう。
Caused by: org.elasticsearch.index.IndexNotFoundException: no such index [fess.YYYYMMDD]
「そのようなインデックスはない」と言われているので、Elasticsearchとの連携に失敗してインデックスが見つからないと推測されます。
Elasticsearchとの連携は、「fess.in.sh」または「fess.in.bat」で設定しているので、設定内容を再確認してください。よくあるのは、「FESS _DICTIONARY_PATH」に設定したElasticsearchのパスが正しくないケースです。Fessのインストールガイドを参考にして、設定を見直しましょう。
Fessが起動できない原因としては、ほかにもElasticsearchが正常に起動できていないケースが考えられます。curlコマンドなどを利用して、ElasticsearchのCluster APIで状態を確認します。
$ curl -X GET localhost:9200/_cluster/health?pretty
{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1,
"active_shards" : 1,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
「status」が「green」であれば、問題はありません。もしElasticsearchが正常に起動できていない場合は、Elasticsearchのログファイルを確認して問題を解決してください。
クロールができない場合
クローラーを実行後、インデックスが登録されない場合は「fess-crawler.log」を確認します。
ログファイルにエラーメッセージが出ていない場合は、クロール設定が期待する設定になっていない可能性があります。
クロール先のURLの間違い
ログファイルに出力されている「Target URL」のURLがFessのサーバからアクセスできることを確認してください。
2020-06-16 13:48:44,459 [WebFsCrawler] INFO Target URL: https://fess.codelibs.org/jp/
正規表現の間違い
ログファイルに出力されている「Included URL」または「Excluded URL」を確認してください。対象とするURLにマッチする正規表現になっているか、除外するURLにマッチしてクロール対象から除外されていないか、などを確認してください。
2020-06-16 13:48:44,462 [WebFsCrawler] INFO Included URL: https://fess.codelibs.org/ja/.*
2020-06-16 14:06:58,629 [WebFsCrawler] INFO Excluded URL: (?i).*(css|js|jpeg|jpg|gif|png|bmp|wmv|xml|ico)
クロール先にアクセスできない
以下のように、「Could not access smb://xxx/xxx/xxx」のような出力があった場合は、「Fessサーバからクロール先のサーバにアクセスできるか」「クロール先のパスが正しいか」「認証設定が不足していないか」などを確認してください。
2020-06-16 15:40:42,610 [Crawler-20200616154035-1-5] INFO Could not access smb://file-server/share/fess-testdata-master/
原因不明の場合 - デバッグログの出力
エラーメッセージが出ていない場合、原因がわからない場合はデバッグログを出力して確認することも可能です。デバッグログの出力設定はクローラージョブで設定します。
それにはまず、管理画面の左メニュー「システム」→「スケジューラ」→「Default Crawler」を選択し、「編集」ボタンをクリックします。スクリプト欄のlogLevelを「info」から「debug」に変更して「更新」ボタンをクリックします。
その後、クロールを実行すると「fess-crawler.log」に詳細なログが出力されます。
サムネイルが表示されない
検索時にサムネイルが表示されない場合は、「fess-thumbnail.log」を確認してください。
サムネイルはThumbnail Generatorジョブで生成されます。このジョブのログがfess-thumbnail.logに出力されるので、ジョブが起動したか、エラーが出ていないかなどを確認してください。
また、Default Crawlerのジョブと同様、ログレベルをデバッグに変更することもできます。必要であれば、Thumbnail Generatorジョブのスクリプト欄に「.logLevel(“debug”)」を追加して原因を確認してください。
サジェストが表示されない
検索時にサジェストが表示されない場合は、「fess-suggest.log」を確認します。
サジェストはSuggest Indexerジョブで生成されます。このジョブのログがfess-suggest.logに出力されるので、ジョブが起動したか、エラーが出ていないかなどを確認してください。
Suggest Indexerジョブも、Default Crawlerジョブと同様、ログレベルをデバッグに変更することができます。
Active Directory連携ができない
Active Directory連携しても検索結果の出し分けができないケースがあります。 このような場合は、検索時のログとユーザーがログインした際のログとして以下のログファイルを確認します。
- fess.log
- audit.log
fess.logに関してはデバッグログにしないと詳細を確認できないので、「全般」の設定でログレベルを変更します。管理画面の左メニューから「システム」→「全般」のログレベルを「DEBUG」を指定して、「更新」ボタンをクリックしてください。
続いて、問題を調査するために以下の操作をします。
- Fessのログイン画面からActive Directoryのドメインユーザーでログインする
- 検索画面で検索する
出力されたログから、ユーザーの権限と検索対象のドキュメントの権限が一致するかを確認します。
まずは、ユーザーの権限を確認します。
audtit.logで「permissions」の値を確認します。ネストされているグループの場合は遅延して取得しているので、「UPDATE_PERMISSION」を確認します。
action:LOGIN user:userAA permissions:1userAA|2groupAA|1userAA ip:- time:2020-05-28T07:00:42.069559Z
action:UPDATE_PERMISSION user:userAA permissions:1userAA|2groupAA ip:- time:2020-05-28T07:00:42.222931Z
次に、検索対象のドキュメントの権限を確認します。
adminで管理画面にログインし、左上部の検索窓で検索対象のドキュメントをヒットさせるキーワードを入れて検索します。検索結果が表示されたら、右にある「更新」ボタンをクリックしてください。
「role」欄の権限を確認し、登録されていない場合は、ファイルシステム認証の設定を再確認してください。
検索時に正しい権限で検索できているかどうかなどは、fess.logで確認することができます。
* * *
今回は、Fessの環境を構築していく上で、問題があった場合の確認方法を説明しました。環境や設定、状態によって原因はさまざまですが、ログファイルから得られる情報を活用してみてください。
著者紹介
菅谷 信介 (Shinsuke Sugaya)
Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。