Elastic學習之旅 (10) Logstash數據採集

大家好,我是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核心技術與實戰

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章