Есть ли способ исключить определенные пространства имен в fluent-bit? Я хотел бы исключить определенные пространства имен, чтобы fluent-bit не перенаправлял все журналы, созданные в этих пространствах имен, в ELK.
Есть ли способ сделать это, кроме добавления аннотации к каждому модулю в этом пространстве имен? Я знаю, что вы можете обновить все аннотации модулей в пространстве имен через kubectl.
kubectl annotate pods --namespace=pks-system --all fluentbit.io/exclude='true'
Кстати, в качестве документ описывает вы можете разделять журналы запятыми по их пространствам имен, например Exclude_Path /var/log/containers/*_kube-system_*.log,/var/log/containers/*_kubernetes-dashboard_*.log,/var/log/containers/*_yourspecialnamespace_*.log, что работает для меня.

Согласно официальной Fluent Bit документации, на данный момент это фактически единственный способ запросить, чтобы обработчик журналов пропускал журналы из определенных модулей. Я просмотрел его и не нашел ничего, кроме фрагмента это.
В дополнение к этому, в их проекте GitHub даже поднят запрос функции, так что пока мы можем надеяться, что он будет доступен в будущем выпуске.
В документация есть только пример separate Pod definition, но наверняка вы сможете применить его к Pod template в определении Deployment, поэтому вам не нужно применять его к каждому поду отдельно или к каждому поду в определенном пространстве имен с помощью предоставленной вами команды kubectl. .
Вы должны прочитать это: https://docs.fluentbit.io/manual/filter/kubernetes#kubernetes-аннотации В документации: «Запрос к Fluent Bit, чтобы исключить или нет журналы, созданные модулем. Этот параметр будет обработан, только если в конфигурации Fluent Bit (фильтр Kubernetes) включен параметр K8S-Logging.Exclude».
Спасибо. Аннотации соответствуют способу ведения дел Kubernetes. Было бы неплохо, если бы фильтр поддерживал не только возможность исключения аннотации Pod, но и аннотацию Pod для включения... и аннотации пространства имен.
Это должен быть предпочтительный ответ
Я думаю, что следующая конфигурация входного плагина может сделать это:
[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
Из документации fluentbit это единственный способ сделать это.