如何从流畅的位日志记录中排除命名空间
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
属性 定义将忽略其日志的命名空间的名称。
您已通过 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
有没有办法排除 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
属性 定义将忽略其日志的命名空间的名称。
您已通过 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