Skip to content
📖0 阅读·🤍0 点赞

Elasticsearch Log:让 ES 查询变得透明可见 ​

作者:舒一笑不秃头
理念:先给予价值,再谈论工具


写在前面:我为什么要做这个插件 ​

作为一名开发者,我经历过无数次这样的场景:

  • 线上出现慢查询,但不知道应用到底发了什么 DSL
  • 想优化 ES 性能,却看不到真实的查询语句
  • 调试时在日志里翻来翻去,复制粘贴 JSON 格式还乱了
  • 想学习 ES 最佳实践,但不知道框架底层生成了什么查询

我意识到:问题不在于我们不够努力,而在于信息被隐藏了。

理查德·沃曼说过:"信息焦虑的根源不是信息过载,而是信息无法被理解。" 我们需要的不是更多的日志,而是让关键信息在正确的时间、以正确的方式呈现。

所以我做了 Elasticsearch Log 这个插件。它不是为了炫技,而是为了解决真实的痛点。


这个插件能为你创造什么价值 ​

1. 让隐藏的信息变得可见 ​

你的痛点:

  • ES 查询被框架封装,看不到实际发送的 DSL
  • 日志输出混乱,关键信息淹没在噪音中
  • 需要手动复制粘贴,效率低下

插件的价值:

  • ✨ 自动捕获:无需修改代码,自动监控所有 ES 查询
  • ✨ 智能解析:支持 REST Client、cURL、Spring Data 等多种格式
  • ✨ 可视化展示:独立工具窗口,JSON 自动格式化,一目了然

这意味着什么?
你不再需要在茫茫日志中寻找,不再需要手动整理格式。信息主动来找你,而且是以你能理解的方式。


2. 把时间还给真正重要的事 ​

你的痛点:

  • 排查问题时,80% 的时间花在"找到查询语句"上
  • 性能优化时,不知道哪些查询慢,哪些查询频繁
  • 学习 ES 时,看文档和实际应用脱节

插件的价值:

  • ⚡ 实时监控:查询执行时间、HTTP 状态码一目了然
  • ⚡ 智能搜索:关键字搜索、HTTP 方法筛选、时间范围过滤
  • ⚡ 历史记录:自动保存 1000 条记录,随时回溯

这意味着什么?
你可以把精力放在"解决问题"而不是"找到问题"上。时间是最宝贵的资源,这个插件帮你节省的每一分钟,都可以用来创造更大的价值。


3. 从"我不知道"到"我明白了" ​

理查德·沃曼提出的信息架构五大原则之一是:按照用户的理解方式组织信息。

你的痛点:

  • 看到错误码,但不知道具体是什么查询出错
  • 想在 Kibana 中验证查询,但格式转换麻烦
  • 团队协作时,难以分享和讨论具体的查询

插件的价值:

  • 🎨 彩色标识:GET(蓝)、POST(绿)、PUT(橙)、DELETE(红),视觉化区分
  • 🎨 详情面板:点击查看完整信息,包括请求、响应、耗时
  • 🎨 一键复制:支持复制 DSL、生成 Kibana 格式、复制完整信息
  • 🎨 实时更新:新查询自动出现,无需刷新

这意味着什么?
信息不再是冰冷的文本,而是有结构、有层次、可操作的知识。你能快速理解发生了什么,并立即采取行动。


我的设计哲学:给予,而非索取 ​

哈里·马克思说:"成功的秘诀是先给予价值,而不是先索取回报。"

这个插件的设计遵循三个原则:

原则一:非侵入式 ​

  • ❌ 不需要修改你的代码
  • ❌ 不需要添加依赖
  • ❌ 不需要改变你的工作流程
  • ✅ 只需要安装插件,它就在后台默默工作

原则二:性能优先 ​

  • 异步处理,不阻塞 IDE
  • 智能去重,避免信息冗余
  • 容错机制,损坏文件自动恢复
  • 你甚至感觉不到它的存在,直到你需要它

