Elasticsearch 字段限制大于 1000
Elasticsearch Field limit more than 1000
有人可以帮忙吗?我需要修复错误,以便 S3 中的 CloudTrail 日志可以传送到 ES 的 Logstash 并在 Kibana 中查看。无法弄清楚如何将字段限制增加到更高的值。我的配置看起来像
input {
s3 {
bucket => "sample-s3bucket"
region => "eu-west-1"
type => "cloudtrail"
codec => cloudtrail {}
sincedb_path => "/tmp/logstash/cloudtrail"
exclude_pattern => "/CloudTrail-Digest/"
interval => 300
}
}
filter {
if [type] == "cloudtrail" {
json {
source => "message"
}
geoip {
source => "sourceIPAddress"
target => "geoip"
add_tag => ["cloudtrail-geoip"]
}
}
}
output {
elasticsearch {
hosts => "coordinate_node:9200"
index => 'cloudtrail-%{+YYYY.MM.dd}'
}
stdout {
codec => rubydebug
}
}
这是我在我的 Logstash 机器上看到的 limit
2018-10-04T17:49:49,883][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"cloudtrail-2018.09.27", :_type=>"doc", :_routing=>nil}, #], :response=>{"index"=>{"_index"=>"cloudtrail-2018.09.27", "_type"=>"doc", "_id"=>"lrMzQGYBOny1_iySNW6G", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"Limit of total fields [1000] in index [cloudtrail-2018.09.27] has been exceeded"}}}
提前致谢
- 您必须在集群上设置 index template。
您可以使用以下模板为添加到集群的所有索引设置设置。通过 logstash 建立索引后,下面的模板会将创建的所有索引的字段限制设置为 2000。
PUT /_template/Global
{
"index_patterns" : ["*"],
"order" : 0,
"settings" : {
"index.mapping.total_fields.limit" : "2000"
}
}
注意:如果要使用特定索引的设置,可以将模式更改为"index_patterns" : ["cloudtrail-*"]
。
当一个文档中的字段数量如此之多时,您还应该考虑重构您的文档映射,而不是所有字段在响应中总是必需的。考虑创建 Join/parent-child 等关系,以创建更小的文档以提高效率。
有人可以帮忙吗?我需要修复错误,以便 S3 中的 CloudTrail 日志可以传送到 ES 的 Logstash 并在 Kibana 中查看。无法弄清楚如何将字段限制增加到更高的值。我的配置看起来像
input {
s3 {
bucket => "sample-s3bucket"
region => "eu-west-1"
type => "cloudtrail"
codec => cloudtrail {}
sincedb_path => "/tmp/logstash/cloudtrail"
exclude_pattern => "/CloudTrail-Digest/"
interval => 300
}
}
filter {
if [type] == "cloudtrail" {
json {
source => "message"
}
geoip {
source => "sourceIPAddress"
target => "geoip"
add_tag => ["cloudtrail-geoip"]
}
}
}
output {
elasticsearch {
hosts => "coordinate_node:9200"
index => 'cloudtrail-%{+YYYY.MM.dd}'
}
stdout {
codec => rubydebug
}
}
这是我在我的 Logstash 机器上看到的 limit
2018-10-04T17:49:49,883][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"cloudtrail-2018.09.27", :_type=>"doc", :_routing=>nil}, #], :response=>{"index"=>{"_index"=>"cloudtrail-2018.09.27", "_type"=>"doc", "_id"=>"lrMzQGYBOny1_iySNW6G", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"Limit of total fields [1000] in index [cloudtrail-2018.09.27] has been exceeded"}}}
提前致谢
- 您必须在集群上设置 index template。
您可以使用以下模板为添加到集群的所有索引设置设置。通过 logstash 建立索引后,下面的模板会将创建的所有索引的字段限制设置为 2000。
PUT /_template/Global
{
"index_patterns" : ["*"],
"order" : 0,
"settings" : {
"index.mapping.total_fields.limit" : "2000"
}
}
注意:如果要使用特定索引的设置,可以将模式更改为"index_patterns" : ["cloudtrail-*"]
。
当一个文档中的字段数量如此之多时,您还应该考虑重构您的文档映射,而不是所有字段在响应中总是必需的。考虑创建 Join/parent-child 等关系,以创建更小的文档以提高效率。