大家好,我是Edison。
上一篇:結構化搜索
Logstash是啥?
Logstash是一款優秀的開源ETL工具/數據蒐集處理引擎,可以對採集到的數據做一系列的加工和處理,目前已支持200+插件具有比較成熟的生態。
下圖展示了Logstash的上下游主流生態:
Logstash不僅可以從日誌中獲取數據,纔可以從Kafka 甚至是 數據庫中採集數據。採集到數據之後,可以轉發給ElasticSearch(最常見的場景),也可以轉發給MongoDB等。
Logstash的核心概念
第一個概念:Logstash Pipeline
Logstash的Pipeline包含了 input(採集) - filter(轉換) - output(輸出) 三個階段的處理流程。
第二個概念:Logstash Event
數據在Pipeline內部流轉時的具體表現形式就是Event,數據在input階段被轉換爲Event,而在output階段被轉化成目標格式數據。
我們可以通過下圖來了解Logstash的基本架構:input-filter-output三個階段,每個階段都可以使用一些常用插件來實現一些功能。
Logstash的配置文件
我們知道了Logstash的核心是input-filter-output的三階段pipeline,那麼對於Logstash我們要做的就是定義這個pipeline要做什麼,因此我們可以來看看它的配置文件結構,如下圖所示的一個logstash配置文件:
input:使用了stdin插件讀取控制檯的內容作爲輸入;
filter:使用了grok和date插件對輸入的數據做了格式化的處理轉換;
output:使用了elasticsearch插件將解析後的數據發送到elasticsearch,並通過stdout插件對解析後的數據調用rubydebug做一個輸出;
從上面的介紹可以看出,一個Logstash Pipeline的每個階段都可以用多個插件,完全取決於你的業務需求。
這時候,我們再來看看我們在 快速搭建ELK 中的logstash配置文件時,是不是就容易理解了?
input { file { path => "/usr/local/elastic/elk7/logstash-7.1.0/bin/movies.csv" start_position => "beginning" sincedb_path => "/dev/null" } } filter { csv { separator => "," columns => ["id","content","genre"] } mutate { split => { "genre" => "|" } remove_field => ["path", "host","@timestamp","message"] } mutate { split => ["content", "("] add_field => { "title" => "%{[content][0]}"} add_field => { "year" => "%{[content][1]}"} } mutate { convert => { "year" => "integer" } strip => ["title"] remove_field => ["path", "host","@timestamp","message","content"] } } output { elasticsearch { hosts => "http://localhost:9200" index => "movies" document_id => "%{id}" } stdout {} }
小結
本篇,我們瞭解了ElasticSearch中的數據採集神器Logstash的核心概念和基本架構,並通過一個簡單的Logstash配置文件瞭解瞭如何定義Pipeline。通過使用常用的插件,基本可以滿足我們日常的需求!
參考資料
極客時間,阮一鳴,《ElasticSearch核心技術與實戰》