流利 - 使用源标记作为索引

时间:2017-04-28 21:16:04

标签: elasticsearch docker fluentd

我在Docker引擎上运行Fluentd和Elasticsearch。我有大量服务,我想登录Fluentd。

我想要做的是为我运行的每个服务创建一个标记,并将该标记用作Elasticsearch中的索引。这是我的设置:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match docker.service1>
  @type elasticsearch
  host "172.20.0.3"
  port 9200
  index_name service1
  type_name fluentd
  flush_interval 10s
</match>

<match docker.service2>
  @type elasticsearch
  host "172.20.0.3"
  port 9200
  index_name service2
  type_name fluentd
  flush_interval 10s
</match>

等等。

为我创建的每个服务都包含一个新的匹配标记会很烦人,因为我希望能够在不更新我的流畅配置的情况下添加新服务。有没有办法做这样的事情:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match docker.**>
  @type elasticsearch
  host "172.20.0.3"
  port 9200
  index_name $(TAG)
  type_name fluentd
  flush_interval 10s
</match>

我使用$(TAG)变量来表示我希望Tag名称是索引的名称?

我从我找到here的答案中尝试了这个:$ {tag_parts [0]}。这被打印成字面作为我的索引。所以我的索引是“$ {tag_parts [0]}”。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我发现我需要导入其他Elasticsearch插件。这是我使用的匹配标记的示例:

<match>
   @type elasticsearch_dynamic
   host "172.20.0.3"
   port 9200
   type_name fluentd
   index_name ${tag_parts[2]}
   flush_interval 10s
   include_tag_key true
   reconnect_on_error true
</match>

我已导入@elasticsearch_dynamic插件而不是@elasticsearch插件。然后,我可以使用$ {tag_parts}的东西。

include_tag_key将在json数据中包含标记。

阅读documentation

是有帮助的