logstash入門


  此文只是logstash的簡單入門,作者也只是簡單了解logstash,本文只能簡單介紹logstash,對完全不懂logstash是啥的人做個引導,因為我就是這樣過來的~

1.logstash是什么?有什么用?

  在網上搜索logstash,搜索結果中logstash一般是和elasticsearch、kibana一起講的。感覺似乎logstash、elasticsearch、kibana一定要一起用,其實並不是這樣的。logstash是用來收集日志用的,完全可以單獨使用,只是這幾個組合在一起療效比較好。

     做過項目的都知道,傳統的日志一般是直接寫文件。這些日志文件里面可能寫了函數調用次數、服務請求失敗的日志(比如請求內容、時間、IP什么的),這些日志往往內含豐富的內容。通過分析這些日志可以讓我們知道系統主要運行哪些服務、什么時候是服務的高峰期、錯誤比較集中的地方是哪兒,通過了解這些內容,我們可以提升系統的性能、提供更好的服務。日志文件一般是寫在本地的,如果一個分布式系統的日志全部都寫在本地,我們要聚合、分析這些日志也是相當麻煩的事。這時候logstash就派上用場了,日志還是原來那樣寫,只不過不是寫文件了,而是寫到RabbitMQ、Redids這些地方,然后logstash在另一頭不斷的取出這些日志,然后對這些日志進行一些處理,輸出到另外一個地方,比如說elasticsearch或者在線分析的平台什么的。這時候日志就寫到一起了,就方便使用了。

2.logstash基礎

   在logstash中,一條條的日志其實都是事件。logstash事件中有一個個不同的字段,每個字段中都有不同的值。在logstash中,值可以有布爾、數值、字符串、數組和Hash表這5種類型。前三種就不說了,數組的寫法是這樣的["hello", "world", "!"],Hash表的寫法是這樣的{key1=>value1,key2=>value2}。前面說到logstash就是收集日志、處理日志然后再輸出出去。所以logstash就是一種input->filter->output的過程,故logstash中就有input、filter、output這三種類型的插件來處理收集到的日志。我們在配置文件中寫好相關的內容、配置好插件,logstash就會按照我們所需要的那樣收集、處理並輸出日志。一個logstash配置文件至少包含input、output插件,filter插件根據實際需求選擇。一個logstash事件的例子(瞎寫的)如下:

1 {
2     message => "Hello, world!",
3     @timestamp => "2016-07-17T12:02:58.322Z"
4     host => "XXX-PC"
5 }

 

  剛才說了logstash可以從RabbitMQ、Kafka、Redis這些消息中間件中抽取日志,這需要配置不同的input插件。如果要從某個消息中間件、文件或者其他地方收集日志,那么就需要在配置文件中配置相應的input插件。當然很多時候,實際收集到的日志和我們實際想存儲的數據模型有些差別,這時候我們就可以配置filter插件來處理這些日志。一般來說單個filter插件是不能完成任務的,那我們就配置多個,然后日志就按照filter1->filter2->....->filterN這樣的順序處理。處理完了以后就通過output插件推送到不同的地方。

3.logstash運行

  使用logstash最關鍵的是寫好配置文件,寫好配置文件了,logstash就會好好的陪你玩耍。下面舉幾個例子:

  標准輸入到標准輸出,並且不做任何處理:

1 input {
2     stdin {
3     }        
4 }
5 output {
6     stdout {
7         codec => rubydebug
8     }
9 }

  這個例子相當簡單,將它保存成xxx.conf, 然后運行logstash -f xxx.conf,windows下輸入 logstash.bat -f xxx.conf。你在屏幕上輸入什么,就會輸出一個還有message為什么的logstash事件。

  從redis讀取,輸出到elasticsearch中:

 1 input {
 2     redis {
 3         key => "logstash-*"
 4         host => "localhost"
 5         port => 6379
 6     }
 7 }
 8 filter {
 9      kv {
10      }
11 }
12 output {
13     elasticsearch{
14         hosts => ["localhost:9200"]
15         index => "logstash"
16         type => "logstah123"
17     }
18     stdout{
19         codec => rubydebug
20     }
21 }

  打開Redis客戶端,以logstash-為前綴保存"key1=val1 key2=val2 key3=val3",你會在屏幕上看到key1、key2、key3都成了不同的字段,而且val1 val2 val3就是對應的值,在elasticsearch也以這種方式保存好了。這是因為kv插件可以處理這種有規則的字符串,默認以空格區分一組key-value,以等號區分key和value。可以更改kv插件的field_split和value_split來改變kv插件的運行表現。

4.相關鏈接

logstash官方文檔(內含各種插件的用法):

https://www.elastic.co/guide/en/logstash/current/index.html

中文書籍:

http://udn.yyuap.com/doc/logstash-best-practice-cn/get_start/index.html


免責聲明!

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



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