一、背景

假设我们需要从多个渠道来收集数据,比如: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

最新文章

  1. October 16th Week 43rd Sunday 2016
  2. Deep Learning 26:读论文“Maxout Networks”——ICML 2013
  3. oracle 自定义异常处理
  4. dragsort拖动插件的使用
  5. Java [leetcode 7] Reverse Integer
  6. JavaScript类型检测, typeof操作符与constructor属性的异同
  7. 如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN
  8. 使用java的Calendar对象获得当前日期的上几个度开始、结束时间
  9. python关键字
  10. 在Linux下写一个线程池以及线程池的一些用法和注意点
  11. SharePoint 配置传出电子邮件设置
  12. 【编程技巧】ExtJs 设置GridPanel表格文本垂直居中
  13. poj1094-Sorting It All Out-拓扑排序
  14. SpringBoot使用JSP(官网Demo)
  15. PHP基础入门(二)---入门基础知识必备
  16. fsync和fdatasync
  17. JavaScript实现本地图片上传前进行裁剪预览
  18. 【转】基于Token的WEB后台认证机制
  19. 关于thymeleaf+layout布局的使用方式,spring boot 访问页面(静态页面及jsp页面)
  20. [py]监控内存并出图

热门文章

  1. AQS深入分析
  2. vue开发流程
  3. C++ windows 函数讲解(二)鼠标坐标
  4. Jmeter系列(3)- 常用断言之响应断言
  5. springboot pom.xml
  6. css定位:p:nth-child(n)
  7. Appium和Selenium的区别和联系
  8. yum 安装 php 环境
  9. 对OOP的理解
  10. java SE(未完结)