如何在 Logstash 中设置 Elasticsearch 输出模板
How to set an Elasticsearch output template in Logstash
我对 Kibana 和 ELK(Elasticsearch、Logstash 和 Kibana)堆栈比较陌生,我在设置方面做得很好,但我 运行 进入我认为奇怪的地方问题,需要一些帮助来了解发生了什么。
我正在使用 ELK 堆栈来 c运行ch 一些 Apache 日志,但我有自己的自定义类型设置。所以我需要明确指定字段类型等,而不是让 Logstash(或者是 Kibana?)猜测数据映射是什么。
从 reading the Logstash documentation 开始,很明显我可以在此处显示的 output.elasticsearch
配置块中设置 template
值:
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 中的索引也是 logstash-apache
所以这应该可以正常工作吗?
所以我现在要做的是像这样将映射模板直接预加载到 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
,这完全禁用了此模板创建功能,需要您像现在一样手动创建模板。
所以您的 output
部分应该看起来像这样,您应该可以开始了:
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
}
我对 Kibana 和 ELK(Elasticsearch、Logstash 和 Kibana)堆栈比较陌生,我在设置方面做得很好,但我 运行 进入我认为奇怪的地方问题,需要一些帮助来了解发生了什么。
我正在使用 ELK 堆栈来 c运行ch 一些 Apache 日志,但我有自己的自定义类型设置。所以我需要明确指定字段类型等,而不是让 Logstash(或者是 Kibana?)猜测数据映射是什么。
从 reading the Logstash documentation 开始,很明显我可以在此处显示的 output.elasticsearch
配置块中设置 template
值:
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 中的索引也是 logstash-apache
所以这应该可以正常工作吗?
所以我现在要做的是像这样将映射模板直接预加载到 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
,这完全禁用了此模板创建功能,需要您像现在一样手动创建模板。
所以您的 output
部分应该看起来像这样,您应该可以开始了:
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
}