スローログ

検索スローログ

シャードレベルのスローログは、専用のログファイルにスローメソッド(クエリおよびフェッチフェーズ)を記録することを可能にします。

実行のクエリフェーズとフェッチフェーズの両方に対してしきい値を設定できます。以下はサンプルです:

Yaml

  1. index.search.slowlog.threshold.query.warn: 10s
  2. index.search.slowlog.threshold.query.info: 5s
  3. index.search.slowlog.threshold.query.debug: 2s
  4. index.search.slowlog.threshold.query.trace: 500ms
  5. index.search.slowlog.threshold.fetch.warn: 1s
  6. index.search.slowlog.threshold.fetch.info: 800ms
  7. index.search.slowlog.threshold.fetch.debug: 500ms
  8. index.search.slowlog.threshold.fetch.trace: 200ms

上記の設定はすべて動的であり、インデックス設定の更新 APIを使用して各インデックスに対して設定できます。例えば:

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index.search.slowlog.threshold.query.warn": "10s",
  5. "index.search.slowlog.threshold.query.info": "5s",
  6. "index.search.slowlog.threshold.query.debug": "2s",
  7. "index.search.slowlog.threshold.query.trace": "500ms",
  8. "index.search.slowlog.threshold.fetch.warn": "1s",
  9. "index.search.slowlog.threshold.fetch.info": "800ms",
  10. "index.search.slowlog.threshold.fetch.debug": "500ms",
  11. "index.search.slowlog.threshold.fetch.trace": "200ms"
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. 'index.search.slowlog.threshold.query.warn' => '10s',
  5. 'index.search.slowlog.threshold.query.info' => '5s',
  6. 'index.search.slowlog.threshold.query.debug' => '2s',
  7. 'index.search.slowlog.threshold.query.trace' => '500ms',
  8. 'index.search.slowlog.threshold.fetch.warn' => '1s',
  9. 'index.search.slowlog.threshold.fetch.info' => '800ms',
  10. 'index.search.slowlog.threshold.fetch.debug' => '500ms',
  11. 'index.search.slowlog.threshold.fetch.trace' => '200ms'
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. "index.search.slowlog.threshold.query.warn": "10s",
  5. "index.search.slowlog.threshold.query.info": "5s",
  6. "index.search.slowlog.threshold.query.debug": "2s",
  7. "index.search.slowlog.threshold.query.trace": "500ms",
  8. "index.search.slowlog.threshold.fetch.warn": "1s",
  9. "index.search.slowlog.threshold.fetch.info": "800ms",
  10. "index.search.slowlog.threshold.fetch.debug": "500ms",
  11. "index.search.slowlog.threshold.fetch.trace": "200ms",
  12. },
  13. });
  14. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index.search.slowlog.threshold.query.warn": "10s",
  4. "index.search.slowlog.threshold.query.info": "5s",
  5. "index.search.slowlog.threshold.query.debug": "2s",
  6. "index.search.slowlog.threshold.query.trace": "500ms",
  7. "index.search.slowlog.threshold.fetch.warn": "1s",
  8. "index.search.slowlog.threshold.fetch.info": "800ms",
  9. "index.search.slowlog.threshold.fetch.debug": "500ms",
  10. "index.search.slowlog.threshold.fetch.trace": "200ms"
  11. }

デフォルトでは、しきい値は無効(-1に設定)です。

ロギングはシャードレベルのスコープで行われ、特定のシャード内での検索リクエストの実行を意味します。これは、複数のシャードにブロードキャストされて実行される可能性のある全体の検索リクエストを含みません。シャードレベルのロギングの利点の一部は、リクエストレベルと比較して特定のマシンでの実際の実行との関連性です。

検索スローログファイルはlog4j2.propertiesファイルで構成されています。

検索スローログの起源を特定する

スローメソッドを引き起こした原因を特定することはしばしば有用です。スローメソッドを引き起こしたユーザーに関する情報を含めるには、index.search.slowlog.include.user設定を使用します。

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index.search.slowlog.include.user": True
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. 'index.search.slowlog.include.user' => true
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. "index.search.slowlog.include.user": true,
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index.search.slowlog.include.user": true
  4. }

これにより、ユーザー情報がスローログに含まれるようになります。

