背景:
我有一个部署在AWS上的EKS集群,在fluent namespace里部署了fluent-operator (chart的targetRevision是2.3,fluentbit的image用的是kubesphere/fluent-bit:v2.1.8)。
设置方面,除了将默认的containerRuntime从docker修改成containerd外,都保持了默认。
之后,我创建了另一个namespace叫myproject,尝试使用namespace级别的filter,output来处理集群的日志。
我想要达到的目的:
1. 可以在namespace级别正常使用fluentbit内置的这些parsers。
https://github.com/fluent/fluent-operator/blob/release-1.1/conf/parsers.conf
2. 自定义的parsers可以被正常加载和使用
遇到的问题:
当我尝试在自己的namespace的里面使用fluentbit内置的json parser的时候,会提示parser不存在。
这里有个小疑问:我可以理解在namespace创建一个parser,会在parser名字后面加一个GUID,但是报错的日志里面提到的parser名字,GUID重复出现了4次,是为什么?
错误信息:
[2023/09/12 08:10:31] [error] [filter:parser:parser.14] requested parser 'json-99f5fefc6147c28dcfdfad44c44c8105-99f5fefc6147c28dcfdfad44c44c8105-99f5fefc6147c28dcfdfad44c44c8105-99f5fefc6147c28dcfdfad44c44c8105' not found
[2023/09/12 08:10:31] [error] [filter:parser:parser.14] Invalid 'parser'
[2023/09/12 08:10:31] [error] Failed initialize filter parser.14
[2023/09/12 08:10:31] [error] [engine] filter initialization failed
当我尝试用Parser的CRD在我的myproject namespace下面创建一个自定义的log-parser,依然会提示这个parser不存在(和上面的错误信息类似,只是parser的名字变了而已)。同时,发现挂载到每个fluent-bit daemonset里面的secret的parsers.conf文件的内容里面,只有我自定义的parser,内置的parsers在parsers.conf里面找不到。
我的yaml代码
apiVersion: fluentbit.fluent.io/v1alpha2
kind: FluentBitConfig
metadata:
name: my-proj-config
labels:
app.kubernetes.io/name: fluent-bit
argocd.argoproj.io/instance: fluent-operator
spec:
filterSelector:
matchLabels:
project: my-proj
outputSelector:
matchLabels:
project: my-proj
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: Filter
metadata:
name: my-proj-filter
labels:
project: my-proj
spec:
match: kube.*
filters:
- kubernetes:
labels: true
- grep:
regex: $kubernetes['labels']['project'] my-proj
- grep:
regex: $kubernetes['labels']['service'] my-proj-serv
# Try to use the fluentbit built-in json parser to process the log
# Convert it from JSON string to JSON object
- parser:
keyName: log
parser: json
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: Output
metadata:
name: my-proj-output-debug
labels:
project: my-proj
spec:
matchRegex: kube.*
stdout:
format: json