Mercer-Lee的空间

vuePress-theme-reco Mercer-Lee的空间    2018 - 2026
Mercer-Lee的空间 Mercer-Lee的空间

Choose mode

  • dark
  • auto
  • light
TimeLine
分类
  • 数据结构和算法
  • 后端
  • 运维
  • 前端
  • 语言
  • 工具
标签
我的GitHub (opens new window)
author-avatar

Mercer-Lee的空间

28

文章

32

标签

TimeLine
分类
  • 数据结构和算法
  • 后端
  • 运维
  • 前端
  • 语言
  • 工具
标签
我的GitHub (opens new window)
  • 这一年用 AI 查日志后,我写了一个 Skill

    • 为什么会想到写这个 Skill
      • 直接让 AI 看日志的问题
        • 我想沉淀的不是脚本,而是排查方法
          • 一个典型的排查链路
            • Skill 里我特别在意的几个点
              • 目前它能做什么
                • 写这个 Skill 后的一点感受
                  • 结语

                  这一年用 AI 查日志后,我写了一个 Skill

                  vuePress-theme-reco Mercer-Lee的空间    2018 - 2026

                  这一年用 AI 查日志后,我写了一个 Skill


                  Mercer-Lee的空间 2026-05-23 AI 日志 Skill Node

                  最近这一年,我在工作里越来越频繁地使用 AI 来辅助查日志和定位线上问题。

                  一开始我对这件事的想法很简单:既然 AI 能读代码、能总结文本,那我把报错日志贴给它,它是不是也能帮我快速判断问题出在哪里?

                  实际用下来,答案是:能,但不能直接这么用。

                  如果只是把一大段日志复制给 AI,它确实能总结出一些东西,也能帮你从里面挑出比较明显的报错。但是线上问题排查并不只是“看见一条 ERROR 日志”这么简单,更多时候真正麻烦的是:这条 ERROR 到底是不是根因?这个错误发生在哪个服务?它是不是下游服务返回的二次包装?用户给的 taskId 和日志里的 requestId 怎么关联?一个失败任务背后到底经过了多少个系统?

                  这些问题,单靠把日志丢给 AI 是解决不了的。

                  所以最近我把这一年用 AI 查日志的经验整理了一下,写成了一个 Skill,项目地址在这里:Mercer-Lee/loghound (opens new window)。

                  # 为什么会想到写这个 Skill

                  以前排查线上问题,大概是这样的流程:

                  1. 客服或者同事丢过来一个 taskId、uid、requestId,或者更极端一点,只有一个用户截图。
                  2. 打开日志平台,凭经验判断应该先查哪个服务。
                  3. 用关键词搜一遍,看看有没有 ERROR 或 WARN。
                  4. 如果入口服务只是提示“下游调用失败”,再去找下游服务的日志。
                  5. 如果下游又调用了另一个服务,那就继续追。
                  6. 最后把能看懂的部分整理成一段话,告诉对方是什么原因、能不能重试、是不是用户素材问题、是否需要技术介入。

                  这个过程其实很依赖经验。

                  比如同样是任务失败,有的错误是入口服务参数校验失败,有的是异步队列执行失败,有的是渲染服务失败,有的是文件下载失败,有的是第三方回调失败。日志平台里看到的第一条错误,很多时候只是表象,不是最终原因。

                  而且现在很多项目并不是只在一个云服务上。有些日志在阿里云 SLS,有些在腾讯云 CLS,有些在火山引擎 TLS,还有一些工作流类系统只能通过 Webhook 或接口查状态。再加上有时候还要去 MongoDB 或 SQL 里反查用户、任务、素材记录,整个链路会变得很碎。

                  人当然可以慢慢查,但每次都这样查,其实挺累的。

                  AI 在这里很有价值,但它需要一个稳定的工作台,而不是每次临时复制粘贴一坨日志。

                  # 直接让 AI 看日志的问题

                  刚开始用 AI 查日志的时候,我踩过几个很典型的坑。

                  第一个问题是,AI 很容易把“现象”当成“原因”。

                  比如入口服务里有一条日志写着“任务执行失败”,AI 可能会直接总结说任务失败的原因就是执行失败。但这句话对排查没有太大价值,因为它只是告诉你失败了,并没有告诉你为什么失败。

                  真正有用的线索可能在下游服务里,例如下载素材 403、文件格式不支持、回调地址超时、某个参数解析失败,或者某个第三方接口返回了明确错误。只有追到这一层,结论才比较可靠。

                  第二个问题是,日志太多会把上下文冲散。

                  一次线上排查里,经常会搜出几十条甚至上百条日志。如果全部丢给 AI,它会消耗很多 token,而且很容易被重复日志、INFO 流程日志、无关 WARN 干扰。最后输出看起来很丰富,但不一定抓到了最关键的那条。

                  第三个问题是,AI 不知道我们的系统拓扑。

                  人查日志的时候,脑子里其实有一张隐形地图:这个服务负责入口,那个服务负责队列,某个 taskId 前缀代表某类任务,某个错误一般要去另一个服务继续追。如果不把这些经验告诉 AI,它只能在单次输入里猜。

                  所以我后来意识到,问题的关键不是“让 AI 查日志”,而是要把排查经验结构化,让 AI 按一套固定流程工作。

                  # 我想沉淀的不是脚本,而是排查方法

                  loghound 这个项目表面上看是一个日志查询工具,但我真正想沉淀的是排查方法。

                  我把它分成了两层:

                  • 脚本层:负责查询日志、查询数据库、标准化结果、提取错误信号、聚类去重。
                  • 分析层:负责判断问题类型、沿着服务链路追踪、区分现象和根因、生成面向内部或客户的结论。

                  脚本层解决的是“证据怎么拿”的问题。

                  它支持阿里云 SLS、腾讯云 CLS、火山引擎 TLS、Webhook 工作流引擎,也支持从 MongoDB 和 SQL 里按用户 ID、任务 ID 之类的信息反查记录。不同平台的查询方式不一样,返回结构也不一样,所以需要先统一成 AI 更容易理解的格式。

                  分析层解决的是“拿到证据之后怎么判断”的问题。

                  这一层就是 Skill 的价值。它会要求 AI 先判断用户反馈属于哪类问题:是故障排查、质量异常、状态查询、模糊反馈、批量问题,还是审计类问题。不同问题的排查方式是不一样的,不能所有问题都按“找 ERROR”处理。

                  然后它会按照标识符优先级来查:

                  traceId / requestId > taskId > uid / userId > 用户侧 ID
                  

                  如果入口服务查不到,或者日志和用户描述不一致,就会尝试用 uid 反查最近一段时间的异常;如果日志里出现下游调用失败,就继续提取下游的 taskId、traceId 或 requestId,再根据服务拓扑去下一跳服务查。

                  这套流程听起来不复杂,但它解决了一个很重要的问题:AI 不再是“看一眼日志然后猜”,而是被约束在一个排查流程里做推理。

                  # 一个典型的排查链路

                  假设用户反馈一个任务失败,只给了一个 taskId。

                  第一步,不应该马上下结论,而是先确认问题类型。如果用户只是问“这个任务现在怎么样了”,那它可能只是状态查询,不需要生成事故结论。如果用户明确说“任务失败了”或者“结果异常”,才进入故障排查或质量问题排查。

                  第二步,用 taskId 去入口项目里查 ERROR 和 WARN。这里查到的可能是任务失败,也可能只是收到任务、创建任务、调用下游失败。

                  第三步,如果入口项目的日志里出现了下游服务的任务 ID 或 requestId,就继续往下游查。这个时候服务拓扑就很重要,因为 AI 需要知道当前服务调用了哪些服务,每个服务大概负责什么。

                  第四步,追到某个服务出现明确硬错误为止。比如下载文件失败、参数格式错误、网络超时、第三方接口返回失败、媒体解析失败等。这类日志通常比“任务执行失败”更接近根因。

                  第五步,把结论整理成固定格式:

                  • 问题结论
                  • 关键证据
                  • 影响范围
                  • 处理建议
                  • 客服或用户回复话术

                  这样做的好处是,排查过程和输出口径都会稳定很多。哪怕换一个人来查,或者隔几天再查类似问题,也不会完全依赖当时的手感。

                  # Skill 里我特别在意的几个点

                  第一个点是,必须区分“状态查询”和“故障排查”。

                  很多时候别人只是想问任务有没有完成,并不是要你分析事故。如果这时 AI 上来就开始写根因、责任服务、客户话术,反而会显得很奇怪。所以 loghound 在流程最前面就要求先判断问题类型。

                  第二个点是,查询日志只是取证,不是结论。

                  脚本返回的结果只能说明某个时间点查到了哪些日志,不能直接当成最终根因。AI 必须结合上下游链路、错误位置、日志级别、失败阶段来判断。

                  第三个点是,不能停在业务包装错误上。

                  很多系统都会把下游错误包装成统一的业务错误,例如“任务失败”“生成失败”“处理异常”。这些日志虽然是 ERROR,但它们不一定是根因。只要日志里还有下游线索,就应该继续追。

                  第四个点是,输出要能直接给人用。

                  排查的最后一步不是展示一堆日志,而是要告诉对方:这个问题是什么原因、有没有用户侧因素、是否可以重试、是否需要研发处理。尤其是给客服同学看的结论,不能写得像堆栈分析报告。

                  # 目前它能做什么

                  现在 loghound 大概能覆盖这些场景:

                  • 从多个云日志平台查询同一个 taskId 或 requestId。
                  • 根据项目配置识别不同服务的日志源和环境。
                  • 对日志进行标准化、聚类和错误信号提取。
                  • 根据服务拓扑追踪下游服务。
                  • 通过 MongoDB 或 SQL 把用户侧 ID 转成内部 ID。
                  • 查询 Webhook 类工作流任务的状态和错误详情。
                  • 让 AI 按固定 Skill 流程生成根因分析和回复话术。

                  它不是一个开箱即用的万能事故机器人。因为每个公司的服务拓扑、日志格式、任务 ID 规则都不一样,所以它一定需要配置项目、配置日志源、配置调用关系。

                  但这也是我觉得它有价值的地方。

                  如果一个工具完全不理解你的系统,它最多只能做通用日志总结;只有把项目拓扑、日志规则、排查经验都喂进去,它才有机会变成真正能参与排查的助手。

                  # 写这个 Skill 后的一点感受

                  过去我一直觉得,查日志是很典型的经验活。

                  有经验的人看到一个错误,会知道这条日志要不要信、要不要继续往下游追、这个 ID 应该去哪个库里反查、什么样的错误可以直接回复用户,什么样的错误必须拉研发继续看。

                  AI 出现之后,我对这件事的理解有一点变化。

                  经验活并不是不能被 AI 辅助,关键是要把经验拆出来。不要只告诉 AI “帮我看看这个日志”,而是要告诉它:

                  • 先判断问题类型。
                  • 先找最强标识符。
                  • 查不到时怎么降级。
                  • 看到下游失败时继续追。
                  • 不要把包装错误当根因。
                  • 输出结论必须带证据。

                  这些规则一旦沉淀下来,AI 的表现会稳定很多。

                  所以 loghound 对我来说,不只是一个工具,也算是这一年使用 AI 排查线上问题之后的一次整理。它把很多原本藏在脑子里的判断路径写成了 Skill,让 AI 不只是“会读日志”,而是尽量按照一个工程师真正排查问题的方式去工作。

                  # 结语

                  这一年用 AI 查日志,我最大的感受是:AI 不会天然懂你的系统,也不会天然知道什么是根因。

                  但如果我们愿意把系统拓扑、日志查询方式、错误判断规则和输出格式都整理出来,它就能承担掉很多重复、琐碎、容易疲劳的工作。

                  写 loghound 的过程,也像是把自己查日志时的习惯重新审视了一遍。哪些判断是有证据的,哪些只是经验猜测;哪些流程可以自动化,哪些地方必须保留人工确认。这些东西整理清楚之后,工具本身反而只是结果。

                  后面如果继续迭代,我希望它能在更多日志平台、更多项目拓扑和更多真实事故场景里继续打磨。毕竟线上问题不会因为我们不想看日志就消失,但至少,我们可以让查日志这件事变得没那么痛苦一点。