logstash multi-pipelines
场景
1. 多个input
2. 多个output
3. input与output存在某种对应关系
解决方案
- 单实例+单pipeline
- 多实例
- 单实例+multi pipelines
1.单实例+单pipeline
实现:
- 配置多个input、filter、output
- input添加type变量
- filter、output通过条件判断与input关联
问题:
- 冗长的条件判断
- 缺乏拥塞隔离(logstash接收一批事件处理输出完之后才会处理下一批,某个数据源处理过程拥塞会影响其它数据源的处理)
2.多实例
实现:
- 单台服务器启动多个logstash实例
- 每个实例需要指定不同的path.data(如:bin/logstash -f config/logstash.conf --path.data=/apprun/ &)
问题:
- 每个实例拥有独立的内存,会占用更多的资源
- 管理不便
*3.单实例+multi pipelines
实现:
- 配置pipelines.yml,放置到home_dir/config/下
- 定义不同的pipeline设置不同的配置和数据源
- 不指定配置直接启动程序:bin/logstash(启动命令后不可跟 -e或-f,否则不会使用默认的 config/pipelines.yml)
pipelines.yml定义如:
- pipeline.id: main
path.config: "/etc/logstash/config/logstash.conf"
pipeline.workers: 3
- pipeline.id: tcp
path.config: "/etc/logstash/config/tcp.conf"
queue.type: persisted
不同的pipeline可以根据数据量的不同设置不同的配置