跳转到页面内容
圆点软件.YUANDIAN SOFTWARE

YUANDIAN / INSIGHTS & IDEAS

日志分级与链路追踪在排查中的落地方式

日志堆得再多,检索不出来也没有价值。统一分级标准、结构化字段和链路标识,才能把排查时间压下来。

专注软件开发 · 连接业务与可能技术分享
日志分级与链路追踪在排查中的落地方式

分级要有明确标准

错误级别留给需要人介入的问题,比如依赖不可用、数据不一致、任务连续失败。日常可自恢复的重试失败不应占用这一级别。

警告级别用于异常但已处理的情况,例如降级生效、缓存回源、重试后成功。这一级别是容量和稳定性的重要信号来源。

信息和调试级别要控制输出量。请求参数全量打印在高并发下会迅速撑爆磁盘,同时把真正有用的信息淹没。

结构化输出的价值

把日志输出成带字段的结构化数据,而不是拼接字符串。字段化的日志才能按用户、单号、版本、接口路径做聚合查询。

必须包含的字段:时间戳、级别、服务名、实例标识、链路标识、请求标识。缺少实例标识时,多副本部署下无法判断问题集中在哪个实例。

异常堆栈单独成字段,不要和消息拼在一起。查询时按异常类型聚合,能快速看出是某一类错误集中爆发还是零散分布。日志字段的命名在同一套系统里要统一,混用缩写和全称会让聚合查询难以编写。

链路标识的传递

入口生成链路标识并写入日志上下文,跨服务调用时通过请求头传递。下游若没有透传,链路就会断,追踪图会变成一片孤立节点。

异步任务和消息消费同样要带上标识,否则从接口追踪到消息队列就断了。生产者在消息头里带,消费者从消息头取出放进上下文。

浏览器到服务端这一段也需要标识。页面请求携带前端生成的标识,服务端记录进日志,用户反馈问题时可以直接按这个标识检索。

采样与成本控制

全量采集在高流量下成本很高。常见的做法是错误全部采集,正常请求按比例采样,并对特定用户或特定标识强制采集。

采样要按链路整体采样,而不是每个服务独立随机。各服务独立采样会导致链路残缺,追踪页面里只剩零散片段。

日志保留周期按用途区分:热数据保留短一些用于实时查询,归档存储留长一些用于审计和追溯。统一长周期保留既贵又慢。

指标联动与排查模板

只靠日志排查是被动的。把关键错误计数、慢请求数量、重试次数提取成指标并设置告警,才能在用户报障前发现异常。告警阈值基于历史基线而不是拍脑袋,带周期性的业务有明显波峰波谷,固定阈值会在波峰时误报。

告警要能直达上下文,比如附上最近几条错误日志和追踪链接。只给一句失败,等于把定位工作全部推给值班的人。

常见问题整理成检索语句模板,比如按单号查全链路、按时间段查某接口的失败分布。有模板时,值班的人不需要临场构思查询。

复盘时把定位过程中用到的查询沉淀下来,逐步形成可复用的排查手册。日志体系的价值不只在于存了什么,更在于能不能快速取出来。

日志可观测性

LET’S BUILD TOGETHER

让思考,成为下一步行动。

把业务场景与初步想法告诉我们,一起找到合适的实现方式。