首页/云/可观测性速查/Promtail Pipeline:解析与标签加工
日志平台52 条

Promtail Pipeline:解析与标签加工

pipeline_stages 按序处理每一行:多行合并 → 正则解析 → 打标签 → 时间戳识别;把解析留在采集端可减少重复加工。

可观测性速查云更新于 2026-10-13

Promtail Pipeline 是什么

Pipeline 是 Promtail 的加工流水线:每读到一行日志,就按 stages 定义的顺序依次处理——先做多行合并,再用正则解析字段,把低基数字段提升为标签,最后从正文里识别时间戳。把解析放在采集端的好处是统一:不同应用按同一套规则输出结构化日志,查询侧只需要按标签筛选与取值,不必每条查询都重写解析表达式。

基本信息

适用平台Promtail 2.x / 3.x,属于 Loki 生态的采集代理
配置位置scrape_configs 下的 pipeline_stages
执行顺序严格按配置顺序,前一个阶段的输出是后一个的输入
常用阶段multiline、regex、json、labels、timestamp、drop

典型使用场景

  • 多行合并:Java 堆栈先合并成一条事件再解析
  • 结构化解析:从文本行提取级别、模块、耗时等字段
  • 标签提升:把低基数字段提为标签,让查询能按它筛选
  • 时间戳识别:用日志内部时间替代采集时间
  • 噪声清理:按条件丢弃健康检查与调试日志,降低存储成本

阶段配置示例

阶段配置示例
pipeline_stages:
  - multiline:                       # 第一步:先合并多行
      firstline: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      max_wait_time: 3s
  - regex:                           # 第二步:命名捕获提取字段
      expression: '^(?P<ts>[^ ]+) (?P<level>[A-Z]+) (?P<msg>.*)$'
  - labels:                          # 第三步:只提升低基数字段
      level:
  - timestamp:                       # 第四步:用日志内部时间
      source: ts
      format: RFC3339
  - drop:                            # 可选:丢掉健康检查噪声
      expression: '.*healthz.*'

常用阶段与作用

阶段作用使用要点
multiline合并多行日志要放在解析之前
regex命名捕获提取字段正则写错会静默解析失败
labels把字段提升为标签只提升低基数字段
timestamp识别日志内时间解析失败时回退到采集时间
drop按条件丢弃日志用于减少无价值噪声
labels 阶段只提升服务、级别这类低基数字段:把耗时、用户标识等高基数值提升为标签会制造海量流,直接导致写入与查询双双恶化。
数值字段留给查询期处理:解析出的耗时可以在查询里用 unwrap 参与统计,不必在采集端就变成标签。

易错点

  • 把高基数提取字段(如请求标识)提升为标签会制造海量流,是 Loki 场景下最常见的容量事故
  • timestamp 阶段解析失败时静默回退到采集时间,时间线偏移难以察觉,应配合解析失败计数观察
  • 阶段顺序写反(先解析后合并)会让多行日志的每行各自解析,字段大量为空
  • 正则表达式与真实日志格式不匹配时没有显式报错,字段缺失只能从查询结果为空发现

数据来源与参考

  • Grafana 官方文档 · Promtail pipeline stages
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