本文配置為 ELK 即(Elasticsearch、Logstash、Kibana)5.5.1。
Elasticsearch 能夠自動檢測字段的類型並進行映射,例如引號內的字段映射為 String,不帶引號的映射為數字,日期格式的映射為日期等等,這個機制方便了我們快速上手 ELK,但是后期我們經常需要對一些特定的字段進行定制,之前本人有一篇文章進行這方面的嘗試Logstash中如何處理到ElasticSearch的數據映射,但對於默認映射規則沒有介紹,本文就來探討一些默認的動態映射規則。
開始之前
先拿一個 logstash 的配置文件來看一下
output {
elasticsearch {
hosts => “localhost:9200"
index => "my_index"
template => "/data1/cloud/logstash-5.5.1/filebeat-template.json"
template_name => "my_index"
template_overwrite => true
}
stdout { codec => rubydebug }
}
再看一個ES模板配置文件
{
"template" : "logstash*",
"settings" : {
"index.number_of_shards" : 5,
"number_of_replicas" : 1,
"index.refresh_interval" : "60s"
},
"mappings" : {
"_default_" : {
"_all" : {"enabled" : true},
"dynamic_templates" : [ {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "not_analyzed", "omit_norms" : true, "doc_values": true,
"fields" : {
"raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256,"doc_values": true}
}
}
}
} ],
"properties" : {
"@version": { "type": "string", "index": "not_analyzed" },
"geoip" : {
"type" : "object",
"dynamic": true,
"path": "full",
"properties" : {
"location" : { "type" : "geo_point" }
}
}
}
}
}
}
這里關注幾個屬性index
、template_name
、以及模板文件中的 template
。index
是索引的名稱,我們經常會有諸如 index => "logstash-%{+YYYY.MM.dd}”
這樣的索引名稱,可以按照日期來分割不同的索引。template_name
對應的是模板名稱,template
這是比較關鍵的,因為決定了索引是否能夠匹配到模板配置,這里應該與 index
相匹配。比如固定的 index 名稱,這里就可以是固定名稱。對於按日期分隔的,可以使用通配符,例如logstash-*
。
我就是因為沒搞明白這幾個屬性的對應關系,導致自己的配置沒有生效查了很長時間。
參考資料
1、Logstash中配置默認索引映射(_default_屬性)
2、關於動態Mapping和templates