logstash多任务多管道pipeline配置启动,方案分析

6.0以下方案

logstash处理多个输入输出源方案

没有使用多管道,两个任务,jdbc demo
手写自定义mysql.conf

input {
    stdin {}
    jdbc {
       # 第一个任务对应一个type;
        type => "type_1"
         # ...省略
         # 同步频率(分 时 天 月 年),默认每分钟同步一次;
        schedule => "* * * * *"
    }
    jdbc {
         # 第二个任务对应一个type;
         type => "type_2"
          # ...省略
    }
}

filter {
 if [type] == "type_1" {
   #过滤
    json {
        source => "message"
        remove_field => ["message"]
    }
    # nested聚合
    aggregate{
	 task_id => "%{id}"
	 code => "
		map['id'] ||= event.get('id')
		map['name'] ||= event.get('name')
		map['hobby'] ||= event.get('hobby')
		map['genshin'] ||=[]
		map['genshin'] << {'student_id' =>event.get('student_id'),'person' => event.get('person')}
		event.cancel()
	 "
	push_previous_map_as_event =>true
	timeout => 5
	}
  }
  if [type] == "type_2" {}
}

output {
    # output模块的type需和jdbc模块的type一致
    if [type] == "type_1" {
        elasticsearch {
             # host => "x.x.x.x"
             # port => "9200"
             # 配置ES集群地址
            hosts => ["x.x.x.x:9200", "x.x.x.x:9200"]
             # elastic索引名字,必须小写
            index => "logstash_test"
             # 数据唯一索引(建议使用数据库id)
            document_id => "%{id}"
        }
    }
    if [type] == "type_2" {
        elasticsearch {
            # host => "x.x.x.x"
            # port => "9300"
            # ...省略
        }
    }
}

6.0以下方案分析

如果logstash需要配置多源输入输出,在一个管道pipeline里配置多个独立的输入流输出流,需要用 if 判断,这样确实能够解决问题,但是也会有隐患,如果某个任务流出现阻塞无法使用,那么其他的流也会收到影响不能正常工作。
6.0过后出现了多pipeline结构,可以配置多个pipeline,他们之间互不影响,一个pipeline出现问题不影响其他pipeline工作

启动方式

在解压后的目录./bin/logstash -f 某某.conf,可以用-f指定启动的配置,就是上面的demo配置

6.0以上方案

使用多pipeline互不影响方案
在conf下有个配置文件pipeline.yml

# List of pipelines to be loaded by Logstash
#
# This document must be a list of dictionaries/hashes, where the keys/values are pipeline settings.
# Default values for omitted settings are read from the `logstash.yml` file.
# When declaring multiple pipelines, each MUST have its own `pipeline.id`.
#
# Example of two pipelines:
#放开#注释字典的方式定义了logstash_test这个pipeline
 - pipeline.id: logstash_test
   pipeline.workers: 4
   pipeline.batch.size: 1
   # 指向类似上面那个demo的配置,只是没有if判断多个流而已,一个pipeline最好只做一个任务
   path.config: "/Users/xx/apps/logstash_run/logstash-8.0.0-beta1/script/mysql2.conf"
   queue.type: persisted
#   config.string: "input { generator {} } filter { sleep { time => 1 } } output { stdout { codec => dots } }"
#放开#注释字典的方式定义了another_test这个pipeline,这里没有放开,所以只启动了上面一个管道
# - pipeline.id: another_test
#   queue.type: persisted
#   path.config: "/tmp/logstash/*.config"

启动方式

如果启动命令不加 -f 指定自定义的conf配置,它会自己找到pipeline.yml配置启动,
命令:./bin/logstash
这时候只会启动pipeline放开#注释的pipeline,如果有多个pipeline就会启动多个

如果看爽了,就点个赞吧(doge)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Logstash 是一个用于数据收集、处理和传输的开源工具,它使用管道pipelines)来定义数据流的处理过程。在配置 Logstash 管道时,你可以按照以下步骤进行: 1. 定义输入插件(Input Plugin):选择适合你数据来源的输入插件,例如 file、tcp、udp、kafka 等。配置插件参数以指定数据的来源和格式。 2. 定义过滤器(Filter Plugin):根据需要,选择并配置适合的过滤器插件来处理输入数据。过滤器可以用于解析、转换、丰富或过滤数据。常用的过滤器插件有 grok、mutate、json、date 等。 3. 定义输出插件(Output Plugin):选择适合你的目标系统的输出插件,例如 elasticsearch、kafka、stdout 等。配置插件参数以指定数据的输出目的地和格式。 4. 定义编解码器(Codec)(可选):如果需要对数据进行编解码(如 JSON、CSV 等),可以选择并配置适合的编解码器。 5. 定义管道Pipeline):将输入、过滤器和输出插件按照顺序组合成一个管道。通过指定输入插件和输出插件的配置参数,将数据从输入源传递到输出目的地,期间经过过滤器的处理。 6. 启动 Logstash启动 Logstash,并指定配置文件所在的路径。Logstash 将读取配置文件并根据配置管道进行数据处理和传输。 需要注意的是,Logstash配置语法是基于 Ruby 的,你可以使用条件语句、循环语句等来实现更复杂的逻辑处理。 希望以上信息能对你有所帮助!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可——叹——落叶飘零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值