和以前 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 都可,这样才能正常处理。包括在收集端已经切割好的字段,也能够直接带入收集端使用了。