【问题标题】:Parse specific application messages out of container logs with Fluentd on Kubernetes在 Kubernetes 上使用 Fluentd 从容器日志中解析特定的应用程序消息
【发布时间】:2019-04-24 11:53:05
【问题描述】:

我正在尝试使用 fluentd 从 kubernetes pod 内的单个容器中解析来自多个应用程序的消息... Fluentd、Kibana 和 Elasticsearch 运行良好,我的所有日​​志都显示出来了,否则我很高兴。但是,我需要以不同的方式处理一系列容器日志。在这种情况下,我需要进一步解析的日志都在一个命名空间中。 我的容器日志如下所示:

somekeyword1 somenumber somestuff optionals
somekeyword2 somenumber somestuff optionals
somekeyword2 somenumber somestuff optionals
somekeyword1 somenumber somestuff optionals
...

我想使用基于原始 somekeywordN 的正则表达式处理该日志(但我愿意接受建议) 那么在 fluentd 中,我如何对特定命名空间中的容器的日志消息执行该级别的处理?

我试过这个: https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter/issues/73
但即便如此,我不确定如何在特定日志上运行我的正则表达式

【问题讨论】:

    标签: kubernetes fluentd


    【解决方案1】:

    如果您使用的是 Elasticsearch 版本 5 或更高版本,我建议您使用 Ingest APIs 并使用其 Grok 处理器在您的日志数据上应用 Grok Filtering

    如果您使用的是以前版本的 Elastic stack ,您也可以尝试使用 Logstash 来实现。

    您可能还会发现此 article 很有帮助(免责声明 - 这篇文章是我在某个时候发布在 Medium 上的。)

    【讨论】:

      【解决方案2】:

      Fleutnd 有一个内置的正则表达式解析器,您可以使用它。 https://docs.fluentd.org/v1.0/articles/parser_regexp

      只需在配置的过滤器部分下添加以下 sn-p

      <parse>
        @type regexp
        expression /^(?<key1>somekeyword.) (?<key2>.+) (?<key3>.+) /
      </parse>
      

      或者,如果您需要使用多个正则表达式进行匹配,这是我使用的插件:https://github.com/repeatedly/fluent-plugin-multi-format-parser

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        相关资源
        最近更新 更多