原则三:开箱即用 ​

  • 安装即可使用,无需复杂配置
  • 界面直观,符合 IntelliJ 设计规范
  • 功能实用,每个按钮都有明确的价值

适合谁使用 ​

如果你是后端开发者 ​

  • 调试 Spring Boot + Elasticsearch 应用时,实时查看查询
  • 排查线上问题时,快速定位慢查询
  • 学习 ES DSL 语法时,看看框架是怎么生成查询的

如果你是性能优化工程师 ​

  • 分析查询执行时间,找出性能瓶颈
  • 对比不同查询方式的效率
  • 记录优化前后的查询变化

如果你是技术 Leader ​

  • Code Review 时,查看团队成员写的查询是否合理
  • 制定 ES 使用规范时,基于真实数据做决策
  • 培训新人时,展示实际的查询案例

使用场景示例 ​

场景 1:快速定位慢查询 ​

问题:用户反馈搜索功能很慢

传统方式:
1. 打开日志文件
2. 搜索 "elasticsearch" 关键字
3. 复制 JSON 到编辑器格式化
4. 分析查询语句
5. 找到耗时信息
⏱️ 耗时:5-10 分钟

使用插件:
1. 打开 ES Log Monitor 工具窗口
2. 按执行时间排序
3. 点击慢查询查看详情
⏱️ 耗时:30 秒

场景 2:学习 Spring Data Elasticsearch ​

问题:不知道 @Query 注解生成了什么 DSL

传统方式:
1. 查阅文档
2. 猜测可能的查询
3. 尝试运行
4. 还是不确定
⏱️ 耗时:不确定,可能需要反复尝试

使用插件:
1. 运行你的代码
2. 在工具窗口看到实际的 DSL
3. 复制到 Kibana 验证
4. 理解了!
⏱️ 耗时:1 分钟

场景 3:团队协作讨论 ​

问题:需要和同事讨论某个查询的优化方案

传统方式:
1. 截图日志
2. 或者复制粘贴到聊天工具
3. 格式乱了,重新整理
4. 发送
⏱️ 耗时:3-5 分钟

使用插件:
1. 右键点击查询记录
2. "Copy Full Info"
3. 粘贴到聊天工具
⏱️ 耗时:10 秒

核心功能一览 ​

📊 实时监控 ​

  • 自动捕获所有 ES DSL 查询
  • 支持 REST Client、cURL、Spring Data 等格式
  • 记录执行时间和 HTTP 状态码
  • 非侵入式,无需修改代码

🔍 查询管理 ​

  • 可视化展示,JSON 自动格式化
  • 关键字搜索和多维度过滤
  • 本地持久化,最多 1000 条记录
  • 智能去重,避免信息冗余

🎨 用户体验 ​

  • 彩色标识,HTTP 方法和状态码一目了然
  • 实时开关控制,随时启用/禁用
  • 详情面板,完整信息展示
  • 一键复制,支持 Kibana 格式

💡 技术特色 ​

  • 异步处理,不影响 IDE 性能
  • 容错机制,自动备份和恢复
  • 实时通知,UI 自动更新
  • 符合 IntelliJ 设计规范

开始使用 ​

先在项目里打开 Elasticsearch 日志 ​

如果你的项目本身没有把 ES 请求日志打出来,那么插件也无从解析。
所以在涉及 Elasticsearch 的 Spring Boot 项目里,建议先在 logback-local.xml、logback-spring.xml 或你当前环境使用的 Logback 配置文件中加入下面这段配置。

例如,在项目 /home/shuyixiao/IdeaProjects/torchv_server_langchao/src/main/resources/logback-local.xml 中,就可以这样配置:

xml
<!-- ===== Elasticsearch 日志配置 ===== -->
<!-- Elasticsearch Java Client 请求日志 -->
<logger name="org.elasticsearch.client" level="DEBUG">


</logger>
<!-- Spring Data Elasticsearch 查询日志 -->
<logger name="org.springframework.data.elasticsearch" level="DEBUG">


