elasticsearch 如何在Logstash中设置Elasticsearch输出模板,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack" /> elasticsearch 如何在Logstash中设置Elasticsearch输出模板,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack" />

elasticsearch 如何在Logstash中设置Elasticsearch输出模板

elasticsearch 如何在Logstash中设置Elasticsearch输出模板,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack,我对Kibana和ELK(Elasticsearch、Logstash和Kibana)堆栈比较陌生,我在设置一个堆栈方面做得很好,但我遇到了一个奇怪的问题,需要一些帮助来了解发生了什么 我使用ELK堆栈来处理一些Apache日志,但我有自己的自定义类型设置。因此,我需要显式地指定字段类型,而不是使用Logstash(或者是Kibana?)猜测数据映射将是什么 从中可以很清楚地看到,我可以在输出中设置模板值。elasticsearch配置块如下所示: output { elasticsearc

我对Kibana和ELK(Elasticsearch、Logstash和Kibana)堆栈比较陌生,我在设置一个堆栈方面做得很好,但我遇到了一个奇怪的问题,需要一些帮助来了解发生了什么

我使用ELK堆栈来处理一些Apache日志,但我有自己的自定义类型设置。因此,我需要显式地指定字段类型,而不是使用Logstash(或者是Kibana?)猜测数据映射将是什么

从中可以很清楚地看到,我可以在
输出中设置
模板
值。elasticsearch
配置块如下所示:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-apache"
    document_id => "%{[@metadata][fingerprint]}"
    manage_template => false
    template => "/path/to/logstash/logstash-apache.json"
    template_name => "logstash-apache"
    template_overwrite => true
  }
  stdout {
    codec => rubydebug
  }
}
100%确定设置了正确的路径。但是出于某种原因,如果我使用它,启动Logstash并让它做它的事情,我在
Logstash apache.json
中指定的映射就不会出现。Kibana中的索引也是
logstashapache
,所以这应该可以正常工作吗

因此,我现在要做的是将映射模板直接预加载到Elasticsearch中,如下所示:

curl -ss -XPUT "http://localhost:9200/_template/logstash-apache/" -H 'Content-Type: application/json' -d @"/path/to/logstash/logstash-apache.json";
它显然工作得很好,数据得到了正确的映射……但这样做相当笨拙。如果所有这些都来自我设置的
logstash apache.conf
文件,那就更干净了


那么我做错了什么?如何才能通过
logstash apache.conf
使用我的自定义映射模板,而不必跳过
curl
命令的额外环?

问题是您已将
manage_template
设置为
false
,这将完全禁用此模板创建功能,并要求您像现在一样手动创建模板

因此,您的
输出
部分应该如下所示,并且您应该可以继续:

  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-apache"
    document_id => "%{[@metadata][fingerprint]}"
    manage_template => true                              <-- change this line
    template => "/path/to/logstash/logstash-apache.json"
    template_name => "logstash-apache"
    template_overwrite => true
  }
elasticsearch{
hosts=>[“localhost:9200”]
索引=>“logstash apache”
文档id=>“%{[@metadata][fingerprint]}”
manage_template=>true“/path/to/logstash/logstash apache.json”
模板_name=>“logstash apache”
模板覆盖=>true
}

谢谢!我知道这很简单。但不是那么简单。但我很感激!只是一件小事:作为一个相对新的麋鹿堆栈世界,阅读的描述相比,只是有点混乱。不知道一个值会影响另一个值。基本上,
manage\u template
会打开/关闭模板管理<代码>模板
在启用模板管理时提供模板的路径
template\u name
是在ES中保存模板时使用的名称。并且
template\u overwrite
告诉Logstash如果已经存在同名的模板,是否覆盖该模板。感谢进一步的澄清。我理解这一点。但我现在要说的是,在这个问题和答案的背景下,官方文件在这个背景下似乎有点混乱s和的官方文档中声明的目的并不能真正解释它们之间的联系。公平地说,如果您愿意,您可以自由地建议对文档进行改进。