Logstash筆記(四) ----output插件
(一),標準輸出
和之前 inputs/stdin 插件一樣,outputs/stdout 插件也是最基礎和簡單的輸出插件。同樣在這裏簡單介紹一下,作為輸出插件的一個共性了解
配置事例:
output { stdout { codec => rubydebug workers => 2 } } ==等同於 output { stdout { codec => rubydebug { } workers => 2 } } #######以下的命令常用於調試信息。 [[email protected]
解釋:輸出插件統一具有一個參數是workers,logstash為輸出做了多線程的準備。其次就是codec 設置。codec 的作用在之前已經講過。可能除了 codecs/multiline ,其他 codec 插件本身並沒有太多的設置項。所以一般省略掉後面的配置區段。換句話說。上面配置示例的完全寫法應該是:
(二).保存成文件File
通過日誌收集系統將分散在數百臺服務器上的數據集中存儲在某中心服務器上,這是運維最原始的需求。早年的 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 是否采用壓縮格式。就可以一段一段的識別出來數據 —— 反過來說,也就是可以一段一段壓縮了添加在後面!
(三).保存進 Elasticsearch
output { elasticsearch { host => "192.168.0.2" protocol => "http" index => "logstash-%{type}-%{+YYYY.MM.dd}" index_type => "%{type}" workers => 5 template_overwrite => true } }
目前協議支持三種協議:node . http 和tranaport
(四).輸出到Redis
input { stdin {} } output { redis { data_type => "channel" key => "logstash-chan-%{+yyyy.MM.dd}" } }
用 redis-cli 命令行來演示 outputs/redis 插件的實質
(五).發送網絡數據(TCP)
output { tcp { host => "192.168.0.2" port => 8888 codec => json_lines } }
在收集端采用 tcp 方式發送給遠端的 tcp 端口。這裏需要註意的是,默認的 codec 選項是 json。而遠端的 LogStash::Inputs::TCP 的默認 codec 選項卻是 plain !所以不指定各自的 codec ,對接肯定是失敗的。
另外,由於IO BUFFER 的原因,即使是兩端共同約定為 json 依然無法正常運行,接收端會認為一行數據沒結束,一直等待直至自己 OutOfMemory !
所以,正確的做法是,發送端指定 codec 為 json_lines ,這樣每條數據後面會加上一個回車,接收端指定 codec 為 json_lines 或者 json 均可,這樣才能正常處理。包括在收集端已經切割好的字段,也可以直接帶入收集端使用了
本文出自 “清風明月” 博客,請務必保留此出處http://liqingbiao.blog.51cto.com/3044896/1929844
Logstash筆記(四) ----output插件