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

news2024/9/30 9:25:14

1、实战问题

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

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

2、Elasticsearch 日志必知必会

2.1 Elasticsearch 日志用途

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

8d9dfcb35112dea3c58aad273c832943.png

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 文件路径相同。

a6c2875b29247ae61591db60b92caf89.png

2.5 Elasticsearch 日志配置内容

  • 命名规范

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

2.6 Elasticsearch 日志级别

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

b3e27502abbc06a0149275eed9241a29.png 图片来自:spring 官网

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

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

前提:支持动态更新。

  • 方式一:支持动态更新,无需重启。

PUT /_cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.discovery": "DEBUG"
  }
}
  • 方式二:elasticsearch.yml 配置(静态配置方式,重启后生效)。

logger.org.elasticsearch.discovery: DEBUG
  • 方式三:log4j2.properties 配置(静态配置方式,重启后生效)

logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug

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

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

c6b5e429031ac2ef202ab471e07e47b2.png 4e24a3bc73fd1b279125c8fdfb8b83d4.png

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

4、Elasticsearch slowlog日志必知必会

4.1 Elasticsearc slowlog 用途

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

dfa7a8a984bbb25649980f01a1010e75.png

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

Elasticsearch 查询请求如下图所示。

05a73ecf08a8506af257020f8c707582.png图片来自 Elastic 官方博客

query 阶段的核心步骤:

  • 客户端发送请求到协调节点;

  • 协调阶段转发请求到索引的每个主或副本分片;

  • 分片本地查询完成后,将结果添加到本地的优先队列;

  • 每个分片将本地结果返回给协调节点,协调节点合并完成后,形成全局排序列表。

fetch 阶段的核心步骤:

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

  • 接收到请求后的节点向协调节点返回结果数据。

  • 待全部结果数据都返回后,协调节点将结果返回给客户端。

4.2 Elasticsearc slowlog 设置内容含义

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

  • query 请求耗时超过 500ms,打印 trace 日志。

  • query 请求耗时超过 2s,打印 debug 日志。

  • query 请求耗时超过 5s,打印 info 日志。

  • query 请求耗时超过 10s,打印 warn 日志。

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 阶段设置如下,原理同上。

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 写入日志设置如下,原理同上。

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 含义是?

"index.indexing.slowlog.source": "1000"

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

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

  • 默认:记录slowlog中_source的前1000个字符。

  • 设置为 true 含义:记录整个源请求。

  • 设置为 false 或 0 含义:不记录源请求。

  • 特别说明:原始_source被重新格式化,以确保它适合于单个日志行。

4.3 Elasticsearch slowlog 如何设置?

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

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 设置。

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 文件下,如下图所示。

d089e5aeb64b84ba8632369f58b1140d.png

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

112ac65ce7e79d0563b59c6d6632cb3f.png

开篇问题得以求解完成!

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

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单(2022年国庆更新版)

  3. 如何系统的学习 Elasticsearch ?

3fe1571b0c20f142723aad6c08102460.jpeg

更短时间更快习得更多干货!

和全球 1800+ Elastic 爱好者一起精进!

84b7569a72a679936e2b1f15dac84254.gif

比同事抢先一步学习进阶干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代细胞计数分析平台丨OMIQ简介

单细胞分析,变得简单 OMIQ是一个现代细胞计数分析平台,它将机器学习和分析管道与经典手动分析的世界连接起来。它允许研究人员在一个软件中完成他们的整个工作流程,从原始数据到统计意义,使用他们自己的专业知识和熟悉的工具与数…

java养老系统养老院系统养老院网站源码

简介 本系统是养老院系统,主要是老人入住养老院的业务逻辑,有护工和医生对老人进行护理看病记录等信息管理,缴费入住外出记录管理等。 演示视频 https://www.bilibili.com/video/BV18i4y1Z7je/?share_sourcecopy_web&vd_sourceed0f04fb…

2022(核酸年)结束了

目录2022目标回顾2022生活回顾2023目标祝词现在是北京时间2022-12-30 15:08,再有一天2022就结束了,岁月催人老啊!同样又到了一年一度总结的时候了,我清楚记得在 2021年度总结中定下了我的今年目标,即如此那我们一同看看…

strcmp(),strcat(),strcpy()函数复习与模拟实现

tips 1. 与--都是有副作用的,而有关于位的运算都是没有副作用的。 既然是与字符串有关的函数,不得不提一下:\0是字符串结束符,对应到ascll表里面是空字符NULL,对应的ACSLL码为0. 1. 字符串许多函数的操作与\0有些密…

剩余电流继电器在大型游乐场所中的应用探讨

【摘要】游乐场所中大型游乐设备的运转离不开电力系统的支持,例如受到小朋友们欢迎的观光火车,自控飞机,豪华转马等。目前许多游乐经营者在安全用电方面的意识还比较薄弱,存在一定的游乐安全隐患,本文就剩余电流继电器…

机器学习笔记之Sigmoid信念网络(三)KL散度角度观察醒眠算法

