Logstash 是一個開源的數據收集引擎,它具備備實時數據傳輸能力。它能夠統一過濾來自不一樣源的數據,並按照開發者的制定的規範輸出到目的地。它以插件的形式來組織功能,經過配置文件來描述須要插件作什麼,配置文件主要由input、filter和output三部分組成。
1、input
負責從數據源提取數據,因爲我提取的是日誌文件,因此使用的是file插件,該插件經常使用的幾個參數是:git
- type:指定一個自定義名稱,設置type後,能夠在後面的filter和output中對不一樣的type作不一樣的處理,適用於須要消費多個日誌文件的場景。
- start_position:指定起始讀取位置,「beginning」表示第一次啓動從文件頭開始讀取,後面動態讀取;「end」表示從文件尾開始(相似tail -f)。
- sincedb_path:sincedb_path 指定sincedb文件的路徑。sincedb保存每一個日誌文件已經被讀取到的位置,若是Logstash重啓,對於同一個文件,會繼續從上次記錄的位置開始讀取。若是想從新從頭讀取文件,須要刪除sincedb文件。若是設置爲「/dev/null」,即不保存位置信息。
2、 output
負責輸出數據,改部分也有提供豐富的插件。 以es爲例,須要指定es接收數據的地址和端口,以及日誌存入的index 名稱。
# 輸出到es
output{
elasticsearch{
hosts => ["192.168.1.3:9200"]
index => "log-%{+YYYY.MM.dd}"
}
}
3、filter
負責經過配置插件來解析、處理日誌數據。插件介紹github
- grok:用於將非結構化的文本數據轉化爲結構化的數據,內部使用正則語法對文本數據進行匹配,爲了下降使用複雜度,其提供了一組pattern,咱們能夠直接調用pattern而不須要本身寫正則表達式,參考源碼grok-patterns。也可使用工具Grok Debugger能夠對解析語法進行調試。
- kv:用於將某個字段的值進行分解,相似於編程語言中的字符串Split。在下面的配置中,咱們將request_args字段值按照「&」進行分解,分解後的字段名稱以「request_args_」做爲前綴,而且丟棄重複的字段。
- geoip:用於根據IP信息生成地理位置信息,默認使用自帶的一份GeoLiteCity database,也能夠本身更換爲最新的數據庫,可是須要數據格式須要遵循Maxmind的格式(參考GeoLite),彷佛目前只能支持legacy database,數據類型必須是.dat。下載GeoLiteCity.dat.gz後解壓, 並將文件路徑配置到source中便可。
- translate,用於檢測某字段的值是否符合條件,若是符合條件則將其翻譯成新的值,寫入一個新的字段,匹配pattern能夠經過YAML文件來配置。