日志与监控
本节定位
很多 LLM 应用本地 Demo 跑起来都不错,但一到线上就会暴露一个问题:
出了问题,你根本不知道是哪里坏了。
日志与监控的价值,不在“多记点东西”,而在:
让系统出问题时,你有办法定位、解释、回放、修复。
学习目标
- 理解日志、指标、追踪三者分别解决什么问题
- 学会设计结构化日志字段
- 理解 LLM 系统里最值得监控的指标有哪些
- 看懂一个最小日志 + 监控示例
先建立一张地图
日志与监控更适合按“发生了什么 -> 整体表现怎样 -> 单条请求经历了什么”来理解:
所以这节真正想解决的是:
- 出问题时你到底先看哪一层
- 为什么日志、指标、trace 缺一块都会很难排障
一、为什么这件事特别重要?
1.1 LLM 系统的故障比普通接口更隐蔽
普通接口错误通常比较直接:
- 500
- 超时
- 参数错
而 LLM 系统还会有这些“软故障”:
- 回答变差
- 检索飘了
- token 成本暴涨
- 只在某些场景失误
所以如果你没有观测能力,系统经常会变成:
看起来还活着,但其实已经坏了一半。
1.2 日志与监控到底在解决什么?
可以先粗略分三层:
- 日志:发生了什么
- 指标:发生得多不多、快不快、贵不贵
- 追踪:一条请求完整走了哪些步骤
1.3 一个更适合新人的总类比
你可以把可观测性理解成:
- 给系统装仪表盘、行车记录仪和维修日志
没有这些东西时,系统坏了你只能说:
- 好像有点不对
有了之后你才可能知道:
- 哪里开始异常
- 是偶发还是持续
- 是单条请求的问题,还是整个系统的问题
二、先看日志:最基础也最常被写坏
2.1 什么叫“结构化日志”?
相比只打一行字符串:
print("request received")
更有价值的是记录结构化字段:
- request_id
- user_id
- stage
- latency_ms
- model_name