logstash的管道包含三个部分,输入,过滤,输出,复杂的pipeline可能会有多个input输入,filter和多个ouput输出,可以使用命令-e参数行定义变量配置,使用配置文件定义复杂配置,通过参数f指定使用某个配置文件,或者某个目录下所有配置,若出现多个-f,则默认只会使用最后一个配置,input,生成logstash中所用的数据结构Event,filter,对Event进行过滤及修改, output,输出event,其中Event是logstash内部数据的表现形式。
在pipeline管道中每一个input输入拥有自己的线程,默认情况下,input会将转换后的event输出到内存中队列(也可以配置输出到磁盘),每一个pipeline的worker线程,批量的从队列中取出事件处理。pipeline的worker线程和批量取多少事件,是可以配置的。默认情况下,logstash使用的是内存队列,如果进程非正常结束,有可能会丢失数据。
实际上input是可以有多个,每个input有一个编码器codec,queue负责把流入的数据分发到不同的Pipeline中,每个Pipeline有filter和output和batcher,如图中有3个Pipeline,batcher的作用是从queue中批量的取数据。batcher当event的数目或者时间达到了一定的条件就会到filter中,然后再到output,到了output之后会有发送一个ACK给Queue来告诉Queue这些Logstash Event已经处理完了。注意这里的Worker threads是同步进行的,也就是说线程越多,那么处理数据的能力就越强。
#默认memory,设置为持久化队列 queue.type:persisted #数据文件存储位置,默认:path.data/queue path.queue #持久化队列的最大容量,默认1g,需要注意主机磁盘容量是否充足,如果仅仅是为了保证数据不丢失,则可以将这个值设置小一些 queue.max_bytes #logstash提交队列event数据到磁盘的操作称为checkpoint,可以设置如下属性为1,表示按一个event为单位落盘,在需要考虑磁盘开销的情况下,并不建议设置为1。 queue.checkpoint.writes
curl -XGET 'localhost:9600/?pretty' curl -XGET 'localhost:9600/_node/pipelines?pretty' curl -XGET 'localhost:9600/_node/jvm?pretty'