【Elastic Engineering】Elasticsearch:Elasticsearch 中的慢日志

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch:Elasticsearch 中的慢日志

作者:刘晓国


Shard 级慢速搜索日志允许将慢速搜索(查询和获取阶段)记录到专用日志文件中。日志记录是任何应用程序不可缺的一部分。 对于像 Elasticsearch这样的分布式解决方案,它必须处理大量的请求,因此日志记录不可避免,其重要性至关重要。


顾名思义,慢速日志用于记录慢速请求,无论是搜索请求还是索引请求。 我们可以设置“慢”阈值,以便仅记录那些高于该阈值的请求。


对于 Elasticsearch,慢速日志很重要,主要是因为:


它们有助于确定应该与 Elasticsearch 通信的应用程序是否正在这样做。

我们可以检查影响 Elasticsearch 的查询并进行验证。

日志记录可以提供有关索引/群集运行状况的重要信息,从而有助于维护群集。

现在,根据您的理论,让我们介绍可用的慢速日志的主要类型及其用例。


慢日志分类


Elasticsearch 中的慢日志主要有两种:搜索慢日志 (search slow logs)和索引慢日志 (index slow logs)。 让我们讨论一下。


Search Slow Logs


搜索慢速日志用于记录慢速搜索。 慢度阈值取决于应用程序及其 Elasticsearch 实现细节。 每个应用程序可以具有不同的阈值。


在 Elasticsearch 中进行搜索分为两个阶段:


1.查询阶段 - 在查询阶段,Elasticsearch 收集相关结果的文档 ID。 完成此阶段后,仅返回与搜索匹配的文档的 ID,并且不会再出现其他信息,例如字段或它们的值等。

2.获取阶段 - 在获取阶段,使用来自查询阶段的文档 ID 来获取实际文档,由此可以说搜索请求是完整的。


搜索慢速日志显示查询和查询的获取阶段的拆分时间。 因此,我们能够完整地了解完成查询和获取阶段所花费的时间,并且能够检查整个查询本身。


Index Slow Logs


索引慢日志用于记录索引过程。 在 Elasticsearch 中对文档建立索引后,慢速索引日志会记录请求的记录,这些记录需要花费较长的时间才能完成。 同样,在这里,时间窗口也可以在索引日志的配置设置中进行调整。


默认情况下,启用后,Elasticsearch 将文档的前 1000 行记录到日志文件中。 可以将其更改为 null 或记录整个文档,具体取决于我们如何配置设置。


在下一部分中,让我们看看如何配置日志并检查上面讨论的两种慢速日志类型。


索引慢速日志记录设置


首先,创建要为其配置索引慢日志的测试索引。

PUT testindex-slowlogs

现在为索引 “testindex-slowlogs” 配置慢日志,如下所示:

PUT testindex-slowlogs/_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.level": "info",
  "index.indexing.slowlog.source": "1000"
}

我们可以通过 _settings 来更新这些配置。默认情况下,均未启用(设置为-1)。 级别(warn,info,debug, trace)允许控制将在哪个日志记录级别下记录日志。并非所有要求都进行配置(例如,只能设置warn阈值)。 几个级别的好处是能够针对违反的特定阈值快速 “grep”。默认情况下,Elasticsearch 将在慢速日志中记录 _source 的前1000个字符。 你可以使用 index.indexing.slowlog.source 进行更改。 将其设置为 false 或 0 将完全跳过对源的日志记录,将其设置为 true 将不考虑大小而记录整个源。 默认情况下,原始 _source 会重新格式化,以确保它适合单个日志行。 如果保留原始文档格式很重要,则可以通过将 index.indexing.slowlog.reformat 设置为 false 来关闭重新格式化,这将导致源按“原样”记录,并可能跨越多个日志行。


为了便于测试,我们把上面的阈值都设置为0和默认值,我们使用 _settings 来修个我们的配置:

PUT testindex-slowlogs/_settings
{
  "index.indexing.slowlog.threshold.index.warn": "0ms",
  "index.indexing.slowlog.threshold.index.info": "0ms",
  "index.indexing.slowlog.threshold.index.debug": "0ms",
  "index.indexing.slowlog.threshold.index.trace": "0ms",
  "index.indexing.slowlog.level": "trace",
  "index.indexing.slowlog.source": "1000"
}

这样如果其中的任何一个阈值是大于0的话,那么就会产生 index slow log。我们在 Kibana 中输入如下的一个文档:

POST testindex-slowlogs/_doc
{
  "price": 9925,
  "name": "Nariko"
}

我们可以找到在 Elasticsearch logs 目录下的文件 elasticsearch_index_indexing_slowlog.log:

