它一個有jruby語言編寫的運行在java虛擬機上的具備收集分析轉發數據流功能的工具
能集中處理各類類型的數據
能標準化不通模式和格式的數據
能快速的擴展自定義日誌的格式
能很是方便的添加插件來自定義數據html
經過在配置文件編寫輸入(input),過濾(filter),輸出(output)相關規則,對數據收集轉發。java
數據類型
boolen: 布爾 a => true
Bytes: 字節 a => 「10MiB」
Strings:字符串 a => 「hello world」
Number: 數值 a => 1024
Array: 數組 match => [「datatime」,「UNIX」,「ISO8601」]
Hash: 哈希 options => { key1 => 「value1」,key2 => 「value2」 }
編碼解碼: codec: codec => 「json」
密碼型: my_passwd => 「password」
路徑: my_path => 「/tmp/logstash」
註釋: #node
條件判斷
==,!= ,< ,> ,<= ,>=
=~
in,not in
and ,or , nand, xor
(), !()
if expression {
} else if expression {
…
} else {
…
}nginx
字段引用
%{[response][status]}正則表達式
# 輸入 input { ... } # 過濾器 filter { ... } # 輸出 output { ... }
input實例express
input { # file爲經常使用文件插件,插件內選項不少,可根據需求自行判斷 file { path => "/var/log/httpd/access_log" # 要導入的文件的位置,可使用*,例如/var/log/nginx/*.log Excude =>」*.gz」 # 要排除的文件 start_position => "beginning" # 從文件開始的位置開始讀,默認是end ignore_older => 0 # 多久以內沒修改過的文件不讀取,0爲無限制,單位爲秒 sincedb_path => "/dev/null" # 記錄文件上次讀取位置;輸出到null表示每次都從文件首行開始解析 add_field=>{"test"="test"} # 增長一個字段 type => "apache-log" # type字段,可代表導入的日誌類型 } }
input擁有多個插件,選擇對應的插件獲取相應的數據。相關連接:input相關插件apache
filter實例
插件grok插件
grok插件有很是強大的功能,他能匹配一切數據,可是他的性能和對資源的損耗一樣讓人詬病。相關插件:filter相關插件連接json
方法一: filter{ grok{ #首先要說明的是,全部文本數據都是在Logstash的message字段中的,咱們要在過濾器裏操做的數據就是message。 #只說一個match屬性,他的做用是從message 字段中把時間給摳出來,而且賦值給另個一個字段logdate。 #第二點須要明白的是grok插件是一個十分耗費資源的插件。 #第三點須要明白的是,grok有超級多的預裝正則表達式,這裏是沒辦法徹底搞定的,也許你能夠從這個大神的文章中找到你須要的表達式 #http://blog.csdn.net/liukuan73/article/details/52318243 #可是,我仍是不建議使用它,由於他徹底能夠用別的插件代替,固然,對於時間這個屬性來講,grok是很是便利的。 match => ['message','%{TIMESTAMP_ISO8601:logdate}'] } } 方法二: filter { grok { match => {"message"=>"%{IPORHOST:clientip}\s+%{WORD:method}\s+%{URIPATHPARAM:request}\s+%{NUMBER:bytes}\s+%{NUMBER:duration}"} } }
output實例
插件elasticsearch,相關插件連接地址:output插件地址數組
elasticsearch{ hosts=>["10.0.0.11:9200"] # elasticsearch 地址 端口 action=>"index" # 索引 index=>"indextemplate-logstash" # 索引名稱 #document_type=>"%{@type}" document_id=>"ignore" template=>"/opt/logstash-conf/es-template.json" # 模板文件的路徑 template_name=>"es-template.json" # 在es內部模板的名字 template_overwrite=>true # protocol => "http" #目前支持三種協議 node、http 和tranaport }