如何从流畅的位日志记录中排除命名空间

How to exclude namespace from fluent-bit logging

有没有办法排除 fluent-bit 中的某些名称空间?我想排除某些命名空间,这样 fluent-bit 就不会将在这些命名空间中创建的所有日志转发给 ELK。

除了为该命名空间中的每个 pod 添加注释之外,还有其他方法吗?我知道您可以通过 kubectl 更新命名空间中的所有 pods 注释。

kubectl annotate pods --namespace=pks-system --all fluentbit.io/exclude='true'

根据官方Fluent Bit文档,目前它实际上是请求日志处理器跳过来自某些Pods的日志的唯一方式。我搜索了一下,只找到了 this 片段。

除此之外,他们的 GitHub 项目甚至还提出了 feature request,所以现在我们希望它能在未来的版本中可用。

documentation 中只有一个 separate Pod definition 的例子,但你肯定可以将它应用到 Deployment 定义中的 Pod template 所以你不必必须使用您提供的 kubectl 命令将其分别应用于每个 Pod 或特定命名空间中的每个 Pod。

你必须阅读这篇文章:https://docs.fluentbit.io/manual/filter/kubernetes#kubernetes-annotations 在文档中:"Request to Fluent Bit to exclude or not the logs generated by the Pod. This option will only be processed if Fluent Bit configuration (Kubernetes Filter) have enabled the option K8S-Logging.Exclude."

我认为下面的输入插件配置可以做到这一点:

 [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 属性 定义将忽略其日志的命名空间的名称。

您已通过 kubernetesnestgrep

这三个过滤器的组合实现命名空间排除
[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