Js

  1. {
  2. "@timestamp": "2024-02-21T12:42:37.255Z",
  3. "log.level": "WARN",
  4. "auth.type": "REALM",
  5. "elasticsearch.slowlog.id": "tomcat-123",
  6. "elasticsearch.slowlog.message": "[index6][0]",
  7. "elasticsearch.slowlog.search_type": "QUERY_THEN_FETCH",
  8. "elasticsearch.slowlog.source": "{\"query\":{\"match_all\":{\"boost\":1.0}}}",
  9. "elasticsearch.slowlog.stats": "[]",
  10. "elasticsearch.slowlog.took": "747.3micros",
  11. "elasticsearch.slowlog.took_millis": 0,
  12. "elasticsearch.slowlog.total_hits": "1 hits",
  13. "elasticsearch.slowlog.total_shards": 1,
  14. "user.name": "elastic",
  15. "user.realm": "reserved",
  16. "ecs.version": "1.2.0",
  17. "service.name": "ES_ECS",
  18. "event.dataset": "elasticsearch.index_search_slowlog",
  19. "process.thread.name": "elasticsearch[runTask-0][search][T#5]",
  20. "log.logger": "index.search.slowlog.query",
  21. "elasticsearch.cluster.uuid": "Ui23kfF1SHKJwu_hI1iPPQ",
  22. "elasticsearch.node.id": "JK-jn-XpQ3OsDUsq5ZtfGg",
  23. "elasticsearch.node.name": "node-0",
  24. "elasticsearch.cluster.name": "distribution_run"
  25. }

X-Opaque-IDヘッダーで呼び出しが開始された場合、IDはelasticsearch.slowlog.idフィールドの検索スローログに含まれます。詳細とベストプラクティスについては、X-Opaque-Id HTTPヘッダーを参照してください。

インデックススローログ

インデックススローログは、検索スローログと同様の機能を持ちます。ログファイル名は_index_indexing_slowlog.jsonで終わります。ログとしきい値は、検索スローログと同じ方法で構成されます。インデックススローログのサンプル:

Yaml

  1. index.indexing.slowlog.threshold.index.warn: 10s
  2. index.indexing.slowlog.threshold.index.info: 5s
  3. index.indexing.slowlog.threshold.index.debug: 2s
  4. index.indexing.slowlog.threshold.index.trace: 500ms
  5. index.indexing.slowlog.source: 1000

上記の設定はすべて動的であり、インデックス設定の更新 APIを使用して各インデックスに対して設定できます。例えば:

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index.indexing.slowlog.threshold.index.warn": "10s",
  5. "index.indexing.slowlog.threshold.index.info": "5s",
  6. "index.indexing.slowlog.threshold.index.debug": "2s",
  7. "index.indexing.slowlog.threshold.index.trace": "500ms",
  8. "index.indexing.slowlog.source": "1000"
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. 'index.indexing.slowlog.threshold.index.warn' => '10s',
  5. 'index.indexing.slowlog.threshold.index.info' => '5s',
  6. 'index.indexing.slowlog.threshold.index.debug' => '2s',
  7. 'index.indexing.slowlog.threshold.index.trace' => '500ms',
  8. 'index.indexing.slowlog.source' => '1000'
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. "index.indexing.slowlog.threshold.index.warn": "10s",
  5. "index.indexing.slowlog.threshold.index.info": "5s",
  6. "index.indexing.slowlog.threshold.index.debug": "2s",
  7. "index.indexing.slowlog.threshold.index.trace": "500ms",
  8. "index.indexing.slowlog.source": "1000",
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index.indexing.slowlog.threshold.index.warn": "10s",
  4. "index.indexing.slowlog.threshold.index.info": "5s",
  5. "index.indexing.slowlog.threshold.index.debug": "2s",
  6. "index.indexing.slowlog.threshold.index.trace": "500ms",
  7. "index.indexing.slowlog.source": "1000"
  8. }

スローメソッドイベントを引き起こしたユーザーに関する情報を含めるには、index.indexing.slowlog.include.user設定を使用します。

Python

  1. resp = client.indices.put_settings(
  2. index="my-index-000001",
  3. settings={
  4. "index.indexing.slowlog.include.user": True
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index-000001',
  3. body: {
  4. 'index.indexing.slowlog.include.user' => true
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index-000001",
  3. settings: {
  4. "index.indexing.slowlog.include.user": true,
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT /my-index-000001/_settings
  2. {
  3. "index.indexing.slowlog.include.user": true
  4. }

デフォルトでは、Elasticsearchはスローログに_sourceの最初の1000文字を記録します。これをindex.indexing.slowlog.sourceで変更できます。falseまたは0に設定すると、ソースのロギングが完全にスキップされ、trueに設定すると、サイズに関係なくソース全体がログに記録されます。元の_sourceは、単一のログ行に収まるようにデフォルトで再フォーマットされます。元のドキュメント形式を保持することが重要な場合は、index.indexing.slowlog.reformatfalseに設定することで再フォーマットをオフにでき、ソースが「そのまま」ログに記録され、複数のログ行にまたがる可能性があります。

インデックススローログファイルはlog4j2.propertiesファイルで構成されています。

スローログレベル

適切なしきい値を設定することで、検索またはインデックスのスローログレベルを模倣し、「より詳細な」ロガーをオフにすることができます。例えば、index.indexing.slowlog.level: INFOをシミュレートしたい場合は、index.indexing.slowlog.threshold.index.debugindex.indexing.slowlog.threshold.index.trace-1に設定するだけで済みます。