ロギングの設定

Solrのログは、システムで何が起こっているかを知るための重要な手段です。デフォルトのロギング設定を調整するには、いくつかの方法があります。

一時的なロギング設定

必要に応じてログレベルを一時的に変更するには、いくつかの方法があります。

ロギング画面

管理UIを使用して、Solrによるログ出力量を一時的に変更できます。左側のメニューにある**[ロギング]**リンクを選択します。

ログレベルは、Solrの次回の再起動時にリセットされることに注意してください。

Logging Screen
図1. ロギング画面

管理Webインターフェースのこの部分では、さまざまなログカテゴリのログレベルを設定できます。幸いなことに、**設定されていない**カテゴリは、その親のログレベルになります。これにより、親のログレベルを調整することで、多くのカテゴリを一度に変更できます。

メニュー:ロギング[レベル]を選択すると、次のメニューが表示されます

image
図2. ログレベルメニュー

Solrクラスは、左側の列にクラスパスを表すディレクトリツリー構造で表示されます。現在のレベルは右側の列に表示されます。

ディレクトリは、現在のログレベルとともに表示されます。黄色で強調表示されている行は、現在クラスでロギングが有効になっていることを示します。ログレベルメニューはこれらの上にフロート表示されます。特定のディレクトリのログレベルを設定するには、右側の列の現在のレベルをクリックすると、ログレベルメニューが表示されます。目的のログレベルの横にあるボタンを選択します。

ログレベルの変更は、クラスタ内のすべてのノードに配布されます。

可能なログレベルは次のとおりです

レベル 結果

ALL

すべてを報告します。

TRACE

最も重要度の低いメッセージを除くすべてを報告します。

DEBUG

設定エラーを報告します。

INFO

通常のステータスを除くすべてを報告します。

WARN

すべての警告を報告します。

ERROR

最も重大な警告のみを報告します。

致命的

致命的イベントのみを報告します。

オフ

ロギングをオフにします。

未設定

以前のログ設定を削除します。

一度に複数の設定が可能です。

ログレベルAPI

また、RESTコマンドを`admin/info/logging`エンドポイントに送信して同じ操作を行う方法もあります。

V1 API

curl -X GET "https://127.0.0.1:8983/solr/admin/info/logging?set=root:WARN"

V2 API

curl -X PUT https://127.0.0.1:8983/api/node/logging/levels -H 'Content-Type: application/json' -d '
  [
    {"logger": "root", "level": "WARN"}
  ]
'

起動時のログレベルの選択

Solrの起動時に一時的に異なるログレベルを選択できます。2つの方法があります。

1つ目の方法は、Solrを起動する前に`SOLR_LOG_LEVEL`環境変数を設定するか、同じ変数を`bin/solr.in.sh`または`bin/solr.in.cmd`に配置することです。変数には、サポートされているログレベル(上記参照)の大文字の文字列を含める必要があります。

2つ目の方法は、-vまたは-qオプションを指定してSolrを起動することです。詳細は、Solr制御スクリプトのリファレンスを参照してください。例

# Start with verbose (DEBUG) looging
bin/solr start -f -v
# Start with quiet (WARN) logging
bin/solr start -f -q

永続的なログ設定

SolrはロギングにLog4Jバージョン2.21.0を使用しており、これは`server/resources/log4j2.xml`を使用して設定されます。 `log4j2.xml`ファイルの内容を調べて、その構造を理解しておいてください。

デフォルトでは、Solrのログメッセージは`SOLR_LOGS_DIR/solr.log`に書き込まれます。ログメッセージの形式は、`<PatternLayout/>`で使用されているパターンを変更するか、レイアウトの実装を変更することで変更できます。たとえば、`<JsonTemplateLayout/>`を使用して、JSON形式のログファイルを設定できます。

Solrを実稼働環境にデプロイする準備ができたら、変数`SOLR_LOGS_DIR`をSolrがログファイルを書き込む場所(`/var/solr/logs`など)に設定します。また、`log4j2.xml`を調整することもできます。Solrを実稼働環境に移行するで提供されている手順を使用してSolrをサービスとしてインストールした場合は、デフォルトの`server/resources`バージョンではなく、`/var/solr/log4j2.xml`を参照してください。

