插件獲取地址: https://github.com/logstash-plugins 在線安裝: /plugin install logstash-input-jdbc 升級插件: /plugin update logstash-input-jdbc 卸載插件: /plugin uninstall logstash-input-jdbc 淘寶源地址: https://ruby.taobao.org
stdin標準輸入html
可用參數linux
參數 Input Type Required Default Value add_field hash No {} codec codec NO "line" tags array NO type string NO
file文件輸入nginx
可用參數git
input { file { #file插件的參數 codec=>... #可選項 codec, 默認是plain,可經過這個參數設置編碼方式 discover_interval=>... #可選項 number, logstash沒隔多久去檢查一次被監聽的path下是否有新文件,默認值是15秒 exclude=>... #可選項 array, 不想被監聽的文件能夠排除出去,這裏跟path同樣支持glob展開 sincedb_path=>... #可選項 string, 若是你不想用默認的$HOME/.sincedb,能夠經過這個配置定義sincedb文件到其餘位置 stat_interval... #可選項 number, logstash沒隔多久檢查一次被監聽文件狀態(是否有更新),默認是1秒 start_position... #可選項 string, logstash從什麼位置開始讀取文件數據,默認是結束位置,也就是說logstash進程會以相似tial -f的形式運行.若是你是要導入一個完整的文件,把這個設定能夠改爲"beginning",logstash進程就會從文件開頭讀取,有點相似cat path=>... #必選項 array, 處理的文件的路徑,能夠定義多個路徑 tags=>... #可選項 array, 在數據處理的過程當中,由具體的插件來添加或者刪除的標記 type=>... #可選項 string, 自定義將要處理事件類型,能夠本身隨便定義,好比處理的是linux的系統日誌,能夠定義爲"syslog" } }
實例1:過濾nginx的訪問日誌和錯誤日誌github
配置文件正則表達式
[root@ELK-STACK logstash-1.5.5]# cat conf/test1.conf input { file { path => ["/var/log/nginx/access.log"] type => "accesslog" start_position => "beginning" } file { path => ["/var/log/nginx/error.log"] type => "errorlog" start_position => "beginning" } } output { stdout{} }
測試數據庫
[root@ELK-STACK logstash-1.5.5]# ./bin/logstash -f conf/test1.conf
Logstash startup completed
2017-02-23T08:00:25.757Z 0.0.0.0 2017/02/23 12:14:01 [error] 2145#0: *47 open() "/usr/share/nginx/html/zabbix" failed (2: No such file or directory), client: 172.16.2.64, server: _, request: "GET /zabbix HTTP/1.1", host: "172.16.1.225"
2017-02-23T08:00:25.757Z 0.0.0.0 172.16.2.64 - - [23/Feb/2017:12:14:01 +0800] "GET /zabbix HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"
2017-02-23T08:01:09.785Z 0.0.0.0 172.16.2.64 - - [23/Feb/2017:16:01:09 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50" "-"
TCP/UDP輸入json
TCPvim
語法格式ruby
input { tcp { #tcp插件的參數 類型 默認值 add_field=>... #可選項 hash {} codec=>... #可選項 plain data_timeout=>... #可選項 Number 1 host=>... #可選項 0.0.0.0 mode=>... #可選項 值是["server","client"]其中之一,默認是server port=>... #必填項 number 端口號,須要和另外一端匹配 ssl_cacert=>... #可選項 ssl_cert=>... #可選項 ssl_enable... #可選項 ssk_key=>... #可選項 ssl_key_passphrase=>... #可選項 ssl_verify... #可選項 tags=>... #可選項 array type=>... #可選項 string } }
UDP
語法格式
input { udp { #可用參數
#默認值 add_field=>... #hash類型 #可選項 默認{} host=>... #string類型 #可選項 默認0.0.0.0 port=>... #number類型 #必填項 端口號,須要和另外一端匹配 tags=>... #array類型 #必填項 type=>... #string類型 #可選項 workers=>... #number類型 #默認2 } }
介紹: codec:編碼,解碼(json,msgpack,edn)
放置位置: input{}和output()字段裏的任何插件裏(好比說input裏file插件裏 input{file{codec=>json}})
codec插件之plain
介紹:plain是一個空的解析器,它可讓用戶本身指定格式
codec之json
介紹
語法格式: codec=> json
實例1:輸出json化
配置文件
[root@ELK-STACK logstash-1.5.5]# cat conf/json.conf input { stdin { } } output { stdout { codec => json } }
測試
[root@ELK-STACK logstash-1.5.5]# ./bin/logstash -f conf/json.conf
Logstash startup completed #等待logstash啓動成功
hello.world #輸入一個字符串的hello.world
{"message":"hello.world","@version":"1","@timestamp":"2017-02-24T09:01:11.425Z","host":"0.0.0.0"} #能夠看到輸入是以json化的格式輸出的
codec之json_lines
介紹: 若是你的json文件比較長,須要換行的話,那麼久得用到json_lines了
codec之rubydebug
介紹: rubydebug將採用Ruby Awsome Print庫來解析日誌
實例1:經過rubydebug輸出鍵值對
配置文件
cat conf/rubydebug.conf input { stdin { codec => json #輸入爲json格式,因此用codec=>json來解析 } } output { stdout { codec =>rubydebug #讓輸出的格式爲rubydebug模式,就是把鍵值對輸出 } }
測試
[root@ELK-STACK logstash-1.5.5]# ./bin/logstash -f conf/rubydebug.conf Logstash startup completed {"bookname":"elk stack"} #這是輸入的鍵值對 { "bookname" => "elk stack", #這是以rubydebug的模式輸出鍵值對 "@version" => "1", #這是以rubydebug的模式輸出鍵值對 "@timestamp" => "2017-02-24T09:29:50.777Z", "host" => "0.0.0.0" } {"bookname":"elk stack","price":29} #這是輸入的鍵值對 { "bookname" => "elk stack", #這是以rubydebug的模式輸出鍵值對 "price" => 29, #這是以rubydebug的模式輸出鍵值對 "@version" => "1", "@timestamp" => "2017-02-24T09:31:08.224Z", "host" => "0.0.0.0" }
codec之multiline
介紹: 有些時候,應用程序調試日誌會包含很是豐富的內容,爲一個事件打印出不少行內容。這種日誌一般都很難經過命令行解析的方式作分析;而 logstash 正爲此準備好了 codec/multiline 插件
語法格式
input { stdin { codec =>multiline { charset=>... #可選 字符編碼 max_bytes=>... #可選 bytes類型 設置最大的字節數 max_lines=>... #可選 number類型 設置最大的行數,默認是500行 multiline_tag... #可選 string類型 設置一個事件標籤,默認是multiline pattern=>... #必選 string類型 設置匹配的正則表達式 patterns_dir=>... #可選 array類型 能夠設置多個正則表達式 negate=>... #可選 boolean類型 設置true是向前匹配,設置false向後匹配,默認是FALSE what=>... #必選 設置未匹配的內容是向前合併仍是前後合併,previous,next兩個值選擇 } } }
json filter
介紹:若是數據格式是json,那麼能夠經過它把數據解析成你想要的數據結構
語法格式
filter { json { add_field=>... #可選項 #hash 添加屬性,默認{} add_tag=>... #可選項 #array 添加標識,默認{} remove_field=>... #可選項 #array 刪除屬性,默認{} remove_tag=>... #可選項 #array 刪除標識,默認{} source=>... #必選項 #string 指定來源數據 target=>... #可選項 #string 定義將要解析的目標字段 } }
實例1:解析json數據
配置文件
vim conf/filter_json.conf input { stdin { } } filter { json { source => "message" target => "content" } } output { stdout { codec=>rubydebug } }
測試
[root@ELK-STACK logstash-1.5.5]# ./bin/logstash -f conf/filter_json.conf Logstash startup completed {"name":"zhai","age":12} #輸入被解析的值 { "message" => "{\"name\":\"zhai\",\"age\":12}", "@version" => "1", "@timestamp" => "2017-02-27T08:31:13.193Z", "host" => "0.0.0.0", "content" => { "name" => "zhai", #這裏就是json字段裏的name "age" => 12 #這裏就是json字段裏的age } }
grok filter
介紹
可用參數
filter { grok { match=>... #可選項 寫匹配規則 } }
kv filter
介紹: 經過指定一個分隔符,截取key,value
介紹: logstash output就是如何讓數據通過logstash的解析和處理後,把結果輸出
輸出到file
可用參數
path => "/root/access_result" #結果輸出到文件裏 path => "/root/%{+YYYY.MM.dd}-%{host}-access" #結果輸出到文件裏,以時間命名文件 message_format => "%{ip}" #只輸出filter過濾出來的指定字段
輸出到elasticsearch
實例1:輸出到elasticsearch
output { elasticsearch { host => "172.16.1.225" #elasticsearch的地址,或者cluster=>"ClusterName" protocol =>"http" index=>"test_output-%{type}-%{+YYYY.MM.dd}" #在elasticsearch裏建立索引,索引名稱設置,type就是document_type的值,test_output-nginx-2017-02-28 document_type=>"nginx" worker=>5 } }