有没有一种方法可以排除某些特定名称空间?我想排除某些命名空间,以使流利的位不会将在这些命名空间中创建的所有日志转发给ELK。
除了向该命名空间中的每个pod添加注释之外,还有其他方法吗?我知道您可以通过kubectl更新名称空间中的所有pod注释。
kubectl注释pods --namespace = pks-system --all fluentbit.io/exclude='true'
答案 0 :(得分:1)
我认为以下输入插件配置可以做到这一点:
[INPUT]
Name tail
Path /var/log/containers/*.log
Exclude_Path /var/log/containers/*_<myappnamespace>_*.log
Tag kube.infra.<namespace_name>.<pod_name>.<container_name>
Tag_Regex (?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-
Parser cri
DB /var/log/flb_kube_infra.db
Mem_Buf_Limit 500KB
Skip_Long_Lines On
Refresh_Interval 10
在这里找到它:https://github.com/fluent/fluent-bit/issues/758
Exclude_Path
属性定义将忽略其日志的名称空间的名称。
答案 1 :(得分:0)
根据官方Fluent Bit
文档,目前,它实际上是请求日志处理器跳过某些Pod中的日志的唯一方法。我搜索了一下,发现除了this片段之外什么都没有。
除此之外,他们的GitHub项目上甚至提出了feature request,所以现在我们希望它在将来的版本中可用。
在documentation中只有separate Pod definition
的示例,但是可以肯定的是,您应该能够将其应用于Pod template
定义中的Deployment
,因此您不必使用您提供的kubectl命令将其分别应用于每个Pod或某个命名空间中的每个Pod。
答案 2 :(得分:0)
您必须阅读以下内容:https://docs.fluentbit.io/manual/filter/kubernetes#kubernetes-annotations 在文档上:“请求Fluent Bit排除或不显示Pod生成的日志。仅当Fluent Bit配置(Kubernetes筛选器)启用了K8S-Logging.Exclude选项时,才会处理此选项。”
答案 3 :(得分:0)
通过三个过滤器kubernetes
,nest
和grep
的组合,您已经实现了命名空间排除
[FILTER]
Name kubernetes
Match kube.*
Kube_URL https://kubernetes.default.svc:443
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_Tag_Prefix kube.var.log.containers.
Merge_Log Off
Merge_Log_Key log_processed
K8S-Logging.Parser On
K8S-Logging.Exclude On
[FILTER]
Name nest
Match *
Wildcard pod_name
Operation lift
Nested_under kubernetes
Add_prefix kubernetes_
[FILTER]
Name grep
Match kube.*
Exclude kubernetes_namespace_name kube-system