Logstash 入門


一、簡介

  Logstash 是開源的服務器端數據處理管道,支持從不同來源采集數據,裝換數據,並將數據發送到不同的存儲庫中。  

  Logstash 項目誕生於 2009 年 8 月 2 日。其作者是世界著名的運維工程師喬丹西塞(JordanSissel),喬丹西塞當時是著名虛擬主機托管商 DreamHost 的員工,還發布過非常棒的軟件打包工具 fpm。

  2013年,Logstash 被 Elasticsearch 公司收購。

二、安裝

  Logstash 開箱即用,所以你只要下載壓縮文件,然后解壓之后就能用了。

$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
$ tar -zxvf logstash-7.3.0.tar.gz
$ cd logstash-7.3.0

三、Hello World

  首先以輸出一個 “Hello World” 的形式開始 Logstash 的學習。

  可以運行以下命令, stdin{} 表示從標准輸入輸入信息; -e 表示從命令行指定配置;然后 codec=>rubydebug 表示把結果輸出到控制台。

$ bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

  此時在命令行輸入 Hello World , 然后回車會看到如下結果:  

{
    "@version" => "1",
    "@timestamp" => 2019-08-09T08:52:29.790Z,
    "message" => "Hello World ",
    "host" => "chengshengzhangdeMacBook-Pro.local"
}

  如上顯示,Logstash 會額外增加一些信息,比如 @timestamp 時間, host 主機名等。

四、運行流程

  使用過Linux的程序員都清楚,Linux 有一個管道符,類似於以下命令:

$ cat randdata | awk '{print $2}' | sort | uniq -c | tee sortdata

  Logstash 就像一個管道符一樣,可以將輸入,經過過濾,然后輸出到不同的存儲庫中。Logstash 使用不同的線程來實現這些功能的,數據在線程之間以事件的形式流傳, 而且 Logstash 可以處理多行的數據。

  Logstash 采用的可插拔的框架,目前已經有200多個插件。分為輸入插件(input),編碼插件(codec),過濾器插件(filter),輸出插件(output)。

  Logstash 處理數據的整個流程: input | decode | filter | encode | output。

  • input 插件可以對接不同數據源
  • codec 插件,codec 來自 coder / decoder 兩個單詞的首字母縮寫,主要用來decode、encode事件的,codec 使 Logstash 更方便的和其他自定義的數據格式對接,將相應格式的數據轉化為Logstash事件
  • filter 插件可以解析各個事件,比如把非結構化數據結構化,從IP地址解析出地理坐標等
  • output 插件對接不同存儲層,比如 ElasticSearch,HDFS,Kafka等。

五、命令行參數

5.1、-e

  意即執行。我們在 "Hello World" 的時候已經用過這個參數了。事實上你可以不寫任何具體配置,直接運行 bin/logstash -e '' 達到相同效果。這個參數的默認值是下面這樣:

input {
    stdin { }
}
output {
    stdout { }
}

5.2、--config 或 -f

  意即文件。真實運行中,我們會寫很長的配置,甚至可能超過 shell 所能支持的 1024 個字符長度。所以我們必把配置固化到文件里,然后通過 bin/logstash -f agent.conf 這樣的形式運行。

  此外,logstash 還提供一個方便我們規划和書寫配置的小功能。你可以直接用 bin/logstash -f /etc/logstash.d/ 來運行。logstash 會自動讀取 /etc/logstash.d/ 目錄下所有的文本文件,然后在自己內存里拼接成一個完整的大配置文件,再去執行。

5.3、--configtest 或 -t

  意即測試。用來測試 Logstash 讀取到的配置文件語法是否能正常解析。Logstash 配置語法是用 grammar.treetop 定義的。尤其是使用了上一條提到的讀取目錄方式的讀者,尤其要提前測試。

5.4、--log 或 -l

  意即日志。Logstash 默認輸出日志到標准錯誤。生產環境下你可以通過 bin/logstash -l logs/logstash.log 命令來統一存儲日志。

5.5、--filterworkers 或 -w

   意即工作線程。Logstash 會運行多個線程。你可以用 bin/logstash -w 5 這樣的方式強制 Logstash 為過濾插件運行 5 個線程。

  注意:Logstash目前還不支持輸入插件的多線程。而輸出插件的多線程需要在配置內部設置,這個命令行參數只是用來設置過濾插件的!

  提示:Logstash 目前不支持對過濾器線程的監測管理。如果 filterworker 掛掉,Logstash 會處於一個無 filter 的僵死狀態。這種情況在使用 filter/ruby 自己寫代碼時非常需要注意,很容易碰上 NoMethodError: undefined method '*' for nil:NilClass 錯誤。需要妥善處理,提前判斷。

5.6、--pluginpath 或 -P

  可以寫自己的插件,然后用 bin/logstash --pluginpath /path/to/own/plugins 加載它們。

5.7、--verbose

  輸出一定的調試日志。

  小貼士如果你使用的 Logstash 版本低於 1.3.0,你只能用 bin/logstash -v 來代替。

5.8、--debug

  輸出更多的調試日志。

  小貼士:如果你使用的 Logstash 版本低於 1.3.0,你只能用 bin/logstash -vv 來代替。

六、參考資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM