Logstash 8.6 配置pipelines多管道

背景

在实际使用中,我们希望Logstash能处理各种不同的数据来源,并且各自互相不冲突,同时增删查改Logstash配置而不影响正在运行Logstash实例,实现配置动态重载。

Logstash 单一管道配置


单管道使用单个配置文件,且启动方式比较简单,以下是启动命令:

1
2
./bin/logstash -f ./config/logstash.conf -t   # 这是测试配置文件语法是否OK
./bin/logstash -f ./config/logstash.conf # 去掉-t参数则启动logstash单节点服务

Logstash 多管道配置

有时我们有N个配置文件需要logstash进行处理,端口实例却只有一个,总不能用docker开N多个logstash服务,并启用不同端口在指向不同文件?这种方式也太过繁琐,我们希望由logstash配置文件去管控不同的管道。如下图:

这个地方遇到坑有两个
1、./config/logstash.yml需要定义path.config路径,然后启动logstash服务要不带参数
2、 在1的基础上,使用./bin/logstash -f ./config/logstash.yml

尤其是在文章里写上启动logstash 6.0以后不要带参数的,有些害人不浅,不知瞎抄文章自己有没有去实践过!

使用多管道的核心还是定义pipelines.yml文件,例如:

1
2
3
4
5
6
- pipeline.id: my_test_log1
path.config: "/data/logstash/config/my_test_log1.conf"
- pipeline.id: my_test_log2
path.config: "/data/logstash/config/my_test_log2.conf"
- pipeline.id: my_test_log3
path.config: "/data/logstash/config/my_test_log3.conf"

如果按照我上面警告两项去启动logstash的话,服务会出现以下警告:

1
[WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified

logstash 直接忽略pipelines.yml文件,那么在里面定义的配置失去应有的作用,我遇到的问题是,logstash服务是启动了,但是只有my_test_log1.conf配置能正常过滤处理,其他两个配置文件均过滤失败,哪怕读取到数据源是正确的路径也不行,所有正确启动命令如下:

1
./bin/logstash --path.settings /data/logstash/config/

当然,多管道运行还有其他各种各样的配置,其中就包括模块化配置,这个可以浏览官方文档如何创建易于维护和再利用的 Logstash 管道

pipelines.yml文件必须要跟my_test_log1.conf、my_test_log2.conf、my_test_log3.conf处于同一级目录下,否则启动失败

启动成功后,会打印如下信息

1
[INFO ][logstash.agent           ] Pipelines running

Logstash 配置重载

logstash 在过滤数据时,添加配置或者改配置最不想的是重启服务,以免造成数据丢失风险,
(1) 创建并配置my_test_log4.conf文件
(2) 添加my_test_log4.conf文件到pipelines.yml

1
2
- pipeline.id: my_test_log4
path.config: "/data/logstash/config/my_test_log4.conf"

(3) 查看logstahs进程号

1
ps -aux | grep logstash

(4) 发送HUP信号给logstash使其重载配置

1
kill -HUP $(logstash_pid)

其实动态加载还有其他方式,比如在命令行启动服务时,添加--config.reload.automatic参数,还有一种方式就是通过logstash API服务,默认端口号9600,在命令行执行curl -X POST "localhost:9600/_pipeline/pipeline1/reload"进行重载,但是,这后两种我没去试过!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!