菜单
开源

regex

注意

Promtail 已被弃用,并将于 2026 年 2 月 28 日进入长期支持 (LTS)。Promtail 将于 2026 年 3 月 2 日达到生命周期结束 (EOL)。您可以在此处找到迁移资源。

regex stage 是一个解析 stage,它使用正则表达式解析日志行。正则表达式中的命名捕获组支持将数据添加到 extracted 映射中。

Schema

yaml
regex:
  # The RE2 regular expression. Each capture group must be named.
  expression: <string>

  # Name from extracted data to parse. If empty, uses the log message.
  [source: <string>]

expression 需要是一个 Go RE2 正则表达式字符串。每个捕获组 (re) 都将设置到 extracted 映射中,每个捕获组必须命名:(?P<name>re)。捕获组的名称将用作 extracted 映射中的键。

由于 YAML 处理双引号字符串中反斜杠的方式,请注意,使用双引号时,正则表达式中的所有反斜杠都必须转义。例如,以下都是有效的

  • expression: \w*
  • expression: '\w*'
  • expression: "\\w*"

但这些不是有效的

  • expression: \\w* (仅在使用双引号时转义反斜杠)
  • expression: '\\w*' (仅在使用双引号时转义反斜杠)
  • expression: "\w*" (反斜杠必须转义)

如果您运行 Promtail 时带有 --config.expand-env=true 标志,配置将通过 envsubst 运行,它会将双反斜杠替换为单反斜杠。因此,当使用 expand-env=true 时,您需要为每个单反斜杠使用双反斜杠。例如

  • expression: '\w*' 必须是 expression: '\\w*'
  • expression: "\\w*" 必须是 expression: "\\\\w*"

示例

不带 source

给定 pipeline

yaml
- regex:
    expression: "^(?s)(?P<time>\\S+?) (?P<stream>stdout|stderr) (?P<flags>\\S+?) (?P<content>.*)$"

以及日志行

2019-01-01T01:00:00.000000001Z stderr P i'm a log message!

以下键值对将被添加到 extracted 映射中

  • time: 2019-01-01T01:00:00.000000001Z,
  • stream: stderr,
  • flags: P,
  • content: i'm a log message

source

给定 pipeline

yaml
- json:
    expressions:
      time:
- regex:
    expression: "^(?P<year>\\d+)"
    source:     "time"

以及日志行

{"time":"2019-01-01T01:00:00.000000001Z"}

第一个 stage 将添加以下键值对到 extracted 映射中

  • time: 2019-01-01T01:00:00.000000001Z

然后 regex stage 将解析 extracted 映射中的 time 值,并将以下键值对追加回 extracted 映射中

  • year: 2019