</logger>
<!-- Elasticsearch RestClient 详细日志 -->
<logger name="org.elasticsearch.client.RestClient" level="DEBUG">


</logger>
<!-- Elasticsearch 请求追踪(最详细) -->
<logger name="tracer" level="TRACE">


</logger>

这段配置的作用可以这样理解:

  • org.elasticsearch.client:用于输出 Elasticsearch Java Client 的请求日志,适合查看应用到底发起了哪些 ES 调用。
  • org.springframework.data.elasticsearch:用于输出 Spring Data Elasticsearch 层面的查询信息,适合排查 Repository、ElasticsearchOperations、注解查询等场景。
  • org.elasticsearch.client.RestClient:用于输出更底层的 RestClient 请求细节,适合定位 HTTP 请求路径、方法、执行过程等问题。
  • tracer:这是最详细的请求追踪日志,通常会把完整请求和响应细节打出来,排查复杂问题时非常有用,但日志量也最大。

这段配置应该放在哪里 ​

推荐把它放在你的业务 logger 后面、</configuration> 前面即可。
以 torchv_server_langchao 这个项目为例,就是放在 logback-local.xml 中现有的:

  • com.torchv
  • org.springframework.web

这些 logger 配置后面,然后保持整个 XML 结构完整。

为什么示例里没有写 appender-ref 也能生效 ​

因为在你给出的示例配置中,根节点已经定义了:

xml
<root level="info">
    <appender-ref ref="STDOUT" />
</root>

这意味着这些 ES logger 即使没有单独配置 appender-ref,默认也会继续向上继承,把日志输出到控制台。
对于插件来说,这通常已经够用了,因为开发时最常见的场景就是直接从运行日志里抓取 ES 请求信息。

如果你希望这些日志不仅输出到控制台,还同时写入日志文件,可以在对应的 logger 中显式加入:

xml
<appender-ref ref="syslog" />

例如:

xml
<logger name="org.elasticsearch.client" level="DEBUG">
    <appender-ref ref="syslog" />
</logger>

这样就可以把 ES 日志同步写入 logs/torchv.log 这类文件中,方便离线排查和历史追溯。

实际使用建议 ​

  • 本地开发环境建议开启这组配置,尤其是 org.elasticsearch.client 和 org.springframework.data.elasticsearch。
  • tracer 级别非常详细,建议只在排查疑难问题时临时开启,不要长期在生产环境使用。
  • 如果你发现日志太多,可以先保留前 2 到 3 个 logger,把 tracer 注释掉。
  • 修改完 Logback 配置后,记得重启应用,否则新的日志级别通常不会立即生效。

配置好之后怎么配合插件使用 ​

  1. 在项目中加入上面的日志配置。
  2. 启动你的 Spring Boot 应用。
  3. 触发一次 ES 查询,比如搜索、聚合、分页查询、Repository 方法调用等。
  4. 打开 IntelliJ IDEA 底部的 ES Log Monitor。
  5. 你就可以看到插件自动捕获并解析出来的 ES 请求记录。

如果插件里没有看到任何内容,优先检查这几项:

  • 当前启动环境是否真的使用了你修改过的 logback-local.xml
  • 日志级别是否已经生效
  • 查询是否真的走了 Elasticsearch
  • 控制台中是否已经出现了 ES 相关日志
  • 插件监控开关是否已经开启

安装 ​

  1. 打开 IntelliJ IDEA
  2. 进入 Settings → Plugins
  3. 搜索 "Elasticsearch Log"
  4. 点击 Install

使用 ​

  1. 运行你的 Spring Boot 应用
  2. 在底部工具栏找到 "ES Log Monitor"
  3. 点击 "Enable Monitoring" 开关
  4. 执行一些 ES 查询
  5. 查看捕获的查询记录

就这么简单!


最后想说的话 ​

我做这个插件,不是为了展示技术有多厉害,而是因为我自己需要它。

