乐趣区

关于运维:logstash-multi-pipeline的使用

一、背景

假如咱们须要从多个渠道来收集数据,比方:1、从文件收集。2、从 tcp 收集。不同的渠道收集过去的数据须要做不同的解决。那么咱们这个时候应该如何解决呢?

二、解决方案

1、计划一:

应用同一个 logstash 实例,而后将在一个 pipeline 中,接管多个输出, 比方:

input {file {}
    file {}
    tcp {}}

这样尽管能够实现,然而咱们 在 filteroutput 阶段如果不同的输出存在不同的过滤、输入等,那么这个文件将会非常复杂,须要进行各种判断,不好保护。

2、计划二:

应用多个 logstash 实例,每个 logstash 实例解决不同的输出。这样尽管能够实现,然而 logstash 略微有点消耗性能,也是不可取的。

3、计划三:

在同一个 logstash 实例中,应用多个 pipeline,每个 pipeline 解决不同的 input,filterout。即配置扩散在多个配置文件中。

三、实现步骤

此处采纳上方的 计划三 来实现。

1、编写 pipeline 文件

1、从文件收集,输入到控制台

vim file-pipeline.conf

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}
    }
}

2、从 socket 收集,输入到控制台

vim tcp-pipeline.conf

# 开启一个 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"}
    }
}

留神⚠️:

1、tcp 中的 id 的值倡议设置成一个惟一的值,这个当咱们有多个 tcp 输出时,在咱们应用监控 api 会十分有用。

2、批改 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"

留神⚠️:

1、如果上方的配置文件应用的是一个 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"

3、启动 logstash

bin/logstash

留神⚠️:

1、此处的启动命令后不可跟 -e-f,如果跟了,则不会应用默认的 config/pipelines.yml

4、测试

1、测试 file 收集

cd /Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline
echo "察看控制台输入" >> file-pipeline.log

2、测试从 tcp 收集

nc 127.0.0.1 9202
123456 -> 察看控制台输入 

3、后果

四、参考文档

1、tcp 文件收集

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

退出移动版