一、背景

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

logstash multi pipeline的使用的更多相关文章

  1. Logstash学习-Hello World

    1.安装 rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearchcat > /etc/yum.repos.d/l ...

  2. 开始使用Logstash

    开始使用Logstash 本节将指导处理安装Logstash 和确认一切是运行正常的, 后来的章节处理增加负载的配置来处理选择的使用案例. 这个章节包含下面的主题: Installing Logsta ...

  3. logstash grok正则调试

    logstash 正则调试: nginx 配置: log_format main '$remote_addr [$time_local] "$request" '; logstas ...

  4. 往redis中存储数据是利用pipeline方法

    在redis中保存数据时,保存和设置有效时间是分开写的话,如果中间出现的异常,这会导致数据永久有效,因此就可以采用pipeline方法. # 创建redis管道对象,可以一次执行多个语句 pipeli ...

  5. Redis的Multi的内幕真相

    今天遇到个Redis奇慢的问题,断点分析发现跟multi有关. 由于本人太忙不想去阅读Redis Server的源代码(其实是懒),就通过TCPDump来分析吧. 步骤: 1. 先在Redis Ser ...

  6. logstash 5.1.1 学习

    Logstash 5.1.1 安装配置 安装和配置 java 环境: [root@ ~]# tar xf jdk-8u71-linux-x64.tar.gz [root@ ~]# mv jdk1.8. ...

  7. [svc]logstash和filebeat之间ssl加密

    cfssl生成证书 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl wget https://pkg ...

  8. 微服务日志监控与查询logstash + kafka + elasticsearch

    使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...

  9. SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据

    在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...

随机推荐

  1. npm 淘宝镜像与官方源 切换

    1.临时使用 npm --registry https://registry.npm.taobao.org install 包名 2.永久设置为淘宝镜像 npm config set registry ...

  2. npm 设置同时从多个包源加载包的方法

    随着前后端分离技术的发展成熟,越来越来越多的后台系统甚至前端系统采用前后端分离方式,在大型前后端分离系统中,前端往往包含大量的第三方js 包的引用,各个第三方包又可能依赖另外一个第三方包,因此急需要一 ...

  3. sort-uniq-tr-cut命令 对文件处理相关操作

    目录: 一.sort命令 二.uniq命令 三.tr命令 四.cut命令 五.eval命令 一.sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序 语法格式 sort [选项] ...

  4. RabbitMQ-TTL-死信队列_DLX

    1. 简介 死信队列,简称:DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX. (一般会将DL ...

  5. 网络前置任务(Pretext task)和下游任务(downstream tasks)

    Pretext task 可以理解为是一种为达到特定训练任务而设计的间接任务. 比如,要训练一个网络来对 ImageNet 分类,可以表达为 $f_{\theta}(x): x \rightarrow ...

  6. PHP的可变变量与可变函数

    什么叫可变.在程序世界中,可变的当然是变量.常量在定义之后都是不可变的,在程序执行过程中,这个常量都是不能修改的.但是变量却不同,它们可以修改.那么可变变量和可变函数又是什么意思呢?很明显,就是用另一 ...

  7. django对layui中csrf_token处理方式及其它一些处理

    第一:由于layui官方是没有csrf_token处理机制,所以,在使用layui中post请求,请不要按layui官方提供的两种方法进行设置 官方设置如下: table.render({ elem: ...

  8. 真机连接电脑后,adb devices显示为空-解决方案

    真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...

  9. P6329-[模板]点分树 | 震波

    正题 题目链接:https://www.luogu.com.cn/problem/P6329 解题思路 给出\(n\)个点的一棵树,每个点有权值,有\(m\)次操作 修改一个点\(x\)的权值为\(y ...

  10. 解决导入MAVEN项目报错Dynamic Web Module 3.1 requires Java 1.7 or newer.

    解释:web模块需要使用java1.7及以后的版本,目前的版本不符合.因而只需要修改java版本到1.7及以上即可. 解决方法: 1.保证 在eclipse 构建 web中关于java版本有三处需要修 ...