Logstash 多 Pipeline 配置
官方推荐的方式是:一个总控文件
pipelines.yml,多个独立的*.conf管道文件。启动时不再用-f,而是让 Logstash 自动读取总控配置。
1. 为什么要用多 Pipeline?
- 隔离:不同业务的输入/输出不会互相影响。
- 并行:每个 pipeline 都有独立的线程池和队列。
- 灵活:某个 pipeline 卡住不会拖慢全局。
2. 推荐目录结构
/etc/logstash/ ← path.settings
├─ pipelines.yml # 管道总控文件(必须有)
├─ logstash.yml # 全局配置(可选)
├─ jvm.options # JVM 参数(可选)
└─ pipelines/ # 业务管道文件夹├─ app1.conf├─ app2.conf└─ ...
3. 总控文件 pipelines.yml
- pipeline.id: app1path.config: "/etc/logstash/pipelines/app1.conf"queue.type: persistedpipeline.workers: 8- pipeline.id: app2path.config: "/etc/logstash/pipelines/app2.conf"queue.type: memorypipeline.workers: 4
👉 总控里只关心:谁是 pipeline、去哪找配置、性能参数怎么调。
👉 每个管道的业务逻辑仍写在独立 *.conf 文件中。
4. 业务管道文件(示例)
pipelines/app1.conf
input { beats { port => 5044 } }
filter { mutate { add_field => { "[@metadata][pipe]" => "app1" } } }
output { elasticsearch { hosts => ["http://es:9200"] index => "app1-%{+YYYY.MM.dd}" } }
5. 启动方式
不再用 -f,直接指定 path.settings:
bin/logstash --path.settings /etc/logstash -r
--path.settings→ 指定配置目录(包含 pipelines.yml)-r→ 热加载 conf 文件变更
