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