通配符`Match`不适用于在标签中使用绝对文件路径的Fluentbit配置

问题描述 投票:0回答:1

我们有一个 FluentBit 代理在 EKS 集群上运行,使用

tail
输入来获取某些日志。

[INPUT]
    Name                tail
    Tag                 kube.*
    Path                /var/log/containers/*.log
    DB                  /var/log/containers/log.db
    multiline.parser    cri
    Skip_Long_Lines     Off
    Refresh_Interval    10
    Mem_Buf_Limit       200MB

我需要映射一些字段以更符合 Elastic Common Schema,因为我们将日志输出到 Elastic。我们有一个问题

error
字段是一个字符串,而它需要采用
error: { message: <value> }
格式。所以我有这些过滤器:

# Fix aws-load-balancer-controller logs which output `error` as a string
[FILTER]
    Name                modify
    Match               kube./var/log/containers/aws-load-balancer-controller-*
    Rename              error error_message
[FILTER]
    Name                nest
    Match               kube./var/log/containers/aws-load-balancer-controller-*
    Operation           nest
    Wildcard            error_message
    Nest_under          error
    Remove_prefix       error_

我已确认正在处理的文件位于该文件路径,但我没有看到这些转换正在应用。

我做错了什么?

fluent-bit
1个回答
0
投票

我自己找到了答案并想分享。 Fluentbit 中的

tail
输入文档 说:

请注意,支持“标签扩展”:如果标签包含星号(*),则该星号将替换为受监控文件的绝对路径

他们没有说,至少在

tail
的文档中没有说的是,受监控文件的绝对路径将其
/
字符替换为
.
字符。您必须按照引用的 Kubernetes 文档 才能找到此旁注:

请注意,斜线已替换为点。

有了这些知识,就可以替换

Match

# Fix aws-load-balancer-controller logs which output `error` as a string
[FILTER]
    Name                modify
    Match               kube.var.log.containers.aws-load-balancer-controller-*
    Rename              error error_message
[FILTER]
    Name                nest
    Match               kube.var.log.containers.aws-load-balancer-controller-*
    Operation           nest
    Wildcard            error_message
    Nest_under          error
    Remove_prefix       error_
© www.soinside.com 2019 - 2024. All rights reserved.