Solrをフォアグラウンド(`-f`オプション)で起動すると、すべてのログは`solr.log`に加えてコンソールに送信されます。Solrをバックグラウンドで起動すると、すべての`stdout`および`stderr`出力が`solr-<port>-console.log`のログファイルに書き込まれ、`log4j2.xml`で設定されているCONSOLEロガーが自動的に無効になります。これは、CONSOLEアペンダーを手動でrootLoggerから削除した場合と同じ効果があります。

また、`log4j2.xml`で、デフォルトのログローテーションサイズしきい値である32MBが実稼働サーバーにとって小さすぎる場合は、より大きな値(100MB以上など)に増やす必要があります。

<SizeBasedTriggeringPolicy size="100 MB"/>

Javaガベージコレクションログは、サイズが20Mに達するとJVMによってローテーションされ、最大9世代まで保持されます。

Solrの起動または再起動ごとに、log4j2はログローテーションを実行します。

低速クエリのロギング

大量の検索アプリケーションの場合、すべてのクエリをログに記録すると、大量のログが生成され、量によってはパフォーマンスに影響を与える可能性があります。アプリケーションに関する追加の洞察を得るためにこれらのログをマイニングする場合、すべてのクエリ要求をログに記録すると便利です。

一方、リクエストに関連する警告メッセージとエラーメッセージのみが関係する場合は、ログの詳細度をWARNに設定できます。ただし、低速クエリは引き続きINFOレベルでログに記録されるため、クエリが低速かどうかがわからなくなるという潜在的な問題があります。

Solrは、ログの詳細度のしきい値をWARNに設定し、リクエストが「低速」と見なされる待機時間のしきい値を設定し、そのリクエストをWARNレベルでログに記録して、アプリケーションの低速クエリを特定できるようにする方法を提供します。この動作を有効にするには、`solrconfig.xml`の**query**セクションで`<slowQueryThresholdMillis>`要素を設定します。

<slowQueryThresholdMillis>1000</slowQueryThresholdMillis>

指定されたしきい値よりも長くかかるクエリは、WARNレベルで「低速」クエリとしてログに記録されます。これらのすべてのクエリを見つけることができるログファイルは`solr_slow_requests.log`と呼ばれ、`SOLR_LOGS_DIR`にあります(ログの場所の定義については、永続的なログ設定を参照してください)。

選択したリクエストパラメータのロギング

上記のロギングオプションに加えて、`logParamsList`という追加のリクエストパラメータを使用して、選択したリクエストパラメータのリスト(クエリで送信されたパラメータなど)のみをログに記録することもできます。詳細については、logParamsListパラメータのセクションを参照してください。

SolrCoreでの選択的ロギング

Solrは、o.a.s.c.SolrCore.Requestを使用して、すべてのcorerリクエストをINFOレベルでログに記録します。これは、これらのロガーのレベルをWARNまたはERRORに変更するか、`log4j2.xml`のリクエストパスで`MarkerFilter`を使用することで、より選択的に無効にすることができます。

例えば

<Logger name="org.apache.solr.core.SolrCore.Request" level="info">
  <Filters>
    <MarkerFilter marker="/get" onMatch="DENY" onMismatch="NEUTRAL"/>
    <MarkerFilter marker="/replication" onMatch="DENY" onMismatch="NEUTRAL"/>
  </Filters>
</Logger>

リクエストロギング

すべての受信HTTP(s)リクエストは、デフォルトで標準の`NCSA形式`で、`$SOLR_LOG_DIR/<yyyy_mm_dd>.request.log`という名前のファイルに毎日ロールオーバーされてログに記録されます。デフォルトでは、3日分のリクエストログが保持されます。環境変数または`solr.in.sh`/`solr.in.cmd`で`SOLR_REQUESTLOG_ENABLED=false`を設定することにより、リクエストロギングを無効にすることができます。システムプロパティ`-Dsolr.log.requestlog.retaindays`を使用して、保持する日数を変更できます。