我正在使用logstash将日志提供给ElasticSearch。我将logstash输出配置为:
input {
file {
path => "/tmp/foo.log"
codec =>
plain {
format => "%{message}"
}
}
}
output {
elasticsearch {
#host => localhost
codec => json {}
manage_template => false
index => "4glogs"
}
}
我注意到,只要我启动logstash,它就会在ES中创建一个映射(日志),如下所示。
{
"4glogs": {
"mappings": {
"logs": {
"properties": {
"@timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"@version": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}
}
如何防止logstash创建此映射?
更新:
我现在也解决了这个错误。“日志的对象映射试图解析为对象,但获得EOF,是否为其提供了具体的值?”
正如John Petrone在下面所述,一旦定义了映射,就必须确保您的文档符合该映射。在我的例子中,我定义了一个"type: nested“的映射,但是logstash的输出是一个字符串。因此,我从logstash配置中删除了所有编解码器(无论是json还是plain ),这使得json文档无需更改即可通过。
这是我的新logstash配置(带有一些额外的多行日志过滤器)。
input {
kafka {
zk_connect => "localhost:2181"
group_id => "logstash_group"
topic_id => "platform-logger"
reset_beginning => false
consumer_threads => 1
queue_size => 2000
consumer_id => "logstash-1"
fetch_message_max_bytes => 1048576
}
file {
path => "/tmp/foo.log"
}
}
filter {
multiline {
pattern => "^\s"
what => "previous"
}
multiline {
pattern => "[0-9]+$"
what => "previous"
}
multiline {
pattern => "^$"
what => "previous"
}
mutate{
remove_field => ["kafka"]
remove_field => ["@version"]
remove_field => ["@timestamp"]
remove_tag => ["multiline"]
}
}
output {
elasticsearch {
manage_template => false
index => "4glogs"
}
}
发布于 2014-07-25 01:06:22
您将需要一个映射来在Elasticsearch中存储数据并对其进行搜索-这就是ES知道如何索引和搜索这些内容类型的方式。您可以让logstash动态创建它,也可以阻止它这样做,而是手动创建它。
请记住,您不能更改现有的映射(尽管您可以添加它们)。因此,首先您需要删除现有的索引。然后,您可以修改设置以阻止动态映射创建。同时,您将希望创建自己的映射。
例如,这将为logstash数据创建映射,但也会通过“strict”限制任何动态映射的创建:
$ curl -XPUT 'http://localhost:9200/4glogs/logs/_mapping' -d '
{
"logs" : {
"dynamic": "strict",
"properties" : {
"@timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"@version": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
'
请记住,索引名称"4glogs“和类型"logs”需要与来自logstash的内容相匹配。
对于我的生产系统,我通常更喜欢关闭动态映射,因为它避免了意外的映射创建。
如果要对动态映射进行调整,以下链接将非常有用:
https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-mapping.html
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/dynamic-mapping.html
发布于 2014-07-24 21:45:36
本例中的logs
是index_type
。如果不想将其创建为logs
,可以在elasticsearch
元素上指定其他一些index_type
。elasticsearch中的每条记录都需要有一个索引和一个类型。如果您没有指定Logstash,则默认将其设置为logs
。
当您将记录插入到Elasticsearch中时,总是会创建一个隐式映射,因此您无法阻止它的创建。您可以在插入任何内容之前自己创建映射(例如通过模板映射)。
false
的manage_template
设置只是阻止它为您指定的index
创建模板映射。如果已使用类似curl -XDELETE http://localhost:9200/_template/logstash?pretty
的方式创建了现有模板,则可以将其删除
发布于 2015-06-16 01:04:40
索引模板可以帮助您。有关更多详细信息,请参阅此jira。您可以创建具有通配符支持的索引模板,以匹配索引名称并放置您的默认映射。
https://stackoverflow.com/questions/24924248
复制相似问题