加载中

慢日志设置

慢日志记录执行时间超过指定阈值的数据库搜索和索引事件。你可以使用这些日志来调查、分析或排查集群的历史搜索和索引性能问题。

慢日志在分片级别报告搜索任务的持续时间,在索引级别报告索引任务的持续时间,但可能不包含客户端观察到的完整任务执行时间。例如,慢日志不会反映 HTTP 网络延迟或任务队列的影响。

达到指定阈值的事件将以 fileset.nameslowlog 发送到Elasticsearch 日志记录中。这些日志可以在以下位置查看:

  • 如果启用了Elasticsearch 监控,可以在Stack Monitoring 中查看。慢日志事件的 logger 值是 index.search.slowlogindex.indexing.slowlog
  • 从本地 Elasticsearch 服务日志目录查看。慢日志文件的后缀是 _index_search_slowlog.json_index_indexing_slowlog.json

以下是慢日志中的一个搜索事件示例:

提示

如果调用是使用 X-Opaque-ID 请求头启动的,则该 ID 会自动包含在搜索慢日志的 elasticsearch.slowlog.id 字段中。有关详细信息和最佳实践,请参阅 X-Opaque-Id HTTP header

{
  "@timestamp": "2024-12-21T12:42:37.255Z",
  "auth.type": "REALM",
  "ecs.version": "1.2.0",
  "elasticsearch.cluster.name": "distribution_run",
  "elasticsearch.cluster.uuid": "Ui23kfF1SHKJwu_hI1iPPQ",
  "elasticsearch.node.id": "JK-jn-XpQ3OsDUsq5ZtfGg",
  "elasticsearch.node.name": "node-0",
  "elasticsearch.slowlog.id": "tomcat-123",
  "elasticsearch.slowlog.message": "[index6][0]",
  "elasticsearch.slowlog.search_type": "QUERY_THEN_FETCH",
  "elasticsearch.slowlog.source": "{\"query\":{\"match_all\":{\"boost\":1.0}}}",
  "elasticsearch.slowlog.stats": "[]",
  "elasticsearch.slowlog.took": "747.3micros",
  "elasticsearch.slowlog.took_millis": 0,
  "elasticsearch.slowlog.total_hits": "1 hits",
  "elasticsearch.slowlog.total_shards": 1,
  "event.dataset": "elasticsearch.index_search_slowlog",
  "fileset.name" : "slowlog",
  "log.level": "WARN",
  "log.logger": "index.search.slowlog.query",
  "process.thread.name": "elasticsearch[runTask-0][search][T#5]",
  "service.name": "ES_ECS",
  "user.name": "elastic",
  "user.realm": "reserved"
}

以下是慢日志中的一个索引事件示例:

{
  "@timestamp" : "2024-12-11T22:34:22.613Z",
  "auth.type": "REALM",
  "ecs.version": "1.2.0",
  "elasticsearch.cluster.name" : "41bd111609d849fc9bf9d25b5df9ce96",
  "elasticsearch.cluster.uuid" : "BZTn4I9URXSK26imlia0QA",
  "elasticsearch.index.id" : "3VfGR7wRRRKmMCEn7Ii58g",
  "elasticsearch.index.name": "my-index-000001",
  "elasticsearch.node.id" : "GGiBgg21S3eqPDHzQiCMvQ",
  "elasticsearch.node.name" : "instance-0000000001",
  "elasticsearch.slowlog.id" : "RCHbt5MBT0oSsCOu54AJ",
  "elasticsearch.slowlog.source": "{\"key\":\"value\"}"
  "elasticsearch.slowlog.took" : "0.01ms",
  "event.dataset": "elasticsearch.index_indexing_slowlog",
  "fileset.name" : "slowlog",
  "log.level" : "TRACE",
  "log.logger" : "index.indexing.slowlog.index",
  "service.name" : "ES_ECS",
  "user.name": "elastic",
  "user.realm": "reserved"
}

你可以在两个级别启用慢日志记录:

默认情况下,所有阈值都设置为 -1,这意味着不记录任何事件。

可以为四个日志级别启用慢日志阈值:tracedebuginfowarn。你可以通过禁用更详细的级别来模拟设置日志级别阈值。

要查看当前的慢日志设置,请使用获取索引设置 API

 GET _all/_settings?expand_wildcards=all&filter_path=*.settings.index.*.slowlog 

搜索慢日志按分片发出。必须分别为分片的查询和获取搜索阶段启用它们。

你可以使用 index.search.slowlog.include.user 设置将 user.*auth.type 字段附加到慢日志条目。这些字段包含触发请求的用户信息。

以下代码片段使用log4j2.properties 配置文件调整所有索引的所有可用搜索慢日志设置:

