regex
注意
Promtail 已被弃用,并将于 2026 年 2 月 28 日进入长期支持 (LTS)。Promtail 将于 2026 年 3 月 2 日达到生命周期结束 (EOL)。您可以在此处找到迁移资源。
regex stage 是一个解析 stage,它使用正则表达式解析日志行。正则表达式中的命名捕获组支持将数据添加到 extracted 映射中。
Schema
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
- 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
- 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



