之前的章节讲述的都是单个Logstash进程,及其对数据的读取,解析和输出处理。
但是,在生产环境中,从每台应用服务器运行logstash 进程并将数据直接发送到Elasticsearch里,显然不是第一选择,
原因有三:
1. 过多的客户端连接对Elaticsearch 是一种额外的压力
2. 网络抖动会影响到Logstash 进程,进而影响生产应用
3.运维人员未必愿意在生产服务器上部署Java,或者让Logstash 跟业务代码争夺Java资源。
所以,在实际运用中,Logstash 进程被氛围两个不同的角色。
1.运行在应用服务器上的尽量减轻运行压力,只做读取和转发,这个角色叫Shipper
2.运行在独立服务器上的完成数据解析处理,负责写入Elasticsearch的角色 叫做Indexer
5.1 通过Redis 队列扩展:
Redis 服务器是Logstash 官方推荐的Broker选项,Broker 角色也就意味着会同时存在输入和输出两个插件。
5.1.1 读取Redis数据
zjtest7-frontend:/usr/local/logstash-2.3.4/config# cat redis.comf
input {
redis {
data_type =>"pattern_channel"
key =>"logstash-list"
host=>"192.168.32.67"
port=>6379
password => "1234567"
}
}
output {
stdout {
codec=>rubydebug{}
}
}
zjtest7-frontend:/usr/local/logstash-2.3.4/config# ../bin/logstash -f redis.comf
Settings: Default pipeline workers: 1
Pipeline main started
{
"message" => "hello zjzc",
"tags" => [
[0] "_jsonparsefailure"
],
"@version" => "1",
"@timestamp" => "2016-09-01T06:29:47.551Z"
}