我相信,好的工具应该是隐形的——它不应该让你学习新的概念,不应该改变你的工作方式,不应该增加你的负担。它应该像空气一样,你感觉不到它的存在,但它让你的工作变得更轻松。

我也相信,价值应该先于价格——这个插件的每一个功能,都是为了解决真实的问题,为了节省你的时间,为了让你的工作更有成就感。

如果这个插件能帮你节省哪怕 10 分钟,能让你少一次焦虑,能让你多一次"啊哈时刻",那我的目标就达到了。


关于作者 ​

我是舒一笑不秃头,一名热爱编程的开发者。

如果你有任何问题、建议或想法,欢迎随时联系我。我很乐意听到你的反馈。


许可与支持 ​

这是一个付费插件,但我承诺:

  • ✅ 持续更新和维护
  • ✅ 及时响应问题和建议
  • ✅ 不断优化性能和体验
  • ✅ 根据用户反馈添加新功能

你的支持,是我持续改进的动力。


"The goal is to transform data into information, and information into insight."
— Carly Fiorina

让我们一起,把 Elasticsearch 查询从数据变成信息,从信息变成洞察。


🤝 社区交流 ​

💬 加入开发者交流群 ​

欢迎加入 PandaCoder 工具宇宙开发者交流群,与作者和其他开发者一起交流技术、分享经验、反馈问题!我们提供多种交流渠道:

📱 微信交流群 & 💬 QQ交流群 ​

舒一笑不秃头微信
扫码添加微信好友,备注 PandaCoder工具宇宙交流,可以拉你进微信交流群
PandaCoder工具宇宙开发者交流QQ群
扫码加入QQ群,与作者和开发者直接交流

交流群内可以:

  • 💡 获取最新的插件更新和技术动态
  • 🐛 反馈使用问题和改进建议
  • 🔧 交流开发经验和最佳实践
  • 📚 获取技术文档和教程资源
  • 🎯 参与功能讨论和产品规划

📱 关注公众号 ​

舒一笑的架构笔记
扫码关注「舒一笑的架构笔记」,获取最新技术动态和深度架构解析

公众号内可以:

  • 📖 获取独家技术文章和深度解析
  • 🔥 提前了解PandaCoder工具宇宙最新功能和更新计划
  • 💬 与作者一对一交流技术问题
  • 📚 免费获取精品技术文档和学习资料
  • 🎁 参与抽奖活动赢取精美礼品和技术书籍

Elasticsearch Log - 让 ES 查询变得透明可见

🚀 版本更新日志 ​

v2025.7.1 (敬请期待) ​

  • ✅ 优化DSL提取逻辑

v2025.6.1 (2026-01-17) ​

  • ✅ 优化插件许可证到期时间提示
  • ✅ 添加中英文语言显示支持

v2025.5.1 (2025-12-08) ​

  • ✅ 修改日志监听器,避免提前返回以便检查完整curl命令
  • ✅ 新增对包含curl和HTTP响应头的完整TRACE日志识别
  • ✅ 重构缓冲区内容检查逻辑,统一使用bufferContent变量
  • ✅ 引入时间戳解析功能,用于计算请求执行时间
  • ✅ 增强执行时间提取机制,优先通过时间戳差值计算
  • ✅ 添加日志时间戳正则匹配及日期格式化器
  • ✅ 改进JSON结束符检测逻辑,提升解析准确性

v2025.4.1 (2025-12-05) ​

  • ✅ 实现DSL监控状态持久化配置,监控启用状态存储到项目级别设置中
  • ✅ 优化启用DSL监控时为运行中的进程重新附加监听器
  • ✅ 优化许可证到期时间提示信息
  • ✅ 增加插件相关信息介绍

Made with ❤️ by 舒一笑不秃头

💬

评论功能

当前站点为 GitHub Pages 镜像版本,不支持评论功能。

如需发表评论,请访问主域名版本:

🚀 前往 主域名 版本评论
✅ 支持文字评论
✅ 支持图片上传

用代码书写人生 | This site is powered by Netlify

🌙