日志解析

采集到日志之后,下一步是让日志变得可理解。原始日志往往是这样的:

2026-03-31 02:14:08 ERROR pay callback failed order=882317 cost=2300ms err=timeout

人能读懂,但系统很难稳定地统计和关联。日志解析的目标是把它变成结构化事件:

配置要点

  • 配置表达的是环境差异和运行参数,不是业务规则本身。

统一字段

结构化日志最重要的是统一字段,否则每个团队各写各的,平台无法聚合。基础字段通常包括:

字段含义
time事件发生时间
service服务名
instance实例或容器 ID
envprod、staging 等环境
level日志级别
trace_id请求链路 ID
message原始消息

业务字段可以扩展,但要遵循命名规范,例如 order_iduser_idtenant_id

解析位置

日志解析有三种位置:

  1. 应用内结构化输出:应用直接输出 JSON,最准确,但需要业务改造。
  2. Agent 侧解析:靠正则或解析规则处理文本,灵活但容易受格式变化影响。
  3. 服务端解析:集中处理,便于统一升级,但会增加后端计算压力。

生产系统通常组合使用:核心服务尽量输出结构化 JSON,历史服务先用解析规则兼容。

时间与乱序

日志系统必须区分两个时间:

  • 事件时间:日志在业务中发生的时间。
  • 采集时间:日志进入平台的时间。

排障和指标计算通常应该使用事件时间,否则网络延迟或 Agent 积压会让时间线错乱。但事件时间也可能受机器时钟影响,所以平台需要记录采集时间,用于判断延迟和异常。

脱敏与过滤

解析阶段也是治理阶段。日志里可能包含手机号、邮箱、身份证、token、请求体等敏感信息。平台应该提供脱敏规则:

  • token、密钥、密码直接替换。
  • 手机号、邮箱保留部分字符。
  • 超长字段截断,避免单条日志撑爆索引。
  • 明确禁止记录完整银行卡、身份证等高敏数据。

日志解析完成后,日志才真正变成可查询、可聚合、可关联的数据。下一步我们会从这些事件中提炼指标。