【问题标题】:How to exclude namespace from fluent-bit logging如何从流利的位日志记录中排除命名空间
【发布时间】:2019-07-14 13:40:59
【问题描述】:

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

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

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

【问题讨论】:

  • 来自 fluentbit 文档,这是唯一的方法。
  • 顺便说一句,作为doc describes,您可以按它们的命名空间用逗号分隔日志,例如Exclude_Path /var/log/containers/*_kube-system_*.log,/var/log/containers/*_kubernetes-dashboard_*.log,/var/log/containers/*_yourspecialnamespace_*.log,这对我有用。

标签: kubernetes fluent-bit kubernetes-namespace


【解决方案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 属性定义了将忽略其日志的命名空间的名称。

【讨论】:

    【解决方案2】:

    您已经使用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
    

    【讨论】:

      【解决方案3】:

      根据官方Fluent Bit 文档,目前它实际上是请求日志处理器跳过某些Pod 的日志的唯一方式。我搜索了一下,除了this 片段之外什么也没找到。

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

      documentation 中只有separate Pod definition 的示例,但可以肯定的是,您应该能够在Deployment 定义中将其应用于Pod template,这样您就不必将其分别应用于每个Pod 或应用于使用您提供的 kubectl 命令在特定命名空间中的每个 Pod。

      【讨论】:

        【解决方案4】:

        您必须阅读:https://docs.fluentbit.io/manual/filter/kubernetes#kubernetes-annotations 在文档中:“请求 Fluent Bit 排除或不排除 Pod 生成的日志。只有在 Fluent Bit 配置(Kubernetes 过滤器)启用了选项 K8S-Logging.Exclude 时才会处理此选项。”

        【讨论】:

        • 谢谢。注释符合 Kubernetes 的做事方式。如果过滤器不仅支持排除 Pod 注释,还支持包含的 Pod 注释......以及命名空间注释,那就太好了。
        • 这应该是首选答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多