之前的章节讲述的都是单个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" }