前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 日志能否把全部请求打印出来?

Elasticsearch 日志能否把全部请求打印出来?

作者头像
铭毅天下
发布2023-08-18 20:56:27
3860
发布2023-08-18 20:56:27
举报
文章被收录于专栏:铭毅天下铭毅天下

1、实战问题

请问一下球主,es怎么配置可以把请求日志都打印出来。就是不管是调用借口,还是kibana查询数据,es能打印dsl的请求日志吗??求指导。怎么配置?

——问题来源:https://t.zsxq.com/09vv8rqZj

2、Elasticsearch 日志必知必会

2.1 Elasticsearch 日志用途

  • 集群状态监测和故障诊断。

2.2 Elasticsearch 日志缺省路径

  • $ES_HOME/logs。如果命令行启动 ES,则日志输出信息也是命令行。

2.3 Elasticsearch 日志基于组件

  • Log4j 2
  • https://logging.apache.org/log4j/2.x/

2.4 Elasticsearch 日志配置文件

  • log4j2.properties 。
  • 和 elasticsearch.yml 文件路径相同。

2.5 Elasticsearch 日志配置内容

  • 命名规范
  • 日志随日期滚动策略(日志大小等条件设置)等。

2.6 Elasticsearch 日志级别

由低到高分别为:TRACE -> DEBUG -> INFO -> WARN -> ERROR -> FATAL,如下图所示。

图片来自:spring 官网

这些大家并不陌生,日志级别越低(前提系统设置的话),打印输出的越多;日志级别越高,比如:FATAL,只是特定致命场景才会打印输出,一般遇不到。

2.7 Elasticsearch 默认日志类型调整方式

前提:支持动态更新。

  • 方式一:支持动态更新,无需重启。
代码语言:javascript
复制
PUT /_cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.discovery": "DEBUG"
  }
}
  • 方式二:elasticsearch.yml 配置(静态配置方式,重启后生效)。
代码语言:javascript
复制
logger.org.elasticsearch.discovery: DEBUG
  • 方式三:log4j2.properties 配置(静态配置方式,重启后生效)
代码语言:javascript
复制
logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug

3、日志调到最低级别,看能否输出检索DSL?

问题来了?改成最低TRACE级别,日志能输出咱们的日期请求吗?试试看。

那怎么办?如何输出请求日志?此路已然不同,我们只能另寻他路。除了基础日志,我们还有slowlog日志。

4、Elasticsearch slowlog日志必知必会

4.1 Elasticsearc slowlog 用途

见名释义,本质是:慢日志,又可以分为:慢检索日志和慢写入日志。

slowlog 用于显示:query 阶段 和 fetch 阶段的日志。

Elasticsearch 查询请求如下图所示。

图片来自 Elastic 官方博客

query 阶段的核心步骤:

  • 客户端发送请求到协调节点;
  • 协调阶段转发请求到索引的每个主或副本分片;
  • 分片本地查询完成后,将结果添加到本地的优先队列;
  • 每个分片将本地结果返回给协调节点,协调节点合并完成后,形成全局排序列表。

fetch 阶段的核心步骤:

  • 协调节点接收到客户端请求后,将 GET 请求(来自query 阶段形成的全局排序列表结果数据)-转发给相关节点。
  • 接收到请求后的节点向协调节点返回结果数据。
  • 待全部结果数据都返回后,协调节点将结果返回给客户端。

4.2 Elasticsearc slowlog 设置内容含义

如下所示,拿 query 阶段举例(以实测为准):

  • query 请求耗时超过 500ms,打印 trace 日志。
  • query 请求耗时超过 2s,打印 debug 日志。
  • query 请求耗时超过 5s,打印 info 日志。
  • query 请求耗时超过 10s,打印 warn 日志。
代码语言:javascript
复制
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

fetch 阶段设置如下,原理同上。

代码语言:javascript
复制
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 写入日志设置如下,原理同上。

代码语言:javascript
复制
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

4.3 slowlog 中 source:1000 含义是?

代码语言:javascript
复制
"index.indexing.slowlog.source": "1000"

如下这个问题至少被问到三次,问题大致如下:

slowlog 日志显示不全、被截取了怎么办?

  • 默认:记录slowlog中_source的前1000个字符。
  • 设置为 true 含义:记录整个源请求。
  • 设置为 false 或 0 含义:不记录源请求。
  • 特别说明:原始_source被重新格式化,以确保它适合于单个日志行。

4.3 Elasticsearch slowlog 如何设置?

直接更新 setting 就可以,动态参数,支持动态更新。

代码语言:javascript
复制
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"
}

4.3 基于slowlog 打印请求日志

slowlog 既然可以基于阈值打印输出请求日志,阈值势必可以设置很低,最低设置为0,必然能打印出全部日志了。

试试看?

如下是基于 packets-2022-12-14 进行的 index、fetch、query 的 debug 设置。

代码语言:javascript
复制
PUT packets-2022-12-14/_settings
{
  "index.indexing.slowlog.threshold.index.debug": "0s",
  "index.search.slowlog.threshold.fetch.debug": "0s",
  "index.search.slowlog.threshold.query.debug": "0s"
}

设置完成后,在 kibana 控制台随意加个 query 请求。

日志存储在:elasticsearch_index_search_slowlog.json 文件下,如下图所示。

如下图标红所示,任意的请求 DSL 被打印出来。

开篇问题得以求解完成!

5、小结

Elasticearch 日志协助排查集群故障,慢日志协助排查写入、查询层面的慢写入、慢查询问题。集群规模大,可以独立采集到 Kibana 可视化展示,更为方便和快捷!

你有没有使用 Elasticsearch 日志?欢迎留言讨论。如何使用的?

参考

[1]https://www.elastic.co/guide/en/elasticsearch/reference/current/logging.html

[2]https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、实战问题
  • 2、Elasticsearch 日志必知必会
    • 2.1 Elasticsearch 日志用途
      • 2.2 Elasticsearch 日志缺省路径
        • 2.3 Elasticsearch 日志基于组件
          • 2.4 Elasticsearch 日志配置文件
            • 2.5 Elasticsearch 日志配置内容
              • 2.6 Elasticsearch 日志级别
                • 2.7 Elasticsearch 默认日志类型调整方式
                • 3、日志调到最低级别,看能否输出检索DSL?
                • 4、Elasticsearch slowlog日志必知必会
                  • 4.1 Elasticsearc slowlog 用途
                    • 4.2 Elasticsearc slowlog 设置内容含义
                      • 4.3 slowlog 中 source:1000 含义是?
                        • 4.3 Elasticsearch slowlog 如何设置?
                          • 4.3 基于slowlog 打印请求日志
                          • 5、小结
                          • 参考
                          相关产品与服务
                          Elasticsearch Service
                          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档