最近客户端给我发来一条日志,说服务端报错了。
但那条日志里只有“报错了”,没有完整的服务端错误信息,也没有 requestId。结果一个本来几分钟就能定位的问题,我硬是查了很久,最后才发现根因不是代码,而是某个服务根本没发布。
以前我排查这类问题其实很快。因为客户端会把服务端返回的错误信息完整带回来,尤其是 requestId。有了这个 ID,我几乎可以直接去服务端日志里定位到那一次请求。
但这次没有,我只能根据用户名、时间窗口、接口路径、操作类型这些外围信息去反查,效率一下就掉下来了。
这件事让我重新意识到:很多排障效率,不是由“系统有没有能力”决定的,而是由“链路有没有把关键信息交到人手里”决定的。
问题不是没有 requestId,而是没人把它展示出来
很多时候,团队会下意识觉得“客户端没有打印 requestId”只是一个小问题。
但对排障来说,这根本不是小问题。
没有 requestId 的时候,你就只能靠各种旁路信息去猜:
- 哪个用户触发的
- 大概是什么时间发生的
- 调的是哪个接口
- 是不是同一批请求里的某一个
这种排查方式不是不能用,但非常慢,而且很容易查偏。尤其是线上并发一高,日志一多,定位成本会一下子放大。
更关键的是,这类问题经常不被当成问题。因为系统“还能用”,接口“也正常返回”,所以没人专门排期去修。但真正干活的人会被这种小缺口持续消耗时间。
我设计的 hono-vite-admin,在这条链路上就比较完整
我自己设计的 hono-vite-admin 在这条链路上就考虑得比较完整。
服务端会统一生成 requestId。如果请求报错,错误响应 body 里会直接带上 requestId。同时它还会放到响应 header 的 X-Request-ID 里返回。
这有两个直接好处:
- 报错时,前端只要把错误信息打出来,就能顺手把
requestId展示给排障的人 - 即使请求没有报错,只是“慢”,也可以通过响应 header 里的
X-Request-ID去服务端日志里反查整条请求链路
这才是一条真正有用的排障链路。
很多系统的问题不是没有日志,不是没有监控,也不是后端没有埋字段,而是这些信息最后没有穿透到最需要它的人手里。
工程效率经常死在这种小细节上
这次让我很有感触的一点是,真正浪费我时间的,并不是那个“没发布的服务”本身,而是排障信息没有闭环。
如果客户端当时能把服务端返回的错误信息和 requestId 一起带出来,我基本上几分钟就能定位。结果现在只能凭一些模糊属性去搜日志,效率自然差很多。
这类细节平时很少有人在意,因为它看起来不算“大需求”,也不会直接影响主流程。但工程效率恰恰就是被这些“没人管的小地方”一点点吃掉的。
说实话,我在公司里经常能感受到这种随意:事情能跑就行,细节没人盯,协作成本也没人算。
这也是为什么很多开源项目反而会给我更好的印象。它们不一定功能更多,但在契约、日志、错误信息、文档和调试体验这些地方,往往更认真。
AI 时代下,工程师至少要有 full-stack 视角
这次我最大的感受不是“前端应该补一下”,而是如果我自己对前后端都足够熟,这种问题本来就应该被顺手消灭掉。
以前前后端分工很细,很多问题会卡在边界上:
- 后端说接口已经返回了
- 前端说页面只是按设计展示
- 测试说功能能用
最后没有人对“这条链路是否真的方便排障”负责。
但在 AI 时代,这种边界正在快速变薄。
现在很多时候,AI 可以直接读后端代码,理解错误结构、header 设计、OpenAPI schema,再顺手把前端调用和展示补齐。以前要跨几个角色沟通的事情,现在一个人加上 AI 就能直接做完。
所以我现在越来越觉得,工程师至少要有 full-stack 视角。未必要每一层都做到专家级,但你得能看懂整条链路,知道问题卡在哪一层,也能把关键的小口子补上。
接口文档不会消失,但二手文档的价值在下降
我现在还有一个越来越强烈的感觉:那种写完就过时、只给人看的二手接口文档,价值会越来越低。
因为 AI 直接读代码、读 schema、读类型定义,很多信息它比人翻 wiki 还快。
但这不代表文档不重要。相反,OpenAPI 这种可以作为一手协议来源的文档会更重要。因为它不只是给人看,还能生成类型、校验请求响应、约束前后端契约。
像 requestId 这种字段,只有它同时存在于后端实现、响应 body、响应 header、OpenAPI schema 和前端展示里,这件事才算真的做完。
只存在于后端代码里,不算。
总结
这次问题最后的根因其实很简单:某个服务没发布。
但真正拖慢排障的,不是这个根因本身,而是客户端没有把本来已经存在的 requestId 展示出来。
所以我现在越来越认同一件事:
不是所有效率问题都要靠更复杂的架构解决。很多时候,提升协作效率的关键,就是把那些已经存在但没有打通的工程细节真正闭环。
而在 AI 时代,工程师也确实越来越需要 full-stack 视角。因为你不再只是写某一层的代码,你还得对整条链路的可观测性、可排障性和协作效率负责。