【问题标题】:Fluent Bit: Logstash_Prefix_Key is not working as expected with 'es' output plugin流利的位:Logstash_Prefix_Key 无法使用“es”输出插件按预期工作
【发布时间】:2020-09-21 08:47:37
【问题描述】:

我正在尝试从记录中查找密钥并将其用作流利位中的 logstash 前缀。但这并没有发生,并且Logstash_Prefix 没有被Logstash_Prefix_Key 替换,即使指定的密钥存在于来自kubernetes 过滤器的丰富日志中。

kubernetes 过滤器的理想行为是使用 pod 名称、pod id、命名空间名称等 kubernetes 数据丰富通过input 插件从输入路径读取的日志。当应用过滤器后的日志被推送到通过es 输出插件输出源。我使用Logstash_Prefix_Key 获取密钥kubernetes.pod_name 并将Logstash_Prefix 提供为pod_name。即使我能够在 Kibana 中看到kubernetes.pod_name 键,日志也存储在前缀pod_name 中(这意味着在日志记录中找不到Logstash_Prefix_Key,因此它使用Logstash_Prefix)。

代码示例

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

  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc.cluster.local:443
        Merge_Log           Off
        K8S-Logging.Parser  On

  output-elasticsearch.conf: |
    [OUTPUT]
        Name            es
        Match           kube.*
        Host            ${FLUENT_ELASTICSEARCH_HOST}
        Port            ${FLUENT_ELASTICSEARCH_PORT}
        HTTP_User       ${FLUENT_ELASTICSEARCH_USER}
        HTTP_Passwd     ${FLUENT_ELASTICSEARCH_PASSWORD}
        Logstash_Format On
        Logstash_Prefix pod_name
        Logstash_Prefix_Key kubernetes.pod_name
        Retry_Limit     False

由于我是 EFK 堆栈的新手,有人可以帮我解决这个问题

【问题讨论】:

    标签: elasticsearch fluent-bit


    【解决方案1】:

    UPD:现在支持! https://github.com/fluent/fluent-bit/issues/421#issuecomment-766912018 应该在 Fluent Bit v1.7 版本中!


    FluentBit 目前不支持动态 ElasticSearch 索引。这是一个相关问题:https://github.com/fluent/fluent-bit/issues/421。您只能指定字符串(硬编码)前缀。

    解决方法是改用 fluentd 日志收集器,它支持动态索引:https://docs.fluentd.org/output/elasticsearch#index_name-optional。有一个社区图表:https://github.com/helm/charts/tree/master/stable/fluentd

    UPD:现在支持! https://github.com/fluent/fluent-bit/issues/421#issuecomment-766912018 应该在 Fluent Bit v1.7 版本中!

    【讨论】:

      【解决方案2】:

      最近正在尝试做同样的事情,尽管 Max Lobur 上面所说的关于 fluentbit 在尚未发布的 1.7 版本之前不支持此功能是正确的。但是,我仍然能够使用nest 过滤器在当前版本中实现这一点,请参阅https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch 。在Logstash_Prefix_Key 下它说

      包含时:将查找记录中属于该键的值并覆盖 Logstash_Prefix 以生成索引。如果在记录中找不到键/值,则 Logstash_Prefix 选项将作为后备选项。不支持嵌套键(如果需要,可以使用嵌套过滤器插件去除嵌套)

      最后一句是关于不支持嵌套键,但是如果您使用嵌套过滤器将它们提升一个级别,您仍然可以使用它们。

      在您的情况下,pod_name 嵌套在 kubernetes 下,要仍然能够使用它,您必须将其提升到该级别之外。见nest example here

      以下是如何使其适用于您的情况:

      filter-kubernetes.conf: |
      [FILTER]
          Name                kubernetes
          Match               kube.*
          Kube_URL            https://kubernetes.default.svc.cluster.local:443
          Merge_Log           Off
          K8S-Logging.Parser  On
      
      [FILTER]
          Name                nest
          Match               *
          Operation           lift
          Nested_under        kubernetes
          Add_prefix          kubernetes_
      
      output-elasticsearch.conf: |
      [OUTPUT]
          Name            es
          Match           kube.*
          Host            ${FLUENT_ELASTICSEARCH_HOST}
          Port            ${FLUENT_ELASTICSEARCH_PORT}
          HTTP_User       ${FLUENT_ELASTICSEARCH_USER}
          HTTP_Passwd     ${FLUENT_ELASTICSEARCH_PASSWORD}
          Logstash_Format On
          Logstash_Prefix pod_name
          Logstash_Prefix_Key kubernetes_pod_name
          Retry_Limit     False
      

      我们在这里所做的是将 kubernetes 对象中的所有内容提升一个级别,并在它们前面加上 kubernetes_,因此您的 pod_name 将变为 kubernetes_pod_name。然后将kubernetes_pod_name 传递给Logstash_prefix_key。然后kubernetes_pod_name 的值用于索引生成,并且只有在kubernetes_pod_name 不存在键/值对时才会求助于logstash_prefix

      【讨论】:

        【解决方案3】:

        你可以使用:

        Logstash_Prefix_Key kubernetes['pod_name']
        

        这正在使用 docker 映像在我的机器上运行:fluent/fluent-bit:1.7

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-27
          相关资源
          最近更新 更多