此文只是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