将请求记录到Elasticsearch

这是我多年来一直想写下来的东西,但从来没有写下来。 通过使用慢速日志回答两个问题,它可以对某些Elasticsearch设置有很大帮助。

  • 我的应用程序正在与Elasticsearch通信吗?
  • 我的应用程序正在构建什么样的查询?

不久前,我帮助一个同事完成了我当前的一个项目,以将Elasticsearch集成到专有软件中来调试一些问题。 他不确定是否有任何请求到达Elasticsearch,以及它们的外观。 我们为Elasticsearch激活了慢日志,它不仅可以用于记录慢查询,还可以为到达Elasticsearch的任何查询启用调试。

顾名思义,慢速日志用于记录慢速请求。 慢是一个主观术语,您可以定义需要通过的阈值。 例如,您可以定义所有低于50ms的查询都记录在调试级别中,而任何花费超过500ms的查询都记录在警告级别中。

可以为查询执行的两个阶段配置慢查询:查询和获取。 在查询阶段,仅以搜索结果列表的形式检索文档的ID。 提取阶段是检索结果文档的位置。

除了慢速查询日志外,还有慢速索引日志,可以以相同的方式使用它,但是它测量建立索引的时间。

这两个设置都是索引设置。 这意味着它们针对每个索引进行配置,因此跨索引可能有所不同。

实例设定

您可以在多个地方配置索引设置。 第一个是config/elasticsearch.yml ,其中包含实例的配置。 对于旧版本的Elasticsearch,它已经包含被注释掉的行,在新版本中,您需要自己包括它们。 如果要在调试级别记录所有请求,则只需添加以下行并将阈值设置为0。

index.search.slowlog.threshold.query.debug: 0s
index.search.slowlog.threshold.fetch.debug: 0s
index.indexing.slowlog.threshold.index.debug: 0s

您需要重新启动实例,以便激活设置。 现在,所有索引和搜索请求都将记录到日志文件夹中的单独日志文件中。 使用默认配置时,日志将位于logs/elasticsearch_index_indexing_slowlog.loglogs/elasticsearch_index_search_slowlog.log 。 查询日志现在将包含以下条目:

[2016-03-23 06:43:47,231][DEBUG][index.search.slowlog.fetch] took[5.8ms], took_millis[5], types[talk], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"tags":"Java"}}}], extra_source[]

如果在一个实例上使用多个分片进行测试,则日志行可能比预期的多:在查询阶段,每个分片将有一行,而在获取阶段将有一行。

运行时设置

除了elasticsearch.yml的设置之外,还可以使用HTTP API激活缓慢的请求日志,而无需重启实例,因此非常适合调试生产问题。 以下请求更改索引conference的查询日志的设置。

curl -XPUT "http://localhost:9200/conference/_settings" -d'
{
    "index.search.slowlog.threshold.query.debug": "0s"
}'

完成调试问题后,可以再次设置更高的阈值。

翻译自: https://www.javacodegeeks.com/2016/03/logging-requests-elasticsearch.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值