index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms

index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug: 500ms
index.search.slowlog.threshold.fetch.trace: 200ms

index.search.slowlog.include.user: true

以下代码片段使用更新索引设置 API 调整单个索引的相同设置:

 PUT /my-index-000001/_settings {
  "index.search.slowlog.threshold.query.warn": "10s",
  "index.search.slowlog.threshold.query.info": "5s",
  "index.search.slowlog.threshold.query.debug": "2s",
  "index.search.slowlog.threshold.query.trace": "500ms",
  "index.search.slowlog.threshold.fetch.warn": "1s",
  "index.search.slowlog.threshold.fetch.info": "800ms",
  "index.search.slowlog.threshold.fetch.debug": "500ms",
  "index.search.slowlog.threshold.fetch.trace": "200ms",
  "index.search.slowlog.include.user": true
}

索引慢日志按索引文档发出。

你可以使用 index.indexing.slowlog.include.user 设置将 user.*auth.type 字段附加到慢日志条目。这些字段包含触发请求的用户信息。

以下代码片段使用log4j2.properties 配置文件调整所有索引的所有可用索引慢日志设置:

index.indexing.slowlog.threshold.index.warn: 10s
index.indexing.slowlog.threshold.index.info: 5s
index.indexing.slowlog.threshold.index.debug: 2s
index.indexing.slowlog.threshold.index.trace: 500ms

index.indexing.slowlog.source: 1000
index.indexing.slowlog.reformat: true

index.indexing.slowlog.include.user: true

以下代码片段使用更新索引设置 API 调整单个索引的相同设置:

 PUT /my-index-000001/_settings {
  "index.indexing.slowlog.threshold.index.warn": "10s",
  "index.indexing.slowlog.threshold.index.info": "5s",
  "index.indexing.slowlog.threshold.index.debug": "2s",
  "index.indexing.slowlog.threshold.index.trace": "500ms",
  "index.indexing.slowlog.source": "1000",
  "index.indexing.slowlog.reformat": true,
  "index.indexing.slowlog.include.user": true
}

默认情况下,Elasticsearch 在慢日志中记录 _source 字段的前 1000 个字符。你可以使用 index.indexing.slowlog.source 设置调整 _source 的记录方式。将 index.indexing.slowlog.source 设置为 false0 可以完全跳过记录 source。将 index.indexing.slowlog.source 设置为 true 可以记录整个 source,无论其大小如何。

默认情况下,原始的 _source 会被重新格式化,以确保它适合单行日志。如果保留原始文档格式很重要,则可以通过将 index.indexing.slowlog.reformat 设置为 false 来关闭重新格式化。这将导致 source 以原始格式记录,可能会跨越多行日志。

记录慢请求可能会消耗 Elasticsearch 集群的资源,具体取决于符合条件的流量大小。例如,发出的日志可能会增加Elasticsearch 监控集群的索引磁盘使用率。为了减少慢日志的影响,请考虑以下事项:

  • 对特定索引启用慢日志记录,而不是对所有索引。
  • 设置高阈值以减少记录的事件数量。
  • 仅在排查问题时启用慢日志记录。

如果你不确定如何开始调查流量问题,可以考虑在索引级别使用更新索引设置 API 启用 warn 阈值,并设置较高的 30s 阈值。

  • 为搜索请求启用

     PUT /*/_settings {
      "index.search.slowlog.include.user": true,
      "index.search.slowlog.threshold.fetch.warn": "30s",
      "index.search.slowlog.threshold.query.warn": "30s"
    }
    
  • 为索引请求启用

     PUT /*/_settings {
      "index.indexing.slowlog.include.user": true,
      "index.indexing.slowlog.threshold.index.warn": "30s"
    }
    

达到慢日志阈值并不能保证集群存在性能问题。如果发现了症状,慢日志可以提供有用的数据来诊断上游流量模式或源头,以解决客户端问题。例如,你可以使用 X-Opaque-ID_source 请求体或 user.* 字段中包含的数据来识别问题的来源。这类似于排查实时昂贵任务

如果你遇到搜索性能问题,还可以考虑使用profile API 调查因查询持续时间而被标记的搜索。然后,你可以使用 profiled query 并通过query profiler 来调查优化选项。这类调查通常应在非生产环境中进行。

慢日志记录在事件完成后检查每个事件是否达到报告阈值。这意味着如果事件触发了断路器错误,它无法报告。如果怀疑存在断路器错误,你还应该考虑启用审计日志记录,它会在事件执行之前记录事件。

要了解优化搜索和索引请求的其他方法,请参阅搜索速度优化索引速度优化

© . All rights reserved.