logstash多管道配置¶
当logstash需要处理多个配置文件的输入输出时,为了避免单管道处理冲突与重复,我们需要启用多管道配置
现在需要处理mysql-audit、nginx、system三个配置文件的日志,之前启用的默认管道配置。当多个输入进入同一个pipeline时,默认情况下所有过滤器都会应用到每个事件上,经过配置文件过滤输出到ES时,生成3条重复日志(因为配置文件有三个,端口也是三个)
现在配置(默认main管道):
- mysql 使用5044端口
- nginx 使用5045端口
- system 使用5046端口
优化¶
使用单独管道,为每种日志类型创建独立的pipeline
首先修改logstash.yml启用多管道¶
| Bash | |
|---|---|
创建配置文件目录¶
将conf.d 目录下配置文件mv 到新目录,确保conf.d目录空
Logstash 会加载 conf.d/ 下所有 .conf 文件,即使已配置多管道。务必移除非管道化配置 在 Logstash 7.6.1 中,当 conf.d 目录存在时,它会自动加载该目录下的所有 .conf 文件,这会覆盖 pipelines.yml 的配置 即使注释掉 path.config,Logstash 7.6.1 仍会 默认扫描 conf.d 目录(这是内置行为) 如果检测到 conf.d 目录中有 .conf 文件,Logstash 会 自动退回到单管道模式 pipelines.yml 的优先级 低于 自动发现的配置文件
创建管道配置文件pipelines.yml¶
queue.type: persisted 会启用 磁盘持久化队列,主要解决两个关键问题:
- 数据防丢失:当 Logstash 崩溃或重启时,内存中未处理的事件不会丢失
- 流量峰谷缓冲:在突发高流量时,自动将数据暂存到磁盘,避免内存溢出
何时必须启用磁盘持久化队列?
强烈建议在以下场景启用:
- 处理关键业务日志(如订单、支付日志)
- 网络不稳定的环境(ES 集群可能临时不可用)
- 有突发流量场景(如促销活动时日志量激增)
性能影响说明
- 写入性能:会有5-15%的性能下降(因需要写磁盘)
- 资源消耗:
- 额外占用约 200MB 内存(用于队列管理)
- 需要保证磁盘有足够空间(建议单独挂载高速磁盘)
如果想显式控制顺序性,可以在 logstash.yml 中添加
| Bash | |
|---|---|
启用了多管道,也可以在pipelines.yml中单独配置
| Bash | |
|---|---|
pipeline.ordered: auto是Logstash自动选择顺序/并行的模式(推荐默认)。- 如果数据需要严格顺序(如 MySQL binlog),设为
true;否则用false提高性能。
监控方法
curl -s http://localhost:9600/_node/stats/pipelines?pretty | jq '.pipelines'