1、原由
在使用ELK5.5的時候,若是遇到須要在同一臺機器上收集不一樣類型的日誌,好比:同時收集一臺機器上的java log和nginx log!而又須要分別存儲到不一樣索引的時候,咱們會在filebeat的prospectors裏面配置document_type類型,而後在logstash裏面使用if [type] == "string" 來匹配,針對不一樣的判斷作不一樣的處理。
6.0之前filebeat部分配置以下:
- input_type: log
paths:
- /opt/tengine/logs/access.log
document_type: nginx-log
json.keys_under_root: true
ignore_older: 24h
- input_type: log
paths:
- /opt/java/logs/java.log
document_type: java-log
json.keys_under_root: true
ignore_older: 24h
6.0之前logstash部分配置以下:
output {
if [type] == "nginx-log" {
elasticsearch {
hosts => ["172.18.238.2:9200","172.18.238.3:9200","172.18.238.4:9200"]
index => "%{type}-%{+YYYY.MM.dd}"
}
} else if [type] == "java-log" {
elasticsearch {
hosts => ["172.18.238.2:9200","172.18.238.3:9200","172.18.238.4:9200"]
index => "%{type}-%{+YYYY.MM.dd}"
}
}
}
2、踩坑
在使用了6.2.3版本的ELK之後,使用如上配置,if [type]匹配不到在filebeat裏面使用document_type定義的字符串。在屢次調試和詢問後,發如今6.0版本以上已經取消了document_type的定義。若是要實現以上的配置只能使用以下配置
3、解決方案
解決方案爲在filebeat裏面新增一個fields字段,service : GameStatis都是本身定義的,定義完成後使用Logstash的if 判斷,條件爲if [fields][service] == "GameStatis".就能夠了。
filebeat配置:
logstasht配置: