我们有一个 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_
我已确认正在处理的文件位于该文件路径,但我没有看到这些转换正在应用。
我做错了什么?
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_