我在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]}”。
提前致谢。
答案 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数据中包含标记。
是有帮助的