机器学习笔记之Sigmoid信念网络——KL散度角度观察醒眠算法引言回顾: 醒眠算法过程KL Divergence\text{KL Divergence}KL Divergence观察醒眠算法引言 上一节介绍了MCMC以及平均场理论变分推断方法的弊端并介绍了醒眠算法(Weak-Sleep Algorithm)。本节将介绍从KL散…

ThinkPHP历史漏洞

文章目录ThinkPHP简介Thinkphp历史漏洞Thinkphp 2.x 任意代码执行漏洞漏洞描述影响版本漏洞复现Thinkphp5.0.23远程代码执行漏洞(CVE-2018-20062)漏洞描述影响版本漏洞复现ThinkPHP 5.0.x 未开启强制路由导致的RCE 漏洞分析(CNVD-2018-24942)漏洞描述影响版本漏洞复现ThinkPHP简…

2023元旦假期值得关注的空投与埋伏任务

不知不觉2023年元旦即将到来,这也是十一国庆之后大家迎来的第一次小假期,相信不少人已经开始“家里蹲”计划,不少项目方也最近搞了一些空投任务,刚好趁此时间也能刷空投,获得意外惊喜,这里我们为大家总结最…

【redis有序集合操作】

【zcount:统计有序集合分数区间内的成员数量】 zadd user_login 1 one zadd user_login 3 two zadd user_login 4 three zadd user_login 5 four ZCOUNT 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量…

socket套接字

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 socket套接字1. 什么是socket套接字2. socket编程3. 网络字节序4. IP地址转换函数5. sockaddr数据结构…

【答学员问】服务器上安装好LAMP架构,部署wordpress之后网页端无法访问

文章目录问题反馈问题排查1. 首先是IP: 确认无误:2. 安装一下 php看看是否安装:3. 最后测试PHP是否能够解析再次沟通分析整理列清单排查测试过程1. 上传包解压2. 安装好LAMP架构并测试是否支持php3. 测试是否可以访问wordpress4. 查看日志排查…

Maven是怎么样构建Spring Boot项目的?

准备好项目运行所需的环境后,就可以使用IDEA开发工具搭建一个Spring Boot入门程序了。我们既可以使用Maven方式构建项目,也可以使用Spring Initializr快捷方式构建项目。这里先介绍如何使用Maven方式构建Spring Boot项目,具体步骤如下。 1.初…

SpringBoot+VUE前后端分离项目学习笔记 - 【06 SpringBoot集成Mybatis实现数据查询】

配置文件改成yaml格式: application.yml server:port: 9090spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/joyce?serverTimezoneGMT%2b8username: rootpassword: 123456写基本的功能来验证后台数据查询功能 …

了解初级测试人员从测试自动化开始需要什么?

文章目录 前言 将测试自动化视为软件开发 选择一种编程语言开始 学习干净的代码实践和原则 了解自动化中有用的设计模式 学习干净的代码实践和原则 学习网络工作原理的基础知识 选择一个 UI 自动化工具开始 了解 HTTP 协议以及如何自动化 API 测试 熟悉数据库基础知识…

React 配置文件(三)配置本地IP地址和端口号

1.在环境变量中配置好对应IP地址和端口号,拿UAT来举例 2.在config-overrides.js中配置域名和端口号 3.在package.json中配置好启动脚本 "scripts": { "start": "react-app-rewired start", "uat": "dotenv -e .env.uat react-app…

Android之蚂蚁森林能量水滴效果

最近公司有个需求,需要一个类似于蚂蚁森林能量水滴浮动效果,所以有了这篇文章,目前在项目里,没时间提出来做demo,有代码欠缺的地方欢迎指出,一定补上。 文章目录一:效果图二:具体实现…

HotPDF Delphi PDF VCL完全形成PDF文档

HotPDF Delphi PDF VCL完全形成PDF文档 HotPDF Delphi PDF,用于创建和创建PDF文档的应用程序名称。您的公司已在您之前发布,以便在Delphi和C中使用。事实上,使用这个库,您将能够以不同的方式编辑、执行、构建和管理PDF文档。如果您…

configmap中data变成字符串问题(k8s踩坑)

发现问题 编写text文件,用于创建要给nginx的configmap,如下: [rootmaster redis]# vim txt apiVersion: v1 kind: ConfigMap metadata:name: nginx-confignamespace: redis data:nginx.conf: |#user nginx;worker_processes 1;#error_log…

【pandas】教程:4-显示数据

Pandas 显示数据 本节使用的数据为 data/air_quality_no2.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库 import pandas as pd import matplotlib.pyplot as pltair_quality pd.read_csv("data/air_quality_no2.csv", index_co…

知物由学 | SO VMP 加壳与混淆,为移动应用提供函数级保护

导读:VMP 是一种用于软件保护的软件,对软件进行加壳,加固厂商都有自己的 VMP 方案,但值得注意的是,native 层的 VMP 方案并不成熟,兼容性只是其中一个影响因素,性能更是导致该方案无法普及的重要…