Logstash:
數據收集、日誌數據
配置框架
input { ... } filter { ... } output { ... }
四種類型的插件:input ,filter ,codec, output
數據類型
Array: [item1,item2,...] Boolean: true, false Bytes: codec: 編碼器 Hash: key => value Number: Password: Path: 文件系統路徑 String: 字符串
條件判斷
==, != ,< ,<= ,> ,>= =~ , !~ in , not in and , or ()
logstash的工作流程:input | filter |output ,如無需對數據進行額處理,filter可省略
從標準輸入,至標準輸出
input { stdin{} } output { stdout { codec => rubydebug } }
logstash的插件:
input插件:
file:從指定的文件中讀取事件流;其工作特性類似於tail -f -1,使用FileWatch(ruby gem庫)來監聽文件是否發生變化;
.sincedb:記錄了每個被監聽的文件的inode,major,number,minor number,pos;
示例:
input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { stdout { codec => rubydebug } }
udp:通過udp協議從網絡連接來讀取messages,其必備參數爲port,用於指明自己監聽的端口,host則用指明自己監聽的地址;
示例:
input { udp { port => 25826 codec => collectd {} type => "collectd" } } output { stdout { codec => rubydebug } }
filter插件:
用於將event執行ouput之前對其實現處理功能;
grok:用於分析並結構化文本數據;目前,是logstash中將非結構化日誌數據轉化爲結構化的可查詢數據的不二之選。
模式定義位置:
/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns
語法格式:
%{SYNTAX:SEMANTIC}
SYNTAX:預定義模式名稱
SEMANTIC:匹配到的文本的自定義標識符;
示例:
input { stdin{} } filter { grok { match => { "message" => "%{IP:clientip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"} } } output { stdout { codec => rubydebug } } 1.1.1.1 GET /index.html 30 0.23 %{IP:clientip} %{WORD:methond} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} { "message" => "1.1.1.1 GET /index.html 30 0.23", "@version" => "1", "@timestamp" => "2018-05-15T04:16:39.808Z", "host" => "0.0.0.0", "clientip" => "1.1.1.1", "method" => "GET", "request" => "/index.html", "bytes" => "30", "duration" => "0.23" }
自定義grok的模式:
grok的模式是基於正則表達式編寫,其元字符與其它用到正則表達式的工具差別不大。
output插件:
示例:
stdout{} elasticsearch{ cluster => "myes" index => "logstash-%{+YYYY.MM.dd}" } redis { port => "6379" host => ["127.0.0.1"] data_type => "list" key => }