和以前 inputs/stdin 插件同樣,outputs/stdout 插件也是最基礎和簡單的輸出插件。一樣在這裏簡單介紹一下,做爲輸出插件的一個共性瞭解。html
output { stdout { codec => rubydebug workers => 2 } }
輸出插件統一具備一個參數是 workers
。Logstash 爲輸出作了多線程的準備。redis
其次是 codec 設置。codec 的做用在以前已經講過。可能除了 codecs/multiline
,其餘 codec 插件自己並無太多的設置項。因此通常省略掉後面的配置區段。換句話說。上面配置示例的徹底寫法應該是:json
output { stdout { codec => rubydebug { } workers => 2 } }
單就 outputs/stdout 插件來講,其最重要和常見的用途就是調試。因此在不太有效的時候,加上命令行參數 -vv
運行,查看更多詳細調試信息。ruby
經過日誌收集系統將分散在數百臺服務器上的數據集中存儲在某中心服務器上,這是運維最原始的需求。早年的 scribed ,甚至直接就把輸出的語法命名爲 <store>
。Logstash 固然也能作到這點。服務器
和 LogStash::Inputs::File
不一樣, LogStash::Outputs::File
裏可使用 sprintf format 格式來自動定義輸出到帶日期命名的路徑。網絡
output { file { path => "/path/to/%{+yyyy/MM/dd/HH}/%{host}.log.gz" message_format => "%{message}" gzip => true } }
使用 output/file 插件首先須要注意的就是 message_format
參數。插件默認是輸出整個 event 的 JSON 形式數據的。這可能跟大多數狀況下使用者的指望不符。你們可能只是但願按照日誌的原始格式保存就行了。因此須要定義爲 %{message}
,固然,前提是在以前的 filter 插件中,你沒有使用 remove_field
或者 update
等參數刪除或修改 %{message}
字段的內容。多線程
另外一個很是有用的參數是 gzip。gzip 格式是一個很是奇特而友好的格式。其格式包括有:運維
output { elasticsearch { host => "192.168.0.2" protocol => "http" index => "logstash-%{type}-%{+YYYY.MM.dd}" index_type => "%{type}" workers => 5 template_overwrite => true } }
input { stdin {} } output { redis { data_type => "channel" key => "logstash-chan-%{+yyyy.MM.dd}" } }
output { tcp { host => "192.168.0.2" port => 8888 codec => json_lines } }
在收集端採用 tcp 方式發送給遠端的 tcp 端口。這裏須要注意的是,默認的 codec 選項是 json。而遠端的 LogStash::Inputs::TCP 的默認 codec 選項倒是 plain !因此不指定各自的 codec ,對接確定是失敗的。elasticsearch
另外,因爲IO BUFFER 的緣由,即便是兩端共同約定爲 json 依然沒法正常運行,接收端會認爲一行數據沒結束,一直等待直至本身 OutOfMemory !tcp
因此,正確的作法是,發送端指定 codec 爲 json_lines ,這樣每條數據後面會加上一個回車,接收端指定 codec 爲 json_lines 或者 json 都可,這樣才能正常處理。包括在收集端已經切割好的字段,也能夠直接帶入收集端使用了。