pack
注意
Promtail 已被弃用,目前处于长期支持 (LTS) 阶段,支持至 2026 年 2 月 28 日。Promtail 将于 2026 年 3 月 2 日终止生命周期 (EOL)。您可以在此处找到迁移资源。
pack
阶段是一个转换阶段,允许您通过将日志行和标签打包到 JSON 对象中,从而将提取的值和标签嵌入到日志行中。
例如,如果您想删除 labels container
和 pod
但仍保留其值,可以使用此阶段创建以下输出
{
"container": "myapp",
"pod": "pod-3223f",
"_entry": "original log message"
}
原始消息将存储在 _entry
键下。
如果您想保留一些 label 或其他 metadata,但它们不适合作为 label(对查询用处不大或基数过高),则此阶段很有用
Loki 的查询功能使您能够轻松访问这些数据,并在查询时对其进行过滤/聚合。
pack 阶段 Schema
pack:
# Name from extracted data and/or line labels
# Labels provided here are automatically removed from the output labels.
labels:
- [<string>]
# If the resulting log line should use any existing timestamp or use time.Now() when the line was processed.
# To avoid out-of-order issues with Loki, when combining several log streams (separate source files) into one
# you will want to set a new timestamp on the log line, `ingest_timestamp: true`
# If you are not combining multiple source files or you know your log lines won't have interlaced timestamps
# you can set this value to false.
[ingest_timestamp: <bool> | default = true]
示例
删除 container label 并将其嵌入到日志行中 (Kubernetes pods 可能有多个 container)
pack:
labels:
- container
这将创建一条日志行
{
"container": "myapp",
"_entry": "original log message"
}
Loki 2.2 还包含一个新的unpack
解析器,用于与 pack 阶段配合使用。
例如
{cluster="us-central1", job="myjob"} | unpack
将自动解包嵌入的 label 和日志行,并自动用原始日志行替换日志行。
更多示例
使用打包的 labels 进行过滤
{cluster="us-central1", job="myjob"} | unpack | container="myapp"
如果您的原始消息是 json 格式,您甚至可以使用 json
解析器两次
{cluster="us-central1", job="myjob"} | unpack | container="myapp" | json | val_from_original_log_json="foo"
或任何其他解析器
{cluster="us-central1", job="myjob"} | unpack | container="myapp" | logfmt | val_from_original_log_json="foo"