logstash自動根據預約義template生成elasticsearch日誌索引相關問題

0:版本
Logstash:官方logstash:5鏡像
Elasticsearch:5.4.1json

1:配置logstash.conf
Input plugin使用tcp,配置信息以下:app

input {
    tcp {
        port => 7777
        mode => server
    }
}    

 

2:日誌記錄組件使用了Nlog,定製logger的target:elasticsearch

var target = new NetworkTarget
{
    Layout = "${message}${newline}",
    Address = _targetAddress
};
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, loggerLevel);
logger = LogManager.GetLogger(loggerName);

  

3:根據logger定義的Layout,經過logstash的filter模塊解析日誌對象json:tcp

filter {
    json {
        source => "message"
        remove_field => [ "message" ]
    }
}    

這裏message字符串即爲nlog發送過來的日誌對象json,在解析後原json字符串再也不保留(remove_field的做用)性能

4:logstash的日誌輸出落地選擇到elasticsearch,而且項目中的日誌對象分了兩類,所以logstash配置的output plugin以下:spa

output {
    if [DocumentType] == "esUserSearchLog" {
        elasticsearch {
            hosts => ["192.168.30.91:9200","192.168.30.92:9200"]
            index => ["searchlog-%{+YYYY-MM}"]
            document_type => "%{DocumentType}"
            template => "/app/temp.searchlog.json"
            template_name => "searchlog-*"
            template_overwrite => true
        }
    }
    if [DocumentType] == "esUserDetailLog" {
        elasticsearch {
            hosts => ["192.168.30.91:9200","192.168.30.92:9200"]
            index => ["detaillog-%{+YYYY-MM}"]
            document_type => "%{DocumentType}"
            template => "/app/temp.detaillog.json"
            template_name => "detaillog-*"
            template_overwrite => true
        }
    }
}        

關注:日誌

1)DocumentType爲日誌對象的一個屬性,用於指定索引至ES時的document_type;server

2)index配置爲按月區分日誌,需注意:索引名字必須對應template_name,不然將不會使用該處指定的template,此處配置的template_name爲"searchlog-*",在新建全部以"searchlog-"開頭的索引將使用該template;
3)document_type指定爲日誌對象的DocumentType屬性便可;
4)template屬性指定對應template文件路徑(json格式,見後文)
5)template_overwrite爲true則template的order高的,知足一樣條件(如均以searchlog-開頭)的template將覆蓋order低的;
對象

5:對應的template文件:blog

temp.searchlog.json:
{
    "template": "searchlog-*",
    "order": 1,
    "settings": {
        "number_of_replicas": "1",
        "number_of_shards": "3",
        "index": {
            "refresh_interval": "10s"
    }
},
...
"mappings": {
    ...
     }  
}    

關注:

1)template指定的"searchlog-*"表示該template將應用於searchlog-開頭的索引的建立,並與order參數一塊兒決定哪一個模板生效(同名稱規則的order更大的模板生效);

2)setting節點下refresh_interval參數表示數據自動刷新的頻率(默認1s),因爲日誌文件實時性要求並非特別高,所以這裏能夠酌情下降頻率以提升索引的寫入性能;

相關文章
相關標籤/搜索