【问题标题】:fluent bit kubernetes annotation does not workfluent bit kubernetes注解不起作用
【发布时间】:2021-10-15 08:12:47
【问题描述】:

我将 fluent bit 部署到 Kubernetes。我部署了一个带有注释 fluentbit.io/parser: cri 的 pod。但它仍然使用 INPUT 中配置的解析器 ivyxjc 解析日志。

流利的位配置

apiVersion: v1
kind: ConfigMap
metadata:
    name: fluent-bit-config
    labels:
        k8s-app: fluent-bit
data:
    # Configuration files: server, input, filters and output
    # ======================================================
    fluent-bit.conf: |
        [SERVICE]
            Flush         1
            Log_Level     info
            Daemon        off
            Parsers_File  parsers.conf
            HTTP_Server   On
            HTTP_Listen   0.0.0.0
            HTTP_Port     2020

        @INCLUDE input-kubernetes.conf
        @INCLUDE filter-kubernetes.conf
        @INCLUDE output-elasticsearch.conf

    input-kubernetes.conf: |
        [INPUT]
            Name              tail
            Tag               kube.*
            Path              /var/log/containers/*.log
            Parser            ivyxjc
            DB                /var/log/flb_kube.db
            Mem_Buf_Limit     200MB
            Skip_Long_Lines   On
            Refresh_Interval  10

    filter-kubernetes.conf: |
        [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           On
            k8s-logging.parser  On
            K8S-Logging.Exclude On

    output-elasticsearch.conf: |
        [OUTPUT]
            Name            es
            Match           *
            Host            ${FLUENT_ELASTICSEARCH_HOST}
            Port            ${FLUENT_ELASTICSEARCH_PORT}
            HTTP_User       ${FLUENT_ELASTICSEARCH_USER}
            HTTP_Passwd     ${FLUENT_ELASTICSEARCH_PASSWD}
            Logstash_Format On
            Replace_Dots    On
            Retry_Limit     False
            tls             On
            tls.verify      Off

    parsers.conf: |
        [PARSER]
            # http://rubular.com/r/tjUt3Awgg4
            Name cri
            Format regex
            Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
            Time_Key    time
            Time_Format %Y-%m-%dT%H:%M:%S.%L%z

        [PARSER]
            Name ivyxjc
            Format regex
            Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag2>[^ ]*) (?<message2>.*)$
            Time_Key    time
            Time_Format %Y-%m-%dT%H:%M:%S.%L%z

吊舱描述:

...
Name:         logger-5c6658b5dd-66zkw
Namespace:    logger
Priority:     0
Start Time:   Fri, 15 Oct 2021 15:28:47 +0800
Labels:       app=logger
              pod-template-hash=5c6658b5dd
Annotations:  fluentbit.io/parser: cri
              fluentbit.io/parser_stderr: cri
              fluentbit.io/parser_stdout: cri
Status:       Running
...

【问题讨论】:

  • 通常的做法是在 /var/log/containers/ INPUT 中使用 cri 解析器。 fluentbit.io/parser 注释用于特定的应用程序解析器(Java/Apache/etc)。来自输入的所有数据都需要首先由 CRI 解析器解析,然后才能从这些日志行中检索特定的应用程序字段。所以首先使用cri 进行解析,然后使用特定于应用程序的解析器。

标签: kubernetes fluent-bit


【解决方案1】:

我们遇到了这个问题,最终在 fluent 的集群角色绑定中发现了错误配置。我们的服务帐户名称中有一个类型,该问题在 fluent 中导致了非常奇怪的行为,包括未使用正确的解析器解析的行和许多未应用的标签,但没有明显的日志行表明即使在“调试”日志级别。

【讨论】:

    【解决方案2】:

    k8s-logging.parser

    此选项告诉流利的位代理使用注释中的解析器,该注释将用于“log”关键字。输入 解析器将照常应用。然后“KUBERNETES”过滤器获取输入,然后由“fluentbit.io/parser: parser_name_here”指定的解析器将从“log”关键字中获取值。

    参考docs

    不幸的是,这在某些情况下也不起作用,我还没有追查到它,但如果我确实找到了一些东西,我会更新这个答案。

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多