image.png

我们打开这个 elasticsearch_index_indexing_slowlog.log 的内容,我们可以看到:

image.png

在这里我们可以看到所有的索引慢速日志的记录。因为我们所设置的阈值为0,所以任何一个操作都会触发相应的索引慢日志操作。在实际的应用中,可以根据自己的实际要求分别进行阈值的设置。


这些日志提供以下信息:


time stamp

log level

type of log

node name

index name

time taken in micro/milli seconds

index type

document id

"_source" field


使用此信息,我们可以了解索引操作的过程,并可以检测/调试任何异常(如果存在)。


Search Slow Logging


与慢索引日志相似,搜索慢日志将应用于特定索引。 记录所有搜索请求的示例配置如下:

PUT testindex-slowlogs/_settings
{
  "index.search.slowlog.threshold.query.warn": "0ms",
  "index.search.slowlog.threshold.query.info": "0ms",
  "index.search.slowlog.threshold.query.debug": "0ms",
  "index.search.slowlog.threshold.query.trace": "0ms",
  "index.search.slowlog.threshold.fetch.warn": "0ms",
  "index.search.slowlog.threshold.fetch.info": "0ms",
  "index.search.slowlog.threshold.fetch.debug": "0ms",
  "index.search.slowlog.threshold.fetch.trace": "0ms",
  "index.search.slowlog.level": "info"
}

由于上述设置的所有参数值均为0ms,因此将记录所有搜索请求。 日志文件位于日志目录下,名称为:“elasticsearch_index_search_slowlog.log”


对索引运行以下查询:

GET testindex-slowlogs/_search
{
  "query": {
    "match": {
      "name": "Nariko"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

成功执行此查询后,打开上述搜索慢日志文件。 您会发现看起来像这样的日志:

image.png

我们可以查看文件 elasticsearch_index_search_slowlog.log。由于我们所设置的日志里的阈值都为0,所以每一个搜索都会生产相应的日志记录。在实际的使用中,我们可以根据自己的情况设置相应的阈值。查看 elasticsearch_index_search_slowlog.log 文件:

image.png

如您所见,上面为单个搜索生成了2个日志。 这是因为搜索是按分片方式执行的,并且在默认配置下,索引中有2个分片。 当我们执行搜索时,请求被传递到2个分片中的每个分片,并生成了2个日志。


在这些日志中,我们可以查看详细信息,例如搜索类型,节点以及带有详细查询的分片号信息。


结论


在本教程中,我们探讨了 Elasticsearch 慢日志的重要性。 我们介绍了索引和搜索慢日志,以及配置示例和日志样本。如果你先了解如何把这些日志信息导入到 Elasticsearch 中并进行分析的话,请参阅文章 “Elastic:监控 Elasticsearch 及 Kibana”。


参考:


【1】https://qbox.io/blog/slow-logs-in-elasticsearch-search-index-config-example


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
|
5天前
|
消息中间件 监控 Kafka
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
【8月更文挑战第13天】Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
26 3
|
3月前
|
JSON Prometheus Cloud Native
Grafana 系列 - 统一展示 -8-ElasticSearch 日志快速搜索仪表板
Grafana 系列 - 统一展示 -8-ElasticSearch 日志快速搜索仪表板
|
3月前
|
Unix Linux iOS开发
Elasticsearch如何配置日志
Elasticsearch如何配置日志
|
7天前
|
Kubernetes Java 索引
Elasticsearch on K8S 开启慢日志
本文档指导如何在Elasticsearch on PaaS环境中手动配置慢日志。首先通过API设置索引的慢日志阈值,接着创建`log4j2.properties`的ConfigMap以定义日志滚动策略,并修改Elasticsearch配置引入此ConfigMap。最后,通过Kubernetes命令检查Pod内的`logs`目录以查看生成的慢日志文件。需注意,不当配置可能会影响系统性能。[官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/logging.html)提供更多细节。
22 3
|
3月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
210 4
|
3月前
|
运维 架构师 搜索推荐
7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线...
7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线...
52 4
|
3月前
|
存储 安全 数据处理
Elastic 中国开发者大会2023最新干货——Elasticsearch 7、8 新功能一网打尽
Elastic 中国开发者大会2023最新干货——Elasticsearch 7、8 新功能一网打尽
42 0
|
9月前
|
存储 数据可视化 搜索推荐
分布式系列教程(26) -分布式日志搜集工具Elasticsearch简介
分布式系列教程(26) -分布式日志搜集工具Elasticsearch简介
85 0
|
8月前
|
搜索推荐 索引
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
126 3

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版