在Kubernetes上使用Fluentd从容器日志中解析特定的应用程序消息

时间:2018-11-21 20:33:16

标签: kubernetes fluentd

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

somekeyword1 somenumber somestuff可选
somekeyword2 somenumber somestuff可选项
somekeyword2 somenumber somestuff可选项
somekeyword1 somenumber somestuff可选
...

我想使用基于原始somekeywordN的正则表达式来处理该日志(但愿意接受建议) 因此,在流利的情况下,如何对特定名称空间中的容器的日志消息执行该级别的处理?

我已经尝试过了: https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter/issues/73
但是即使这样,我也不确定如何在特定日志上运行正则表达式

2 个答案:

答案 0 :(得分:0)

如果您使用的是Elasticsearch版本5或更高版本,建议您使用Ingest APIs并使用其Grok Processor将Grok Filtering应用于日志数据。

如果您使用的是Elastic Stack的早期版本,则还可以尝试使用Logstash来实现相同的功能。

您可能还会发现此article有用(免责声明-有时我的文章刊登在我的网站上)

答案 1 :(得分:0)

Fleutnd具有可使用的正则表达式解析器内建。 https://docs.fluentd.org/v1.0/articles/parser_regexp

只需在配置的过滤器部分下添加以下代码段

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

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