logstash multi pipeline的使用

1、背景

假设咱们须要从多个渠道来收集数据,好比:一、从文件收集。二、从tcp收集。不一样的渠道收集过来的数据须要作不一样的处理。那么咱们这个时候应该如何处理呢?html

2、解决方案

一、方案一:

使用同一个 logstash 实例,而后将在一个 pipeline 中,接收多个输入,好比:vim

input {
	file {}
	file {}
	tcp {}
}
复制代码

这样虽然能够实现,可是咱们 在 filteroutput阶段若是不一样的输入存在不一样的过滤、输出等,那么这个文件将会很是复杂,须要进行各类判断,很差维护。api

二、方案二:

使用多个 logstash 实例,每一个 logstash 实例处理不一样的输入。这样虽然能够实现,可是 logstash 稍微有点耗费性能,也是不可取的。ruby

三、方案三:

在同一个 logstash 实例中,使用多个 pipeline,每一个 pipeline 处理不一样的 input,filterout。即配置分散在多个配置文件中。bash

3、实现步骤

此处采用上方的 方案三 来实现。markdown

一、编写 pipeline 文件

一、从文件收集,输出到控制台

vim file-pipeline.confsocket

input {
    file {
        path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.log"]
        start_position => "end"
        sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/sincedb.db"
        sincedb_write_interval => "15 seconds"
        mode => "tail"
        type => "file-pipeline"
    }
}

filter {
    
}

output {
    stdout {
        codec => rubydebug {
            metadata => true
        }
    }
}
复制代码

二、从socket收集,输出到控制台

vim tcp-pipeline.conftcp

# 开启一个tcp监听在9092端口
# id 的值建议设置成惟一的值,这在多个tcp input时,使用监控api时很是有用的。
input {
    tcp {
        port => 9202
        host => "127.0.0.1"
        mode => "server"
        type => "tcp-pipeline"
        id => "console-tcp"
    }
}

filter {
    
}

output {
    stdout {
        codec => line {
            charset => "UTF-8"
        }
    }
}
复制代码

注意⚠️:ide

一、tcp 中的 id的值建议设置成一个惟一的值,这个当咱们有多个 tcp 输入时,在咱们使用监控api会很是有用。oop

tcp 中 id的值

二、修改 pipelines.yml 配置文件

vim LS_HOME/config/pipelines.yml

- pipeline.id: file-pipeline
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.conf"
- pipeline.id: tcp-pipeline
  queue.type: persisted
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/tcp-pipeline.conf"
复制代码

注意⚠️:

一、若是上方的配置文件使用的是一个 pipeline,好比删除下方的 tcp-pipeline,将 file-pipeline的 path.config 的值修改为 .../*.conf,

那么此时会共用 output,会发现数据重复。

即修改为:

# 这样是多个配置文件共用一个 pipeline,filter\output等会共享。
- pipeline.id: file-pipeline
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/*.conf"
复制代码

三、启动logstash

bin/logstash
复制代码

注意⚠️:

一、此处的启动命令后不可跟 -e-f,若是跟了,则不会使用默认的 config/pipelines.yml

logstash pipeline 启动注意事项

四、测试

一、测试 file 收集

cd /Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline
echo "观察控制台输出" >> file-pipeline.log
复制代码

二、测试从 tcp 收集

nc 127.0.0.1 9202
123456 -> 观察控制台输出
复制代码

三、结果

测试结果

4、参考文档

一、tcp 文件收集

二、多pipeline https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

相关文章
相关标签/搜索